Volume des ombres solaires (3D Analyst)

Synthèse

Crée des volumes fermés qui modélisent les ombres projetées par chaque entité en fonction de la lumière du soleil à une date et une heure donnée.

Utilisation

  • Toutes les entités en entrée doivent correspondre aux mêmes paramètres régionaux, car les calculs de la position relative du soleil sont basés sur la position de la première entité de la première classe d’entités.

  • Pour modéliser les ombres au lever et au coucher du soleil, il suffit de renseigner une date dans les paramètres Date et heure de début et Date et heure de fin respectivement. Les volumes d’ombres ne seront pas générés si le soleil n’est pas visible à la date et à l’heure spécifiée ou si la position relative du soleil est à un angle vertical de 90° par rapport aux entités en entrée.

  • Les ombres sont modélisées en tant que multipatchs fermés créés par l’extrusion des entités en entrée dans la direction de la lumière du soleil. Les rayons du soleil sont considérés comme étant parallèles et se déplacent dans la direction calculée pour la position relative du soleil. Chaque volume d’ombre commence et se termine selon un plan vertical qui est perpendiculaire à la projection horizontale des rayons du soleil.

  • Les champs suivants sont attribués aux entités de volume d’ombre :

    • SOURCE : nom de la classe d’entités projetant le volume d’ombre.
    • SOURCE_ID : identifiant unique de l’entité projetant le volume d’ombre.
    • DATE_TIME : paramètres régionaux de date et heure utilisés pour calculer la position du soleil.
    • AZIMUTH : angle en degrés entre le nord géographique et la projection perpendiculaire de la position relative du soleil jusqu’à l’horizon de la Terre. Les valeurs sont comprises entre 0 et 360.
    • VERT_ANGLE : angle en degrés entre l’horizon de la Terre et la position relative du soleil où l’horizon définit 0 degré et 90 degrés la position directement au-dessus.
    Remarque :

    Généralement, chaque volume d’ombre semble adhérer ou être projeté très près de l’entité d’origine correspondante Si une ombre ne peut pas être générée de cette manière, elle sera créée à partir de la limite de l’étendue externe de l’entité. Lorsqu’au moins une ombre est créée ainsi, un champ nommé HUGS_FEATR est inclus pour indiquer quelles ombres adhèrent à leurs entités correspondantes.

Paramètres

ÉtiquetteExplicationType de données
Entités en entrée

Les entités multipatch qui seront utilisées pour modéliser les ombres.

Feature Layer
Date et heure de début

La date et heure du calcul de la trajectoire de la lumière du soleil pour la modélisation des ombres.

Date
Classe d’entités en sortie

La classe d’entités multipatch stockant les volumes d’ombre obtenus.

Feature Class
Ajusté à l’heure d’été
(Facultatif)

Spécifie si la valeur horaire est ajustée à l’heure d’été (DST).

  • Non coché – L’heure d’été n’est pas observée. Il s’agit de l’option par défaut.
  • Coché - L’heure d’été est observée.
Boolean
Fuseau horaire
(Facultatif)

Fuseau horaire dans lequel se situe l’entrée participante. Par défaut, le fuseau horaire du système d’exploitation est utilisé.

String
Date et heure de fin
(Facultatif)

La date et l’heure de fin pour le calcul de la position du soleil. Lorsque seule une date est renseignée, l’heure finale est présumée être le coucher de soleil.

Date
Intervale d’itération
(Facultatif)

Valeur utilisée pour définir l’itération de l’heure à partir de la date de départ.

Double
Unité d’itération
(Facultatif)

L’unité qui définit la valeur d’itération appliquée au paramètre Date et heure de départ.

  • JoursLa valeur d’itération représentera les jours. Il s’agit de l’option par défaut.
  • HeuresLa valeur d’itération représentera une ou plusieurs heures.
  • MinutesLa valeur d’itération représentera une ou plusieurs minutes.
String

arcpy.ddd.SunShadowVolume(in_features, start_date_and_time, out_feature_class, {adjusted_for_dst}, {time_zone}, {end_date_and_time}, {iteration_interval}, {iteration_unit})
NomExplicationType de données
in_features
[in_features,...]

Les entités multipatch qui seront utilisées pour modéliser les ombres.

Feature Layer
start_date_and_time

La date et heure du calcul de la trajectoire de la lumière du soleil pour la modélisation des ombres.

Date
out_feature_class

La classe d’entités multipatch stockant les volumes d’ombre obtenus.

Feature Class
adjusted_for_dst
(Facultatif)

Spécifie si la valeur horaire est ajustée à l’heure d’été (DST).

  • ADJUSTED_FOR_DSTHeure d’été observée.
  • NOT_ADJUSTED_FOR_DSTHeure d’été non observée. Il s’agit de l’option par défaut.
Boolean
time_zone
(Facultatif)

Fuseau horaire dans lequel se situe l’entrée participante. Par défaut, le fuseau horaire du système d’exploitation est utilisé.

String
end_date_and_time
(Facultatif)

La date et l’heure de fin pour le calcul de la position du soleil. Lorsque seule une date est renseignée, l’heure finale est présumée être le coucher de soleil.

Date
iteration_interval
(Facultatif)

Valeur utilisée pour définir l’itération de l’heure à partir de la date de départ.

Double
iteration_unit
(Facultatif)

L’unité qui définit la valeur d’itération appliquée au paramètre Date et heure de départ.

  • DAYSLa valeur d’itération représentera les jours. Il s’agit de l’option par défaut.
  • HOURSLa valeur d’itération représentera une ou plusieurs heures.
  • MINUTESLa valeur d’itération représentera une ou plusieurs minutes.
String

Exemple de code

Exemple 1 d’utilisation de l’outil SunShadowVolume (fenêtre Python)

L'exemple suivant illustre l'utilisation de cet outil dans la fenêtre Python.

arcpy.env.workspace = 'C:/data'
arcpy.ddd.SunShadowVolume('sample.fgdb/buildings', 
                         start_date_and_time='12/25/2011 10:00 AM', 
                         out_feature_class='shadows_dec25.shp', 
                         adjusted_for_dst='ADJUSTED_FOR_DST', 
                         time_zone='Eastern_Standard_Time',
                         end_date_and_time='12/25/2011 3:00 PM', 
                         iteration_interval='HOURS', iteration_unit=1)
Exemple 2 d’utilisation de l’outil SunShadowVolume (script autonome)

L'exemple suivant illustre l'utilisation de cet outil dans un script Python autonome.

'''*********************************************************************
Name: Model Shadows For GeoVRML Models
Description: Creates a model of the shadows cast by GeoVRML models
             imported to a multipatch feature class for a range of dates
             and times. A range of times from the start time and end
             time can also be specified by setting the EnforceTimes
             Boolean to True. This sample is designed to be used in a
             script tool.
*********************************************************************'''
# Import system modules
import arcpy
from datetime import datetime, time, timedelta

#*************************  Script Variables  **************************
inFiles = arcpy.GetParameterAsText(0) # list of input features
spatialRef = arcpy.GetParameterAsText(1) # list of GeoVRML files
outFC = arcpy.GetParameterAsText(2) # multipatch from 3D files
inTimeZone = arcpy.GetParameterAsText(3) # time zone
startDate = arcpy.GetParameter(4) # starting date as datetime
endDate = arcpy.GetParameter(5) # ending date as datetime
dayInterval = arcpy.GetParameter(6) # day interval as long (0-365)
minInterval = arcpy.GetParameter(7) # minute interval as long (0-60)
enforceTime = arcpy.GetParameter(8) # minute interval as Boolean
outShadows = arcpy.GetParameterAsText(9) # output shadow models
outIntersection = arcpy.GetParameterAsText(10) # shadow & bldg intersection

# Function to find all possible date/time intervals for shadow modelling
def time_list():
    dt_result = [startDate]
    if dayInterval:
        if endDate: #Defines behavior when end date is supplied
            while startDate < endDate:
                startDate += timedelta(days=dayInterval)
                dt_result.append(startDate)
            dt_result.append(endDate)
        else: # Behavior when end date is not given
            daymonthyear = datetime.date(startDate)
            while startDate <= datetime(daymonthyear.year, 12, 31, 23, 59):
                startDate += timedelta(days=dayInterval)
                dt_result.append(startDate)
    return dt_result


importFC = arcpy.CreateUniqueName('geovrml_import', 'in_memory')

# Import GeoVRML files to in-memory feature
arcpy.ddd.Import3DFiles(inFiles, importFC, 'ONE_FILE_ONE_FEATURE',
                        spatialRef, 'Z_IS_UP', 'wrl')

# Ensure that building models are closed
arcpy.ddd.EncloseMultiPatch(importFC, outFC, 0.05)

# Discard in-memory feature
arcpy.management.Delete(importFC)
dt_result = time_list()
for dt in dt_result:
    if dt == dt_result[0]:
        shadows = outShadows
    else:
        shadows = arcpy.CreateUniqueName('shadow', 'in_memory')
    arcpy.ddd.SunShadowVolume(outFC, dt, shadows, 'ADJUST_FOR_DST',
                              inTimeZone, '', minInterval, 'MINUTES')
    if dt is not dt_result[0]:
        arcpy.management.Append(shadows, outShadows)
        arcpy.management.Delete(shadows)
arcpy.ddd.Intersect3D(outFC, outIntersection, outShadows, 'SOLID')

Informations de licence

  • Basic: Nécessite 3D Analyst
  • Standard: Nécessite 3D Analyst
  • Advanced: Nécessite 3D Analyst

Rubriques connexes