DataFrameTime (arcpy.mapping)
Краткая информация
Объект DataFrameTime предоставляет доступ к операциям управления временем для слоев с поддержкой времени во фрейме данных.
Обсуждение
Объект DataFrameTime предоставляет функции для двух базовых сценариев:
- Первый сценарий предназначен для документов карты, которые уже были опубликованы со слоями с поддержкой времени и для которых настройки были заданы в диалоговом окне Опции бегунка времени (Time Slider Options) и сохранены в документе карты. В этом сценарии существующие свойства можно использовать для автоматизации вывода данных. Примеры 1 и 2 ниже демонстрируют данный сценарий.
- Второй сценарий касается документов карты без слоев с поддержкой времени, но в которые такие слои добавляются с помощью скрипта, поэтому необходимо задать опции бегунка времени для автоматизации вывода данных. В примере 3 ниже представлен данный сценарий.
timeStepInterval использует класс EsriTimeDelta. Класс EsriTimeDelta является альтернативой для базового класса Python datetime.timedelta и использует для интервалов внутренние единицы измерения времени Esri (месяцы, недели и т. д.), которые не может обрабатывать базовый объект timedelta. timeStepInterval можно использовать для циклического прохода по значениям даты и времени. Если вы хотите использовать другой интервал в цикле, создайте новый объект Python timedelta или объект EsriTimeDelta (см. пример 3 ниже). Помните, что если изменить и сохранить timeWindowUnits, это повлияет на объект timeStepInterval.
В версиях до 10.1 свойство timeStepInterval класса DataFrameTime возвращало объект Python datetime.timedelta.
Для внедрения метки времени в изображение при экспорте фрейма данных используйте time text.
Доступно множество статей справки, касающихся времени в ArcGIS. Вот некоторые из них, которые наиболее тесно связаны с методами и свойствами объекта DataFrameTime:
Свойства
Свойство | Объяснение | Тип данных |
currentTime (чтение и запись) |
Текущая дата и время для фрейма данных со слоями с поддержкой времени. Такое же свойство можно найти в диалоговом окне Опции бегунка времени (Time Slider Options) в ArcMap. | DateTime |
endTime (чтение и запись) |
Конечная дата и время для фрейма данных со слоями с поддержкой времени. Такое же свойство можно найти в диалоговом окне Опции бегунка времени (Time Slider Options) в ArcMap. | DateTime |
startTime (чтение и запись) |
Начальная дата и время для фрейма данных со слоями с поддержкой времени. Такое же свойство можно найти в диалоговом окне Опции бегунка времени (Time Slider Options) в ArcMap. | DateTime |
timeStepInterval (только чтение) |
Возвращает временной интервал, установленный в диалоговом окне Опции бегунка времени (Time Slider Options) в ArcMap. Это значение – это объект EsriTimeDelta, который используется для итерации по периоду времени (например, 2 дня, 1 месяц и т. д.). | EsriTimeDelta |
timeWindow (чтение и запись) |
Временное окно, управляющее тем, сколько единиц измерения (например, дней) данных с поддержкой времени отображаются до текущего времени включительно. Например, если для параметра timeWindow задано значение 1, для timeWindowUnits выбраны недели, временным окном будет 2 недели. | Double |
timeWindowUnits (чтение и запись) |
Единицы, используемые со свойствами TimeStepInterval и TimeWindow. Допустимые единицы:
| String |
Обзор метода
Метод | Объяснение |
resetTimeExtent () |
Сбрасывает временной экстент до экстента временного окна всех слоев фрейма данных с поддержкой времени |
Методы
Этот метод выполняет ту же операцию, что и кнопки Мин. время (Min Time) и Макс. время (Max Time) в диалоговом окне Опции бегунка времени (Time Slider Options) в ArcMap.
Пример кода
Следующий скрипт использует настройки времени (начальное время, конечное время и временной интервал), опубликованные в существующем документе карты, для экспорта серии изображений. Каждое выходное изображение получает уникальное имя с использованием обработанной информации о даты из метки времени.
import arcpy
import os
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
df = arcpy.mapping.ListDataFrames(mxd, "Traffic Analysis")[0]
df.time.currentTime = df.time.startTime
while df.time.currentTime <= df.time.endTime:
# An example str(newTime) would be: "2008-12-29 02:19:59"
# The following line splits the string at the space and takes the first
# item in the resulting string.
fileName = str(df.time.currentTime).split(" ")[0] + ".png"
arcpy.mapping.ExportToPNG(mxd, os.path.join(r"C:\Project\Output", fileName), df)
df.time.currentTime = df.time.currentTime + df.time.timeStepInterval
del mxd
Следующий скрипт идентичен примеру 1 выше, но он использует начальное время, конечное время и временной интервал, которые отличаются от существующих настроек, опубликованных во фрейме данных с поддержкой времени в документе карты. Модуль datetime Python используется для создания времени и разницы времени. Кроме того, класс EsriTimeDelta также можно использовать для создания разницы времени.
import arcpy
import datetime
import os
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
df = arcpy.mapping.ListDataFrames(mxd, "Traffic Analysis")[0]
df.time.currentTime = datetime.datetime(2008, 10, 1)
endTime = datetime.datetime(2008, 10, 31)
interval = datetime.timedelta(days=7)
while df.time.currentTime <= endTime:
# An example str(newTime) would be: "2008-01-29 02:19:59"
# The following line splits the string at the space and takes the first
# item in the resulting string.
fileName = str(df.time.currentTime).split(" ")[0] + ".png"
arcpy.mapping.ExportToPNG(mxd, os.path.join(r"C:\Project\Output", fileName), df)
df.time.currentTime = df.time.currentTime + interval
del mxd
Следующий скрипт представляет сценарий, в котором новый файл с поддержкой времени добавляется в новый фрейм данных, не поддерживающий время. Поэтому свойства бегунка времени не задаются в документе карты. Этот скрипт добавляет слой с поддержкой времени с помощью функции AddLayer и задает нужные настройки времени, как и в скрипте выше. В этом примере временной интервал задается с помощью класса EsriTimeDelta. Кроме того, модуль datetime Python можно использовать для создания разницы времени.
import arcpy
import datetime
import os
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
df = arcpy.mapping.ListDataFrames(mxd, "New Data Frame")[0]
timeLayer = arcpy.mapping.Layer(r"C:\Project\Data\Accidents.lyr")
arcpy.mapping.AddLayer(df, timeLayer, "AUTO_ARRANGE")
df.time.resetTimeExtent()
df.time.timeWindowUnits = "DAYS"
df.time.timeWindow = 7
df.time.currentTime = datetime.datetime(2008, 10, 1)
endTime = datetime.datetime(2008, 10, 31)
interval = arcpy.time.EsriTimeDelta(1, 'weeks')
while df.time.currentTime <= endTime:
# An example str(newTime) would be: "2008-01-29 02:19:59"
# The following line splits the string at the space and takes the first
# item in the resulting string.
fileName = str(df.time.currentTime).split(" ")[0] + ".png"
arcpy.mapping.ExportToPNG(mxd, os.path.join(r"C:\Project\Output", fileName))
df.time.currentTime = df.time.currentTime + interval
del mxd, timeLayer