Сводка
Создает замкнутые объемы, которые моделируют затенение по каждому объекту, используя положение солнца в заданную дату и время.
Использование
Все входные объекты должны располагаться в одном местоположении, поскольку соответствующие расчеты положения солнца основываются на положении первого объекта в первом классе объектов.
Тени, моделирующие состояние при восходе и заходе солнца можно создать, указав только дату в параметрах Дата и время начала и Дата и время окончания, соответственно. Теневые объемы не будут созданы, если в заданную дату и время солнца не видно, или если оно расположено под вертикальным углом 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).
| Boolean |
time_zone (Дополнительный) | Часовой пояс, в котором размещен задействованный входной объект. Значением по умолчанию является часовой пояс, на который настроена операционная система. | String |
end_date_and_time (Дополнительный) | Конечные дата и время для расчета положения солнца. Если предоставлена только дата, в качестве конечного времени будет взят заход. | Date |
iteration_interval (Дополнительный) | Значение, используемое для определения итерации времени с даты начала. | Double |
iteration_unit (Дополнительный) | Единицы, определяющие значение итерации, применяемое к Дате и времени начала.
| String |
Пример кода
В следующем примере показано использование этого инструмента в окне 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)
В следующем примере показано использование этого инструмента в автономном скрипте 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')
Environments
Информация о лицензиях
- Basic: Требуется 3D Analyst
- Standard: Требуется 3D Analyst
- Advanced: Требуется 3D Analyst