Volume d’ombre du soleil (3D Analyst)

Récapitulatif

Crée des volumes fermés qui modélisent des ombres redéfinies par chaque entité à l'aide de la lumière du soleil, à une date et une heure données.

Utilisation

Syntaxe

SunShadowVolume_3d (in_features, start_date_and_time, out_feature_class, {adjusted_for_dst}, {time_zone}, {end_date_and_time}, {iteration_interval}, {iteration_unit})
ParamètreExplicationType de données
in_features
[in_features,...]

Entités multipatch utilisées pour modéliser les ombres. Les entités surfaciques et linéaires peuvent également être utilisées si elles sont ajoutées en tant que couche 3D extrudée.

Feature Layer
start_date_and_time

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

Date
out_feature_class

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 pour l'heure d'été (DST).

  • ADJUSTED_FOR_DSTL'heure d'été est observée.
  • NOT_ADJUSTED_FOR_DSTL'heure d'été n'est pas observée. Il s'agit de l'option par défaut.
Boolean
time_zone
(Facultatif)

Fuseau horaire de l'entrée participante. Le paramètre par défaut est le fuseau horaire sur lequel le système d'exploitation est défini.

String
end_date_and_time
(Facultatif)

Date et heure finales permettant de calculer la position du soleil. Si seule une date est indiquée, on suppose que l'heure finale est le coucher du 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)

Unité qui définit la valeur d'itération appliquée au paramètre Date et heure de début.

  • DAYSValeur d'itération qui représente les jours. Il s'agit de l'option par défaut.
  • HOURSValeur d'itération qui représente une ou plusieurs heures.
  • MINUTESValeur d'itération qui représente 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 :

import arcpy
from arcpy import env

arcpy.CheckOutExtension('3D')
env.workspace = 'C:/data'
arcpy.SunShadowVolume_3d(['sample.fgdb/buildings_1', 'buildings_2.shp'], 
                         '12/25/2011 10:00 AM', 'shadows_dec25.shp', 
                         'ADJUSTED_FOR_DST', 'Eastern_Standard_Time', 
                         '12/25/2011 3:00 PM', 'HOURS', 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

try:
    arcpy.CheckOutExtension('3D')
    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')
    arcpy.CheckInExtension('3D')
except arcpy.ExecuteError:
    print arcpy.GetMessages()
except:
    # Get the traceback object
    tb = sys.exc_info()[2]
    tbinfo = traceback.format_tb(tb)[0]
    # Concatenate error information into message string
    pymsg = "PYTHON ERRORS:\nTraceback info:\n{0}\nError Info:\n{1}"\
          .format(tbinfo, str(sys.exc_info()[1]))
    msgs = "ArcPy ERRORS:\n {0}\n".format(arcpy.GetMessages(2))
    # Return python error messages for script tool or Python Window
    arcpy.AddError(pymsg)
    arcpy.AddError(msgs)

Environnements

Thèmes connexes

9/12/2013