DataFrame (arcpy.mapping)

Резюме

Объект класса DataFrame предоставляет доступ ко многим свойствам фрейма данных, найденным в пределах документа карты (.mxd). Ссылка на объект DataFrame часто используется в качестве аргумента нескольких функций для отбора слоев или таблиц в определенном фрейме данных.

Обсуждение

Объект класса DataFrame предоставляет доступ к важным свойствам фрейма данных. Функция ListDataFrames возвращает Python-список объектов DataFrame. Затем необходимо пройти по всем элементами списка в цикле или указать номер индекса для ссылки на определенный объект DataFrame. Объект может работать как с единицами карты, так и с единицами страницы, в зависимости от используемого свойства. Например, его можно использовать для указания экстента, масштаба и поворота карты, а также таких элементов, как пространственная привязка. Используя единицы измерения страницы, можно также изменить расположение и/или размер объекта DataFrame на компоновке. Объект DataFrame также предоставляет доступ к информационным элементам, таким как права доступа и описание.

Ссылка на фрейм данных также может оказаться полезной при работе с другими объектами. Например, функция ListLayers имеет дополнительный параметр под названием data_frame, который позволяет искать слои в пределах одного фрейма данных, а не во всем документе карты. Объект DataFrame также используется в качестве дополнительного параметра, чтобы различить печать или экспорт фрейма данных и печать или экспорт компоновки страницы. Поэтому важно, чтобы у каждого фрейма данных было свое уникальное имя, по которому вы сможете легко найти этот фрейм данных.

Координаты экстента фрейма данных берутся на основе экстента фрейма данных в Виде компоновки (Layout View), а не в Виде данных (Data View). Это связано с тем, что форма фрейма данных в Виде данных может иметь иные пропорции, чем фрейм данных в Виде компоновки.

Параметры elementPositionX и elementPositionY основаны на положении якоря элемента, которое указывается на вкладке Размер и положение (Size and Position) в диалоговом окне свойств элемента в ArcMap.

Единицы измерения страницы могут меняться в ArcMap только с использованием меню Настройка (Customize) > Опции ArcMap (ArcMap Options) > Закладка Вид компоновки (Layout View Tab).

Свойства

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

Дает возможность получать или задавать права доступа к фрейму данных.

String
description
(чтение и запись)

Дает возможность получать или задавать описательную информацию для фрейма данных.

String
displayUnits
(чтение и запись)

Дает возможность получать или задавать единицы измерения для фрейма данных.

String
elementHeight
(чтение и запись)

Высота элемента в единицах страницы. Единицы измерения задаются или считываются в единицах страницы.

Double
elementPositionX
(чтение и запись)

Положение Х якоря элемента во фрейме данных. Единицы измерения задаются или считываются в единицах страницы.

Double
elementPositionY
(чтение и запись)

Положение Y якоря элемента во фрейме данных. Единицы измерения задаются или считываются в единицах страницы.

Double
elementWidth
(чтение и запись)

Ширина элемента в единицах страницы. Единицы измерения задаются или считываются в единицах страницы.

Double
extent
(чтение и запись)

Дает возможность получать или задавать экстент карты для фрейма данных, используя координаты карты (то есть, единицы карты). Сохраните копию объекта Экстент перед изменением его свойств. Измененная копия будет использоваться для установки новых свойств объекта экстент. Примечание: в случае изменения свойств экстент простым назначением ссылки на объект Экстент, изменения не будут сохранены. например, df.extent.xMin = some value не будет работать.

Если пропорция экспозиции экстент не соответствует форме фрейма данных, окончательный экстент будут изменен для соответствия новому экстенту внутри формы фрейма данных. Другими словами, в случае назначения точных значений для координат X и Y, вы можете не получить их при попытке прочтения позже.

Примечание: свойства объекта Экстент в справочной системе по умолчанию доступны только для чтения. Отдельное исключение сделано для среды написания arcpy.mapping, обеспечивающее изменение экстентов в процессе автоматического создания карты.

df = arcpy.mapping.ListDataFrames(mxd)[0]
newExtent = df.extent
newExtent.XMin, newExtent.YMin = -180.0, -90.0
newExtent.XMax, newExtent.YMax = 180.0, 90.0
df.extent = newExtent
Extent
geographicTransformations
(чтение и запись)

Дает возможность получать или задавать географическое преобразование фрейма данных. Свойство возвращает имя преобразования в списке. Можно использовать только имеющиеся предопределенные имена преобразований (либо соответствующие кодовые значения) для назначения географических преобразований.

Полный список преобразований и кодовых значений имеется в Ресурсном центре ArcGIS.

Для создания пользовательского преобразования использование geographicTransformations невозможно. Можно сослаться только на предопределенные методы.

По умолчанию в документ карты всегда загружается одно географическое преобразование: NAD_1927_To_NAD_1983_NADCON. При изменении списка оно будет перезаписано. Географические преобразования можно также удалить, назначив пустой список.

В следующем примере указаны два метода преобразования с использованием строк с именами. Первый от NAD27 до NAD 83 и второй от NAD83 до HARN. Во втором примере выполняются те же действия, однако используются только коды преобразований.

df.geographicTransformations = [u'NAD_1927_To_NAD_1983_NADCON', u'NAD_1983_To_HARN_New_Jersey']
df.geographicTransformations = [1241,1554]
String
mapUnits
(только чтение)

Возвращает значение строки, отображающее текущие единицы карты фрейма данных. Они основаны на текущей системе координат фрейма данных.

String
name
(чтение и запись)

Дает возможность задавать или получать имя фрейма данных, которое отображается в таблице содержания в документе карты, а также действительное имя элемента в слое.

String
referenceScale
(чтение и запись)

Дает возможность получать или задавать базовый масштаб для фрейма данных. Это масштаб, в котором размеры всех символов и текста, используемых во фрейме данных, будут относительными.

Double
rotation
(чтение и запись)

Дает возможность получать или задавать значение поворота для фрейма данных. Представляет собой значение в градусах, на которое будет повернут фрейм данных, измеренное против часовой стрелки с севера. Для вращения по часовой стрелке используйте отрицательное значение.

Double
scale
(чтение и запись)

Дает возможность получать или задавать текущий масштаб для активного фрейма данных. Он должен быть двузначным числовым значением.

Double
spatialReference
(чтение и запись)

Предоставляет доступ к свойствам SpatialReference фрейма данных. Пространственная привязка содержит информацию о системе координат и единицах.

SpatialReference
time
(только чтение)

Возвращает объект DataFrameTime, предоставляющий доступ к операциям по контролю отображения слоев с поддержкой времени во фрейме данных.

DataFrameTime
type
(только чтение)

Возвращает тип любого элемента на странице компоновки.

  • DATAFRAME_ELEMENTЭлемент Dataframe
  • GRAPHIC_ELEMENTГрафический элемент
  • LEGEND_ELEMENTЛегенда
  • MAPSURROUND_ELEMENTЭлемент Mapsurround
  • PICTURE_ELEMENTРисунок
  • TEXT_ELEMENTЭлемент Текст
String

Обзор метода

МетодОбъяснение
panToExtent (extent)

Передвигает и центрирует экстент фрейма данных с использованием объекта Extent без изменения масштаба фрейма данных

zoomToSelectedFeatures ()

Изменяет экстент фрейма данных для его соответствия экстенту выбранных в текущий момент во всех слоях фрейма данных объектов.

Методы

panToExtent (extent)
ПараметрОбъяснениеТип данных
extent

Геообработка объекта Экстент

Extent

Этот метод наиболее подходит в тех случаях, когда масштаб фрейма данных не изменяется. Вместо задания экстента и последующего изменения масштаба каждый раз, когда это требуется, функция panToExtent поддерживает масштаб и центрует текущий фрейм данных по новому экстенту.

В следующем примере экстент фрейма данных масштабируется путем выбора определенных объектов слоя. Для этой цели используется класс слоя и метод getSelectedExtent.

df.panToExtent(lyr.getSelectedExtent())
zoomToSelectedFeatures ()

Осуществляет ту же операцию ArcMap, что и команда меню Выборка (Selection) > Приблизить к выбранным объектам (Zoom To Selected Features). Единственное отличие состоит в том, что если не будет выбрано никаких объектов, приближение будет выполнено на весь экстент для всех слоев. Для приближения на весь экстент для выбранных объектов в определенном слое, нужно использовать метод Layer.getSelectedExtent.

В следующем примере показано приближение на полный экстент для выбранных объектов.

df.zoomToSelectedFeatures()

В следующем примере показано приближение на полный экстент для выбранных объектов для определенного слоя. В этом примере метод используется к объекту Layer.

df.extent = lyr.getSelectedExtent()

Пример кода

DataFrame, пример 1:

Следующий скрипт задает во всех фреймах данных для свойства поворот значение 0, а для свойства масштаб значение 1:24000, а затем экспортирует каждый фрейм данных в отдельный выходной файл TIFF, используя свойство фрейма данных имя в качестве имени выходного файла.

import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
for df in arcpy.mapping.ListDataFrames(mxd):
    df.rotation = 0
    df.scale = 24000
    outFile = r"C:\Project\Output\\" + df.name + ".tif"
    arcpy.mapping.ExportToTIFF(mxd, outFile, df)
del mxd
DataFrame, пример 2:

Следующий скрипт задает экстент фрейма данных равным экстенту выборки объектов в слое. К экстенту добавлен 10%-й буфер, полученный путем изменения масштаба. В этом примере к объекту Слоя (Layer) применяется метод getSelectedExtent. Этот скрипт запускается из интерактивного окна в ArcMap при помощи ключевого слова CURRENT, при этом не нужно указывать путь к документу карты.

import arcpy
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd, "Transportation")[0]
accidentLayer = arcpy.mapping.ListLayers(mxd, "accidents", df)[0]
arcpy.SelectLayerByAttribute_management(accidentLayer, "NEW_SELECTION", "\"Accidents\" > 5")
df.extent = accidentLayer.getSelectedExtent(False)
df.scale = df.scale * 1.1
arcpy.mapping.ExportToPDF(mxd, r"C:\Project\Output\FrequentAccidents.pdf", df)
arcpy.RefreshActiveView()
del mxd
DataFrame, пример 3:

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

import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
df = arcpy.mapping.ListDataFrames(mxd, "Transportation")[0]
df.elementPositionX, df.elementPositionY = 1, 1
df.elementHeight, df.elementWidth = 5, 6.5
mxd.save()
del mxd
DataFrame, пример 4:

Следующий скрипт преобразует объект экстента фрейма данных в полигональный объект, так чтобы его можно было использовать с функцией SelectLayerByLocation_management.

import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
df = arcpy.mapping.ListDataFrames(mxd, "Transportation")[0]
lyr = arcpy.mapping.ListLayers(mxd, "Accidents", df)[0]
#The DataFrame extent object is converted into a polygon feature so it can be used with the SelectLayerByLocation function.
dfAsFeature = arcpy.Polygon(arcpy.Array([df.extent.lowerLeft, df.extent.lowerRight, df.extent.upperRight, df.extent.upperLeft]),
                            df.spatialReference)
arcpy.SelectLayerByLocation_management(lyr, "INTERSECT", dfAsFeature, "", "NEW_SELECTION")
mxd.save()
del mxd
9/11/2013