Ressources numériques en sciences humaines et sociales OpenEdition Nos plateformes OpenEdition Books OpenEdition Journals Hypothèses Calenda Bibliothèques OpenEdition Freemium Suivez-nous

Making Solar Envelopes

Making Solar Envelopes

Pre-processing

Before being able to perform a solar envelope analysis, several operations need to be done.

This analysis uses 2D data (eg: building footprints).

First, select the building on which the analysis is being done. T4SU only accepts one building (ie: one polygon).

Insert the building into a unique new layer. If the geometry is a group, make sure that the building elements within the group are also in the specific layer.

Calling and running the SolarEnvelope method

You can quickly create a solar envelope by entering into the ruby command box :

solarEnvelope = SolarEnvelope.new("BuildingLayerName", "SurroundingBuildingsLayerName", maximum_height = 10.m, month = 11 , day = 15, hour = 13, minutes = 00, latitude = 47).run

Creating a loop

You can automate the creation of the envelopes according to multiple variables.

To iterate over a set number of days, one can use the SolarDate.dayInYear method, which returns the date :

Example :

SolarDate::DEC_SOLSTICE Dec 21 SolarDate::DEC_SOLSTICE.dayInYear 355

We can choose how many steps we want through the year. For example, setting deltaDayInYear to 1 runs the program for every day. Setting deltaDayInYear to 15 runs the program for every two weeks. We can construct the loop as such :

def foo() deltaDayInYear = 15 hour = 15 minutes = 00 max_elev= 100.m latitude = 47.0 # Ranging through the entire year, every two weeks, at 15:00 (1 .. 355).step(deltaDayInYear).each { |dayInYear| solarDate = SolarDate.create(dayInYear) month, day = [solarDate.month, solarDate.day ] SolarEnvelope.new("footprint", "buildings", max_elev, month, day, hour, minutes, latitude).run } end

To visualize the results, we may want to save them into separate layers.

def foo("footprint", "buildings", max_elev, month, day, hours, minutes, latitude) rootdir='~/rootFolder' outputdir='~/outFolder' Sketchup.open_file("#{rootdir}/model.skp") layername = sprintf("SolarEnvelope_%02d_%02d_%02d_%02d", month, day, hours, minutes) SolarEnvelope.new("footprint", "buildings", max_elev, month, day, hours, minutes, latitude).run Sketchup.active_model.save("#{outputdir}/#{layername}.skp") Sketchup.active_model.close(true) end deltaDayInYear = 15 hours = 16 minutes = 00 max_elev= 100.m latitude = 47.0 # Ranging through the entire year, every two weeks, at 16:00 (1 .. 355).step(deltaDayInYear).each{ |dayInYear| solarDate = SolarDate.create(dayInYear) months, day = [solarDate.month, solarDate.day ] foo("footprint", "buildings", max_elev, month, day, hours, minutes, latitude) }

Similarly, one can create a loop to visualize the results of a single day, in increments of 10 minutes :

#setting location site = SunLocation.new(latitude) # setting day : Winter Solstice solarDate = SolarDate.create(355) month, day = [solarDate.month, solarDate.day] # iterating over entire day sunrise = site.getSunRiseTime(solarDate) sunset = site.getSunSetTime(solarDate) ((sunrise.hours+1)..(sunset.hours)).step(deltaHours).each{ |hours| # Runnning for every 10 minutes deltaMin=10 (0..59).step(deltaMin).each{ |minutes| SolarEnvelope.new("footprint", "buildings", max_elev, month, day, hours, minutes, latitude).run

OpenEdition vous propose de citer ce billet de la manière suivante :
khartwell (15 juin 2017). Making Solar Envelopes. Métrologie des ambiances urbaines. Consulté le 9 octobre 2024 à l’adresse https://doi.org/10.58079/rar7


Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.