Sonnenschattenvolumen (ArcGIS 3D Analyst)
Zusammenfassung
Erstellt geschlossene Volumen, die Schatten modellieren, die bei Sonnenlicht an einem gegebenen Datum und zu einer gegebenen Uhrzeit von den Features geworfen werden.
Verwendung
Polygon- und Linien-Features können als Eingabe verwendet werden, wenn sie extrudierte 3D-Layer darstellen. Extrusionseigenschaften können auf einen Feature-Layer in ArcScene oder ArcGlobe angewendet werden und bewirken die Transformation des Features in ein Multipatch.
Weitere Informationen zum Verwenden der Extrusion als 3D-Symbologie
Alle Eingabe-Features sollten sich im gleichen Gebietsschema befinden, da relative Sonnenpositionsberechnungen auf der Position des ersten Features in der ersten Feature-Class basieren.
Schatten, die Sonnenaufgangs- und Sonnenuntergangsbedingungen modellieren, können erstellt werden, indem nur ein Datum in den Parametern Startdatum und -uhrzeit bzw. Enddatum und -zeit angegeben wird. Schattenvolumen werden nicht erstellt, wenn die Sonne für ein bestimmtes Datum und eine Uhrzeit nicht sichtbar ist oder wenn sich die relative Position der Sonne im vertikalen Winkel von 90 Grad zu den Eingabe-Features befindet.
Schatten werden als geschlossene Multipatches erstellt, indem die Eingabe-Features in Richtung Sonnenlicht extrudiert werden. Es wird davon ausgegangen, dass die Lichtstrahlen parallel sind und in die für die relative Position der Sonne berechnete Richtung fallen. Jedes Schattenvolumen beginnt und endet an einer vertikalen Ebene, die rechtwinklig zur horizontalen Projektion der Sonnenstrahlen ist.
Die folgenden Felder werden den Schattenvolumen-Features hinzugefügt.
- SOURCE – Name der Feature-Class, durch die das Schattenvolumen geworfen wird.
- SOURCE_ID – Eindeutige ID des Features, durch das das Schattenvolumen geworfen wird.
- SOURCE_ID – Zur Berechnung der Sonnenposition verwendete lokale Datums- und Uhrzeitangabe.
- SOURCE_ID – Winkel in Grad zwischen geographisch Nord und der rechtwinkligen Projektion der relativen Sonnenposition auf den Horizont der Erde. Die Werte liegen zwischen 0 und 360.
- SOURCE_ID – Winkel in Grad zwischen dem Horizont der Erde und der relativen Sonnenposition, wobei der Horizont 0 Grad festlegt und 90 Grad direkt darüber ist.
Hinweis:In der Regel wird jedes Schattenvolumen so erstellt, dass es sein Ursprungs-Feature zu umgeben oder eng daran anzugrenzen scheint. Wenn ein Schatten nicht auf diese Weise erstellt werden konnte, wird er über die Grenze der äußeren Ausdehnung des Features erstellt. Wenn zumindest ein Schatten auf diese Weise erstellt wird, wird ein Feld mit dem Namen HUGS_FEATR einbezogen, um anzugeben, welcher Schatten die entsprechenden Features umfasst.
Syntax
Parameter | Erläuterung | Datentyp |
in_features [in_features,...] |
Die Multipatch-Features, die zur Modellierung der Schatten verwendet werden. Auch Polygon- und Linien-Features können verwendet werden, wenn sie als extrudierte 3D-Layer hinzugefügt werden. | Feature Layer |
start_date_and_time |
Das Datum und die Uhrzeit, für die das Fallen des Sonnenlichtes zur Schattenmodellierung berechnet wird. | Date |
out_feature_class |
Die Multipatch-Feature-Class, in der die resultierenden Schattenvolumen gespeichert werden. | Feature Class |
adjusted_for_dst (optional) |
Gibt an, ob der Zeitwert automatisch für Sommerzeit angepasst wird.
| Boolean |
time_zone (optional) |
Die Zeitzone, in der sich die betreffende Eingabe befindet. Die Standardeinstellung ist die Zeitzone, auf die das Betriebssystem eingestellt ist. | String |
end_date_and_time (optional) |
Die zur Berechnung der Sonnenposition verwendete endgültige Datums- und Uhrzeitangabe. Wird nur ein Datum angegeben, wird Sonnenuntergang als endgültige Zeit angenommen. | Date |
iteration_interval (optional) |
Der Wert, der zur Definition der Iterationszeit ab dem Startdatum verwendet wird. | Double |
iteration_unit (optional) |
Die Einheit, die den Iterationswert definiert, der auf Startdatum und -uhrzeit angewendet wird.
| String |
Codebeispiel
Anhand des folgenden Beispiels wird die Verwendung dieses Werkzeugs im Python-Fenster veranschaulicht:
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)
Im folgenden Beispiel wird die Verwendung dieses Werkzeugs in einem eigenständigen Python-Skript veranschaulicht:
'''*********************************************************************
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)