Использование ArcPy для увеличения выбранного объекта?

19

Есть ли способ увеличить масштаб выбранного объекта, используя модуль ArcPy в ArcGIS Desktop 10.

Zachary
источник

Ответы:

16

У меня есть кусок кода, который работает. Я нашел это здесь на веб-сайте ESRI. Добавьте его как скрипт в модель, затем подключите к нему выходные данные инструмента выбора по атрибуту. Это именно то, что я хочу.

import arcpy
mxd = arcpy.mapping.MapDocument('CURRENT')
df = arcpy.mapping.ListDataFrames(mxd, "Layers") [0]
df.zoomToSelectedFeatures()
arcpy.RefreshActiveView()
Zachary
источник
Большинство скриптовых функций, которые управляют управлением документами (mxd), отображением или выводом, будут использовать модуль отображения ArcPy. help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/...
mindless.panda
3
+1 df.zoomToSelectedFeatures()Это как я это делаю. Вы можете также установить масштаб с df.scale = yourscalehere.
Натанус
10

Как вы уже догадались,

df.zoomToSelectedFeatures()

изменит экстенты фрейма данных на все выбранные объекты во фрейме карты. Если вас интересует просто увеличение масштаба набора для определенного слоя, используйте lyr.getSelectedExtent(). Я также корректирую масштабный коэффициент карты, чтобы мой код выглядел так:

df.extent = lyr.getSelectedExtent()
df.scale *= 1.5
arcpy.RefreshActiveView()

или это:

df.extent = lyr.getSelectedExtent()
df.scale = 12000 # 1:1,000
arcpy.RefreshActiveView()
Эрик Андерсон
источник
1

Итак, чтобы добавить к этому, мне нужно было следить за широчайшим экстентом в нескольких слоях без выбранных функций. Следующий код будет отслеживать дальний экстент в каждом направлении. Экстент_объекта остается постоянным во всех вызовах функции и должен быть инициализирован для одного из включаемых вами слоев. Аргумент «layer» к track_extent является объектом arcpy.Mapping.Layer. Когда вы будете готовы сохранить свою карту, просто установите экстент вашего фрейма данных с помощью что-то вроде data_frame.extent = экстент_объекта

extent_object = initial_layer.getExtent()

def track_extent(extent_object,layer):

    l_properties = layer.getExtent()

    # each of these essentially says that if this layer is further out to one direction than the current setting, change the setting
    if l_properties.XMin < extent_object.XMin:
        extent_object.XMin = l_properties.XMin
    if l_properties.YMin < extent_object.YMin:
        extent_object.YMin = l_properties.YMin
    if l_properties.XMax > extent_object.XMax:
        extent_object.XMax = l_properties.XMax
    if l_properties.YMax > extent_object.YMax:
        extent_object.YMax = l_properties.YMax
nicksan
источник