Объемный теневой объект (3D Analyst)

Сводка

Создает замкнутые объемы, которые моделируют затенение по каждому объекту, используя положение солнца в заданную дату и время.

Использование

  • Все входные объекты должны располагаться в одном местоположении, поскольку соответствующие расчеты положения солнца основываются на положении первого объекта в первом классе объектов.

  • Тени, моделирующие состояние при восходе и заходе солнца можно создать, указав только дату в параметрах Дата и время начала и Дата и время окончания, соответственно. Теневые объемы не будут созданы, если в заданную дату и время солнца не видно, или если оно расположено под вертикальным углом 90 градусов к входным объектам.

  • Тени моделируются как замкнутые объекты-мультипатчи, путем вытягивания входных объектов в направлении солнечного света. Солнечные лучи считаются параллельными и движущимися в направлении, вычисленном для относительного положения солнца. Каждый теневой объем начинается и заканчивается на вертикальной плоскости, перпендикулярной горизонтальной проекции солнечных лучей.

  • Следующие поля будут добавлены в таблицу атрибутов объемных теневых объектов:

    • SOURCE – имя класса объектов, для которых рассчитывается объем тени.
    • SOURCE_ID – уникальный ID объекта, для которого рассчитывается объем тени.
    • DATE_TIME – местные дата и время, использующиеся для расчета положения солнца.
    • AZIMUTH – угол в градусах между истинным севером и перпендикулярной проекцией относительного положения солнца к земному горизонту. Значения находятся в диапазоне от 0 до 360.
    • VERT_ANGLE – угол в градусах между земным горизонтом и относительным положением солнца, где горизонт определяется как 0 градусов, а 90 градусов – это положение непосредственно над ним.
    Примечание:

    Обычно каждый теневой объем выглядит так, что тень огибает исходный объект. Если тень нельзя создать таким способом, она будет создана, начиная от границы внешнего экстента объекта. Если хотя бы одна тень создается таким способом, добавляется поле HUGS_FEATR, в котором обозначаются тени, созданные вплотную к своим объектам.

Синтаксис

arcpy.3d.SunShadowVolume(in_features, start_date_and_time, out_feature_class, {adjusted_for_dst}, {time_zone}, {end_date_and_time}, {iteration_interval}, {iteration_unit})
ParameterОбъяснениеТип данных
in_features
[in_features,...]

Объекты-мультипатчи, которые будут использоваться для моделирования теней. Также можно использовать полигональные и линейные объекты, если они добавляются как вытянутый слой 3D.

Feature Layer
start_date_and_time

Дата и время, по которым будет вычисляться траектория солнечного света для моделирования теней.

Date
out_feature_class

Класс пространственных объектов-мультипатчей, который будет хранить полученные объемы теней.

Feature Class
adjusted_for_dst
(Дополнительный)

Указывает, устанавливается ли значение времени в формате "летнего времени" (DST).

  • ADJUSTED_FOR_DSTЛетнее время соблюдается.
  • NOT_ADJUSTED_FOR_DSTЛетнее время не соблюдается. Это значение используется по умолчанию.
Boolean
time_zone
(Дополнительный)

Часовой пояс, в котором размещен задействованный входной объект. Значением по умолчанию является часовой пояс, на который настроена операционная система.

String
end_date_and_time
(Дополнительный)

Конечные дата и время для расчета положения солнца. Если предоставлена только дата, в качестве конечного времени будет взят заход.

Date
iteration_interval
(Дополнительный)

Значение, используемое для определения итерации времени с даты начала.

Double
iteration_unit
(Дополнительный)

Единицы, определяющие значение итерации, применяемое к Дате и времени начала.

  • DAYSЗначение итерации будет представлять дни. Это значение используется по умолчанию.
  • HOURSЗначение итерации будет представлять один или несколько часов.
  • MINUTESЗначение итерации равно одной или нескольким минутам.
String

Пример кода

SunShadowVolume пример 1 (окно Python)

В следующем примере показано использование этого инструмента в окне Python.

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, пример 2 (автономный скрипт)

В следующем примере показано использование этого инструмента в автономном скрипте Python.

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

Информация о лицензиях

  • Basic: Требуется 3D Analyst
  • Standard: Требуется 3D Analyst
  • Advanced: Требуется 3D Analyst

Связанные разделы