setTimeInclusion
Краткая информация
Объект MapTime обеспечивает доступ к операциям управления временем, когда слои с включенным временем отображаются в MapFrame в Компоновке.
Обсуждение
Класс MapTime позволяет фильтровать объекты на карте, используя ряд доступных настроек времени, которые соответствуют элементам управления на вкладке Время и Бегунок времени на активированном фрейме карты в компоновке в ArcGIS Pro. Изменение свойств времени карты применяется только к карте, связанной с MapFrame в Компоновке, и в настоящее время не применяется к виду карты.
Свойства currentStartTime и currentEndTime используются для указания временного диапазона. Свойство timeInclusion определяет, включены ли объекты в определенный временной диапазон. Свойство устанавливается с помощью метода setTimeInclusion.
Подсказка:
Свойство currentStartTime не может быть больше свойства currentEndTime. И наоборот, свойство currentEndTime не может быть меньше, чем свойство currentStartTime. Если вы переходите на новый будущий временной диапазон, лучше всего установить currentEndTime перед настройкой currentStartTime.
Метод timeStep может использоваться для расчета новых значений currentStartTime и currentEndTime. Чтобы создать серию временных карт, используйте метод timeStep для перебора значений времени. Пример кода см. в примере 3 ниже.
Время можно включить для вновь добавленных слоев к карте фрейма карты, что позволяет выполнять анализ времени, создавать временные книги карт и т. д. Примеры кода см. в примерах 2 и 3 ниже.
Синтаксис
setTimeInclusion()
Свойства
| Имя | Объяснение | Тип данных |
|---|---|---|
|
currentTimeEnd (Чтение / Запись) |
Текущая дата и время окончания для текущего промежутка времени фрейма карты. |
DateTime |
|
currentTimeSpan (Только для чтения) |
Текущий временной интервал, представляющий разницу между временем начала и окончания временного интервала фрейма карты. |
Double |
|
currentTimeSpanUnits (Только для чтения) |
Строка, представляющая единицы измерения для значения
|
String |
|
currentTimeStart (Чтение / Запись) |
Текущая дата и время начала временного интервала фрейма карты. |
DateTime |
|
isTimeEnabled (Чтение / Запись) |
Булево значение, определяющее, включено ли время для фрейма карты. Свойство |
Boolean |
|
timeInclusion (Только для чтения) |
Строка, которая определяет, включены ли
|
String |
|
timeStepInterval (Только для чтения) |
Указывает время, на которое будут смещены время начала и окончания на каждом временном шаге. |
Double |
|
timeStepIntervalUnits (Только для чтения) |
Единицы измерения, используемые
|
String |
Методы
setTimeInclusion(time_inclusion)
Метод setTimeInclusion контролирует, как currentTimeStart и currentTimeEnd будут включены в текущий временной интервал.
| Имя | Объяснение | Тип данных |
|---|---|---|
|
time_inclusion |
A string that specifies a valid time inclusion value.
|
String |
timeStep(reference_time, interval, interval_units)
Метод timeStep возвращает новое время на основе заданного эталонного времени и временного интервала.
| Имя | Объяснение | Тип данных |
|---|---|---|
|
reference_time |
A Python Подсказка:The |
DateTime |
|
interval |
A double that defines a time interval. Подсказка:Positive or negative intervals can be used. |
Double |
|
interval_units |
A string that specifies a valid interval unit.
|
String |
Возвращаемое значение
| Тип данных | Объяснение |
|---|---|
|
DateTime |
Новое значение |
Пример кода
Следующий скрипт устанавливает время начала и окончания для фрейма карты, а затем выполняет итерацию с интервалом в один месяц в течение года. Каждый месяц экспортируется в файл PDF.
import arcpy
import os
path = r"C:\Projects\Time\Ships"
#Reference a project, layout, and a map frame
p = arcpy.mp.ArcGISProject(os.path.join(path, "ships.aprx"))
lyt = p.listLayouts('ships')[0]
mf = lyt.listElements('MAPFRAME_ELEMENT', 'ShipsWithTimeMF')[0]
if not mf.time is None:
#Get the map frame time, set the initial time window and inclusion settings
t = mf.time
t.currentTimeStart = datetime.datetime(1776, 1, 1, 0, 0)
t.currentTimeEnd = datetime.datetime(1776, 2, 1, 0, 0)
t.setTimeInclusion('INCLUDE_ONLY_START')
for x in range(1,13):
#Export to PDF
outPDF = os.path.join(path, "Output", f"1776-{x}.pdf")
lyt.exportToPDF(outPDF)
#Change the time window to the next 1 month interval
t.currentTimeStart = t.timeStep(t.currentTimeStart, 1, "months")
t.currentTimeEnd = t.timeStep(t.currentTimeEnd, 1, "months")
Следующий скрипт добавляет слой с учетом времени из файла слоя на карту фрейма карты. В этом рабочем процессе фрейм карты не содержит времени. Затем скрипт приближает к экстенту добавленного слоя. Время включается во фрейме карты путем установки isTimeEnabled на True. Наконец, скрипт определяет начальный промежуток времени, задав currentStartTime, currentEndTime и setTimeInclusion.
import arcpy
import os
path = r"C:\Projects\Time\Ships"
#Reference a project, layout, and a map frame
p = arcpy.mp.ArcGISProject(os.path.join(path, "ships.aprx"))
lyt = p.listLayouts('Ships')[0]
mf = lyt.listElements('MAPFRAME_ELEMENT', 'NoTimeMF')[0]
#Reference the map frame's map and add a time enabled layer from a layerfile
m = mf.map
m.addDataFromPath(os.path.join(path, "ShipPositions.lyrx"))
#Zoom to the layer
l = m.listLayers()[0]
mf.camera.setExtent(mf.getLayerExtent(l))
#Enable time on the map and set its time window
mt = mf.time
mt.isTimeEnabled = True
mt.currentTimeEnd = datetime.datetime(1900, 1, 1, 0, 0)
mt.currentTimeStart = datetime.datetime(1800, 1, 1, 0, 0)
mt.setTimeInclusion('INCLUDE_ONLY_START')
#Export the layout
lyt.exportToPDF(os.path.join(path, output, "ShipPositions_1800s.pdf"))
Следующий скрипт добавляет слой с учетом времени из файла слоя на карту фрейма карты. После этого в слое и в карте включается время. Для итерации по ряду временных интервалов используется метод timeStep. Каждый раз интервал экспортируется в файл PDF. Чтобы создать готовый атлас, используется класс PdfDocument, чтобы добавить титульную страницу и конечную страницу во временный атлас.
import arcpy, os
basedir = r"C:\Project\Time"
# Create the output pdf file
pdfPath = os.path.join(basedir, "output", "HistoricalBoundaries.pdf")
pdfDoc = arcpy.mp.PDFDocumentCreate(pdfPath)
# Reference project, layout, map frame and map
aprx = arcpy.mp.ArcGISProject(os.path.join(basedir, "Tokyo.aprx"))
layout = aprx.listLayouts('Historical Boundaries')[0]
mfTokyo = layout.listElements('MAPFRAME_ELEMENT', 'Tokyo Map Frame')[0]
mTokyo = mfTokyo.map
# Add a layer that contains time values to the map
lyrTokyo = mTokyo.addLayer(arcpy.mp.LayerFile(os.path.join(basedir, 'Tokyo_Historic_Boundaries.lyrx')), 'TOP')[0]
# Enable time on the newly added layer
lyrTokyo.enableTime(startTimeField='Year', endTimeField='YearEnd')
# Enable Map Time
mtTokyo = mfTokyo.time
mtTokyo.isTimeEnabled = True
# Access Map Time properties for use in the MapTime.timeStep() method
interval = mtTokyo.currentTimeSpan
unit = mtTokyo.currentTimeSpanUnits
# Use the MapTime.timeStep() method to get the first time span
start = lyrTokyo.time.startTime
end = mtTokyo.timeStep(start, interval, unit)
# Loop through time spans
while end < lyrTokyo.time.endTime:
# Update the map frame with the time span
mtTokyo.currentTimeStart = start
mtTokyo.currentTimeEnd = end
# Export the time span to pdf
output_pdf_file = os.path.join(basedir, "output", f"HistoricalBoundaries_{start.year}_to_{end.year}.pdf")
layout.exportToPDF(os.path.join(basedir, "output", output_pdf_file))
# Appened the time step pdf to the output pdf
pdfDoc.appendPages(output_pdf_file)
# Use the MapTime.timeStep() method to proceed to the next time span
start = end
end = mtTokyo.timeStep(end, interval, unit)
# Add title and end pages to create a complete map book
pdfDoc.insertPages(os.path.join(basedir, 'Title Page.pdf'), 1)
pdfDoc.appendPages(os.path.join(basedir, 'End Page.pdf'))
# Save the output pdf
pdfDoc.saveAndClose()