Skip to main content

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

(Только для чтения)

Строка, представляющая единицы измерения для значения 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 будут включены в текущий временной интервал.

Имя Объяснение Тип данных

time_inclusion

A string that specifies a valid time inclusion value.

  • INCLUDE_START_AND_END—Include both start and end times.

  • INCLUDE_ONLY_START—Include start time, exclude end time.

  • INCLUDE_ONLY_END—Exclude start time, include end time.

  • EXCLUDE_START_AND_END—Exclude both start and end times.

String

timeStep(reference_time, interval, interval_units)

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

Имя Объяснение Тип данных

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.

  • MILLISECONDS—Milliseconds

  • SECONDS—Seconds

  • MINUTES—Minutes

  • HOURS—Hours

  • DAYS—Days

  • WEEKS—Weeks

  • MONTHS—Months

  • YEARS—Years

  • DECADES—Decades

  • CENTURIES—Centuries

String

Возвращаемое значение

Тип данных Объяснение

DateTime

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

Пример кода

MapTime, пример 1

Следующий скрипт устанавливает время начала и окончания для фрейма карты, а затем выполняет итерацию с интервалом в один месяц в течение года. Каждый месяц экспортируется в файл 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")
MapTime, пример 2

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