Краткая информация
Объект LayerTime предоставляет информацию о том, как время хранится и настраивается в слоях с включенным временем.
Обсуждение
Информацию о времени, такую как поля, содержащие значения времени, связанные с объектами, время начала и окончания данных, интервал временного шага и т. д., можно использовать не только для получения знаний о свойствах времени для слоя с поддержкой времени, но также для выполнения дальнейших задач управления данными и анализа с течением времени. Пример 1 ниже показывает, как вы можете получить временной экстент вашего слоя с включенным временем, используя startTime и endTime. Пример 2 ниже показывает, как вы можете выбрать объекты на основе запроса времени, а затем сохранить эти объекты в отдельный класс объектов. Вы также можете использовать информацию о времени, чтобы гарантировать, что время, указанное для выбора объектов, находится в пределах времени начала и окончания для слоя.
Метод enableTime класса Layer позволяет включить время на слое, содержащем информацию о времени, и, следовательно, делает возможным доступ к свойствам LayerTime. Второй пример ниже демонстрирует enableTime.
Подсказка:
Вы можете использовать класс MapTime для доступа к настройкам времени карты, если MapFrame в Компоновке содержит слои с включенным временем.
Свойства
Свойство | Описание | Тип данных |
daylightSavings (чтение и запись) | Указывает, были ли собраны значения времени в поле времени слоя с включенным временем при соблюдении правил перехода на летнее время во входном часовом поясе. | Boolean |
endTime (чтение и запись) | Дата и время окончания для слоя с включенным временем. | DateTime |
endTimeField (чтение и запись) | Имя поля, содержащего значения времени окончания. Не все слои используют поле времени окончания. Если у каждого объекта есть одно поле времени, только startTimeField будет использоваться и endTimeField будет None. Если у каждого объекта есть поле времени начала и окончания, будут использоваться и startTimeField, и endTimeField. | String |
startTime (чтение и запись) | Дата и время начала для слоя с включенным временем. | DateTime |
startTimeField (чтение и запись) | Имя поля, содержащего значения времени начала. Если у каждого объекта есть одно поле времени, только startTimeField будет использоваться, и endTimeField будет None. Если у каждого объекта есть поле времени начала и окончания, будут использоваться и startTimeField, и endTimeField. | String |
timeFormat (чтение и запись) | Формат, в котором значения времени хранились в startTimeField и endTimeField. Формат времени важен при формулировании запроса времени. | String |
timeOffset (чтение и запись) | Смещение времени, применяемое к значениям времени в ваших данных. | Double |
timeOffsetUnits (чтение и запись) | Единица смещения времени, описывающая timeOffset, примененные к значениям времени в ваших данных.
| String |
timeStepInterval (чтение и запись) | Интервал временного шага определяет степень детализации временных данных. Интервал временного шага можно представить как частоту записи значений времени в ваши данные. | Double |
timeStepIntervalUnits (чтение и запись) | Единица интервала временного шага, описывающая timeStepInterval, примененные к значениям времени в ваших данных.
| String |
timeZone (чтение и запись) | Часовой пояс для слоя с включенным временем. Подсказка:Список допустимых строк часового пояса см. в ListTimeZones. | String |
Пример кода
Следующий скрипт проверяет, поддерживают ли слои в файле слоя время и установлены ли свойства времени. Затем он использует информацию о времени (начальное и конечное время) для вычисления временного экстента слоя с поддержкой времени.
import arcpy
lyrFile = arcpy.mp.LayerFile(r'C:\Projects\Time\ShipPositions.lyrx')
for lyr in lyrFile.listLayers():
if lyr.supports('TIME'):
if lyr.isTimeEnabled:
lyrTime = lyr.time
startTime = lyrTime.startTime
endTime = lyrTime.endTime
timeDelta = endTime - startTime
print(f"Layer: {lyr.name}")
print(f" Start Time: {str(startTime.strftime('%m-%d-%Y'))}")
print(f" End Time: {str(endTime.strftime('%m-%d-%Y'))}")
print(f" Time Extent: {str(timeDelta.days)} days")
else:
print("No time properties have been set on the layer")
else:
print("Time is not supported on this layer")
Следующий скрипт создает класс пространственных объектов из входных объектов, действительных в определенное время, при этом гарантируя, что время выбора находится в пределах временного экстента (время начала и время окончания) слоя с включенным временем.
import arcpy, os
# Setup output location and overwrite status
arcpy.env.overwriteOutput = True
path = r"C:\Projects\Time\Ships"
output_GDB = os.path.join(path, "Ships.gdb")
# Get time information from a layer in a layer file
lyrFile = arcpy.mp.LayerFile(os.path.join(path, "ShipPositions.lyrx"))
lyr = lyrFile.listLayers()[0]
lyrTime = lyr.time
# Set the time for which you want to select features in the time-enabled layer
fromTimeSelection = datetime.datetime(1776, 1, 1)
toTimeSelection = datetime.datetime(1777, 1, 1)
# Get the start and end time of the time enabled layer and its time field
startTime = lyrTime.startTime
endTime = lyrTime.endTime
timeField = lyrTime.startTimeField
# Check to see if the time for which you want to select features lies within the start and end time of the time enabled layer
if (fromTimeSelection < startTime or toTimeSelection > endTime):
print("The time specified for selecting features is not within the time extent of the layer")
else:
# Formulate the time query
timeQuery = f"{timeField} >= timestamp '{fromTimeSelection}' And \
{timeField} < timestamp '{toTimeSelection}'"
# Process: Feature Class to Feature Class
arcpy.FeatureClassToFeatureClass_conversion(lyr, output_GDB, "Ships_1776", timeQuery, "", "")
# Add the new layer to a map and enable time
p = arcpy.mp.ArcGISProject(os.path.join(path, "ships.aprx"))
lyt = p.listLayouts('Ships')[0]
mf = lyt.listElements('MAPFRAME_ELEMENT', 'NoTimeMF')[0]
m = mf.map
m.addDataFromPath(os.path.join(output_GDB, "Ships_1776"))
l = m.listLayers("Ships_1776")[0]
l.enableTime()
mt = mf.time
mt.isTimeEnabled = True
# Save a copy of the project
p.saveACopy(os.path.join(path, "ships2.aprx"))