LayerTime

Краткая информация

Объект 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, примененные к значениям времени в ваших данных.

  • MILLISECONDS
  • SECONDS
  • MINUTES
  • HOURS
  • DAYS
  • WEEKS
  • MONTHS
  • YEARS
  • DECADES
  • CENTURIES
String
timeStepInterval
(чтение и запись)

Интервал временного шага определяет степень детализации временных данных. Интервал временного шага можно представить как частоту записи значений времени в ваши данные.

Double
timeStepIntervalUnits
(чтение и запись)

Единица интервала временного шага, описывающая timeStepInterval, примененные к значениям времени в ваших данных.

  • MILLISECONDS
  • SECONDS
  • MINUTES
  • HOURS
  • DAYS
  • WEEKS
  • MONTHS
  • YEARS
  • DECADES
  • CENTURIES
String
timeZone
(чтение и запись)

Часовой пояс для слоя с включенным временем.

Подсказка:

Список допустимых строк часового пояса см. в ListTimeZones.

String

Пример кода

LayerTime пример 1

Следующий скрипт проверяет, поддерживают ли слои в файле слоя время и установлены ли свойства времени. Затем он использует информацию о времени (начальное и конечное время) для вычисления временного экстента слоя с поддержкой времени.

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")
LayerTime пример 2

Следующий скрипт создает класс пространственных объектов из входных объектов, действительных в определенное время, при этом гарантируя, что время выбора находится в пределах временного экстента (время начала и время окончания) слоя с включенным временем.

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