MapTime

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

Объект MapTime обеспечивает доступ к операциям управления временем, когда слои с включенным временем отображаются в MapFrame в Компоновке.

Обсуждение

Класс MapTime позволяет фильтровать объекты на карте, используя ряд доступных настроек времени, которые соответствуют элементам управления на вкладке Время и Бегунок времени на активированном фрейме карты в компоновке в ArcGIS Pro. Изменение свойств времени карты применяется только к карте, связанной с MapFrame в Компоновке, и в настоящее время не применяется к виду карты.

Свойства currentStartTime и currentEndTime используются для указания временного диапазона. Свойство timeInclusion определяет, включены ли объекты в определенный временной диапазон. Свойство устанавливается с помощью метода setTimeInclusion.

Подсказка:

Свойство currentStartTime не может быть больше свойства currentEndTime. И наоборот, свойство currentEndTime не может быть меньше, чем свойство currentStartTime. Если вы переходите на новый будущий временной диапазон, лучше всего установить currentEndTime перед настройкой currentStartTime.

Метод timeStep может использоваться для расчета новых значений currentStartTime и currentEndTime. Чтобы создать серию временных карт, используйте метод timeStep для перебора значений времени. Пример кода см. в примере 3 ниже.

Время можно включить для вновь добавленных слоев к карте фрейма карты, что позволяет выполнять анализ времени, создавать временные книги карт и т. д. Примеры кода см. в примерах 2 и 3 ниже.

Свойства

СвойствоОписаниеТип данных
currentTimeEnd
(чтение и запись)

Текущая дата и время окончания для текущего промежутка времени фрейма карты.

DateTime
currentTimeSpan
(только чтение)

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

Double
currentTimeSpanUnits
(только чтение)

Строка, представляющая единицы измерения для значения currentTimeSpan. Поддерживаются следующие значения:

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

Текущая дата и время начала временного интервала фрейма карты.

DateTime
isTimeEnabled
(чтение и запись)

Булево значение, определяющее, включено ли время для фрейма карты. Свойство isTimeEnabled должно быть True для изменения других свойств MapTime. Время можно отключить для фрейма карты, даже если фрейм карты содержит слои с включенным временем.

Boolean
timeInclusion
(только чтение)

Строка, которая определяет, включены ли currentTimeStart и currentTimeEnd в текущий временной интервал. Допустимый список значений выглядит следующим образом:

  • EXCLUDE_START_AND_END
  • INCLUDE_ONLY_END
  • INCLUDE_ONLY_START
  • INCLUDE_START_AND_END
String
timeStepInterval
(только чтение)

Указывает время, на которое будут смещены время начала и окончания на каждом временном шаге.

Double
timeStepIntervalUnits
(только чтение)

Единицы измерения, используемые timeStepInterval. Список допустимых значений выглядит следующим образом:

  • MILLISECONDS
  • SECONDS
  • MINUTES
  • HOURS
  • DAYS
  • WEEKS
  • MONTHS
  • YEARS
  • DECADES
  • CENTURIES
String

Обзор метода

МетодОписание
setTimeInclusion (time_inclusion)

Метод setTimeInclusion контролирует, как currentTimeStart и currentTimeEnd будут включены в текущий временной интервал.

timeStep (reference_time, interval, interval_units)

Метод timeStep возвращает новое время на основе заданного эталонного времени и временного интервала.

Методы

setTimeInclusion (time_inclusion)
ПараметрОписаниеТип данных
time_inclusion

A string that specifies a valid time inclusion value.

  • INCLUDE_START_AND_ENDInclude both start and end times.
  • INCLUDE_ONLY_STARTInclude start time, exclude end time.
  • INCLUDE_ONLY_ENDExclude start time, include end time.
  • EXCLUDE_START_AND_ENDExclude both start and end times.
String

Данные, отображаемые на основе значений currentTimeStart и currentTimeEnd, можно дополнительно изменить, исключив одно или оба значения во временном интервале - например, если вы отображаете временной интервал в один год, где время начала - 01.01.2020, а время окончания - 01.01.2021. Если вы не хотите, чтобы данные от 01.01.2021 включались в какой-либо анализ, вы должны установить значение time_inclusion на INCLUDE_ONLY_START.

timeStep (reference_time, interval, interval_units)
ПараметрОписаниеТип данных
reference_time

A Python DateTime object. The interval and interval_units will be added to the reference_time.

Подсказка:

The reference_time can be any Python DateTime object. For example, you can set the reference_time to be the currentStartTime or currentEndTime values.

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.

  • MILLISECONDSMilliseconds
  • SECONDSSeconds
  • MINUTESMinutes
  • HOURSHours
  • DAYSDays
  • WEEKSWeeks
  • MONTHSMonths
  • YEARSYears
  • DECADESDecades
  • CENTURIESCenturies
String
Возвращаемое значение
Тип данныхОписание
DateTime

Новое значение DateTime, рассчитанное из reference_time, interval и interval_units.

Метод timeStep возвращает новое время на основе заданного эталонного времени и временного интервала. Объект datetime Python, возвращаемый методом timeStep, можно использовать для установки свойств currentTimeEnd и currentTimeStart. Чтобы создать серию временных карт, используйте метод timeStep для перебора значений времени.

Пример кода

MapTime, пример 1

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

import arcpy, 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")
MapTime, пример 2

Следующий скрипт добавляет слой с учетом времени из файла слоя на карту фрейма карты. В этом рабочем процессе фрейм карты не содержит времени. Затем скрипт приближает к экстенту добавленного слоя. Время включается во фрейме карты путем установки isTimeEnabled на True. Наконец, скрипт определяет начальный промежуток времени, задав currentStartTime, currentEndTime и setTimeInclusion.

import arcpy, 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"))
MapTime, пример 3

Следующий скрипт добавляет слой с учетом времени из файла слоя на карту фрейма карты. После этого в слое и в карте включается время. Для итерации по ряду временных интервалов используется метод 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()