Résumé
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
Les entités surfaciques et linéaires peuvent également être utilisées en entrée si elles représentent des couches 3D extrudées. Vous pouvez appliquer des propriétés d'extrusion à une couche d'entités dans ArcScene ou ArcGlobe, car elles transforment l'entité en un multipatch.
Pour en savoir plus sur l'utilisation de l'extrusion en tant que symbologie 3D
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.
Vous pouvez modéliser les ombres des conditions du lever du soleil et du coucher du soleil en ne spécifiant qu'une date dans les paramètres Date et heure de début et Date et heure de fin, respectivement. Les volumes d'ombre ne sont pas générés si le soleil n'est pas visible à la date et à l'heure indiquées ou si la position relative du soleil est à un angle vertical de 90 degrés 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 en direction de la lumière du soleil. Les rayons du soleil sont considérés comme étant parallèles et ils 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 redéfinissant le volume d'ombre.
- SOURCE_ID : ID unique de l'entité redéfinissant le volume d'ombre.
- DATE_TIME : date et heure locales permettant de calculer la position du soleil.
- AZIMUTH : angle en degrés entre le nord vrai 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 se trouvent directement au-dessus.
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ètre | Explication | Type 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).
| 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.
| 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
Informations de licence
- ArcGIS Desktop Basic: Requiert 3D Analyst
- ArcGIS Desktop Standard: Requiert 3D Analyst
- ArcGIS Desktop Advanced: Requiert 3D Analyst