Краткая информация
Объект LayerTime обеспечивает информацию о том, как сохраняется и настраивается время в слоях или таблицах с поддержкой времени.
Обсуждение
Поля, содержащие значения времени, такие как время начала и время окончания, интервал временного шага и т. д., могут использоваться не только для получения сведений о свойствах времени в слоях или таблицах с поддержкой времени, но также и для выполнения дальнейших задач управления данными и анализа. Вы также можете использовать информацию о времени, чтобы следить за тем, чтобы время, указанное для выбора пространственных объектов или строк в таблице, находилось внутри диапазона времени начала и времени окончания.
Метод enableTime на классах Layer или Table позволяет включить на том объекте время, если у него есть информация о времени. Вы должны проверить, возвращает ли свойство isTimeEnabled значение True, прежде чем пытаться получить доступ к свойствам LayerTime.
Свойства
Свойство | Описание | Тип данных |
daylightSavings (чтение и запись) | Указывает, были ли собраны значения времени в поле времени слоя или таблицы с поддержкой времени во время перехода на летнее время во входном часовом поясе. | Boolean |
endTime (чтение и запись) | Дата и время окончания для слоя или таблицы с поддержкой времени. | DateTime |
endTimeField (чтение и запись) | Имя поля, содержащего значения времени окончания. Не все слои или таблицы используют поле времени окончания. Если у каждого объекта или строки есть отдельное поле времени, то будет использоваться только startTimeField, а endTimeField будет None. Если у каждого объекта или в каждой строке есть поле времени начала и окончания, то использоваться будут и startTimeField, и endTimeField. | String |
startTime (чтение и запись) | Дата и время начала для слоя или таблицы с поддержкой времени. | DateTime |
startTimeField (чтение и запись) | Имя поля, содержащего значения времени начала. Если у каждого объекта или строки есть отдельное поле времени, то будет использоваться только startTimeField, а endTimeField будет None. Если у каждого объекта или в каждой строке есть поле времени начала и окончания, то использоваться будут и startTimeField, и endTimeField. | String |
timeDimension (чтение и запись) | Имя измерения, содержащего значения времени при использовании данных netCDF. | 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.conversion.FeatureClassToFeatureClass(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"))