LayerTime (arcpy.mapping)
Резюме
Объект LayerTime предоставляет доступ к операциям управления временем для слоев с поддержкой времени.
Обсуждение
Объект LayerTime предоставляет информацию о хранении и настройке времени в слое с поддержкой времени. Свойства времени в слое можно задать на закладке Время (Time) диалогового окна Свойства слоя (Layer Properties) в ArcMap, ArcScene или ArcGlobe.
Более подробно о настройке временных свойств слоя
Свойства времени слоя доступны только для чтения. Функция UpdateLayerTime позволяет вам заменить все свойства слоя, доступные на закладке Время (Time) диалогового окна Layer Properties, с помощью файла слоя (.lyr) или другого слоя в документе карты, содержащем информацию о времени.
Информация о времени, например поля времени, содержащие значения времени, связанные с объектами, времени начала и окончания данных, промежуток временного шага и т. д., может использоваться не только для получения сведений о временных свойствах на слое, поддерживающем время, но и для осуществления дальнейшего управления данными и проведения анализа относительно времени. В первом примере ниже показано, как можно получить временной экстент слоя с поддержкой времени с помощью startTime и endTime. Во втором примере ниже показано, как можно сформировать запрос времени с помощью поля времени и выбрать набор объектов на основе значения времени и сохранить их в отдельном классе объектов. Кроме того, можно использовать информацию о времени, чтобы гарантировать, что время, заданное для выбора объектов, попадает в период между временем начала и окончания слоя.
Кроме того, можно использовать несколько свойств Время слоя (LayerTime) вместе, чтобы связать данные в слое с поддержкой времени на основе времени. В третьем примере показано, как можно проходить по данным на основе времени с помощью свойства timeStepInterval и создавать поверхности на основе допустимых объектов с различными временными шагами. Учтите, что свойство timeStepInterval возвращает объект EsriTimeDelta.
Свойства
Свойство | Объяснение | Тип данных |
daylightSavings (только чтение) |
Определяет, были ли получены значения времени в поле времени слоя с учетом правил перехода на летнее время во входном часовом поясе. | Boolean |
displayDataCumulatively (только чтение) |
Указывает, отображаются ли данные в слое с поддержкой времени с накоплением. | Boolean |
endTime (только чтение) |
Получает конечную дату и время для слоя с поддержкой времени. | DateTime |
endTimeField (только чтение) |
Имя поля со значениями конечного времени. Поле конечного времени используется вместе с полем начального времени для хранения времени начала и конца для объектов, которые являются действительными в течение определенного периода. | String |
isTimeEnabled (только чтение) |
Показывает, включено ли время для слоя или нет. | Boolean |
startTime (только чтение) |
Получает начальную дату и время для слоя с поддержкой времени. | DateTime |
startTimeField (только чтение) |
Имя поля со значениями времени. Это поле используется для объектов, которые являются действительными в определенный момент времени. | String |
timeFormat (только чтение) |
Формат, в котором значения времени хранились в поле входного времени. Формат времени важен при формировании запроса времени. | String |
timeOffset (только чтение) |
Временное смещение, применяемое к значениям времени в ваших данных. Это значение – это объект EsriTimeDelta, который используется для итерации по периоду времени (например, 2 дня, 1 месяц и т. д.). | EsriTimeDelta |
timeStepInterval (только чтение) |
Временной интервал определяет степень детализации временных данных. Временной интервал можно представить как частоту записи значений времени в данных. Это значение – это объект EsriTimeDelta, который используется для итерации по периоду времени (например, 2 дня, 1 месяц и т. д.). | EsriTimeDelta |
timeZone (только чтение) |
Часовой пояс, заданный в слое с поддержкой значений времени. | String |
Пример кода
Следующий скрипт проверяет, поддерживает ли слой значения времени и заданы ли свойства времени. Затем он использует информацию о времени (начальное и конечное время) для вычисления временного экстента слоя с поддержкой времени.
import arcpy, datetime
lyr = arcpy.mapping.Layer(r'C:\Project\Data\Time\TemperatureWithTime.lyr')
if lyr.supports("TIME"):
lyrTime = lyr.time
if lyr.time.isTimeEnabled:
startTime = lyrTime.startTime
endTime = lyrTime.endTime
timeDelta = endTime - startTime
print "Start Time: " + str(startTime)
print "End Time: " + str(endTime)
print "Time Extent: " + str(timeDelta)
else:
print "No time properties have been set on the layer"
else:
print "Time is not supported on this layer"
Следующий скрипт создает класс объектов на основе входных объектов, допустимых в определенное время, при этом гарантируя, что время выборки попадает в экстент времени (между начальным и конечным временем) слоя с поддержкой времени.
import arcpy, datetime
output_GDB = r"C:\Project\Output\Output.gdb"
lyr = arcpy.mapping.Layer(r"C:\Project\Data\Time\TimeLayer.lyr")
lyrTime = lyr.time
# Set the time for which you want to select features in the time-enabled layer
timeSelection = datetime.datetime(2009, 9, 10, 12, 0)
# Get the start and end time of the time enabled layer
startTime = lyrTime.startTime
endTime = lyrTime.endTime
# Get the time field containing the time values associated with data in the time-enabled layer
timeField = str(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 (timeSelection < startTime or timeSelection > endTime):
print "The time specified for selecting features is not within the time extent of the layer"
else:
# Formulate the time query
timeQuery = "\"" + timeField + "\"" + "= date '" + str(timeSelection) + "'"
# Process: Feature Class to Feature Class
arcpy.FeatureClassToFeatureClass_conversion(lyr, output_GDB, "timeSubset", timeQuery, "", "")
Следующий скрипт использует информацию о времени (начальное и конечное время, интервал временного шага) для прохода по данным в слое с поддержкой времени для создания растровых поверхностей на основе точек, допустимых на каждом временном шаге, а затем сохраняет эти растры в наборе данных мозаики.
import arcpy, datetime
# Check out the Дополнительный модуль ArcGIS Spatial Analyst for using the IDW interpolation tool
arcpy.CheckOutExtension("spatial")
# Get the layer time properties
lyr = arcpy.mapping.Layer(r"C:\Project\Data\Time\TimeLayer.lyr")
lyrTime = lyr.time
# Calculate the number of iterations based on the time extent and timestep interval
startTime = lyrTime.startTime
endTime = lyrTime.endTime
timeExtent = endTime - startTime
timeStepInterval = lyrTime.timeStepInterval
iterations = timeExtent.days / timeStepInterval.interval
# Get the time field containing the time values associated
# with the data in the time-enabled layer
startTimeField = str(lyrTime.startTimeField)
# Specify the output mosaic dataset to which the interpolated rasters will be added
outputMosaicDataset = r"C:\Project\Output\Output.gdb\outputMosaicDataset"
i = 0
while i <= iterations:
# Formulate the time query and increment the time by the timeStepInterval
currentTime = str(startTime + (i*timeStepInterval))
timeQuery = "\"" + startTimeField + "\"" + " = date '" + currentTime + "'"
# Create an in-memory feature layer containing points that are valid at each timestep
tempFeatureLyr = "tempTimeLayer" + str(i)
arcpy.MakeFeatureLayer_management(lyr, tempFeatureLyr, timeQuery)
# Create an interpolated raster surface using the points valid at each timestep
outRaster = r"C:\Project\Output\Output.gdb\raster" + str(i)
print outRaster
arcpy.gp.Idw_sa(tempFeatureLyr, "Temperature", outRaster)
# Add the newly created raster surface to a Mosaic Dataset
arcpy.AddRastersToMosaicDataset_management(outputMosaicDataset, "Raster Dataset", outRaster)
i = i + 1
# Calculate the statistics on the output Mosaic Dataset for
# classifying your data after new rasters are added
arcpy.CalculateStatistics_management(outputMosaicDataset,"1","1","#")