Sonnenschattenvolumen (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

  • 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 mindestens 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

SunShadowVolume(in_features, start_date_and_time, out_feature_class, {adjusted_for_dst}, {time_zone}, {end_date_and_time}, {iteration_interval}, {iteration_unit})
ParameterErklärungDatentyp
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.

  • ADJUSTED_FOR_DSTSommerzeit wird berücksichtigt.
  • NOT_ADJUSTED_FOR_DSTSommerzeit wird nicht berücksichtigt. Dies ist die Standardeinstellung.
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.

  • DAYSDer Iterationswert repräsentiert Tage. Dies ist die Standardeinstellung.
  • HOURSDer Iterationswert repräsentiert eine oder mehrere Stunden.
  • MINUTESDer Iterationswert repräsentiert eine oder mehrere Minuten.
String

Codebeispiel

SunShadowVolume – Beispiel 1 (Python-Fenster)

Anhand des folgenden Beispiels wird die Verwendung dieses Werkzeugs im Python-Fenster veranschaulicht.

arcpy.env.workspace = 'C:/data'
arcpy.SunShadowVolume_3d('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)
SunShadowVolume – Beispiel 2 (eigenständiges Skript)

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


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')

Lizenzinformationen

  • Basic: Erfordert 3D Analyst
  • Standard: Erfordert 3D Analyst
  • Advanced: Erfordert 3D Analyst

Verwandte Themen