Verwenden von ArcPy zum Zoomen auf das ausgewählte Feature?

19

Gibt es eine Möglichkeit, mit dem ArcPy-Modul in ArcGIS Desktop 10 das Ausmaß eines ausgewählten Features zu vergrößern?

Zachary
quelle

Antworten:

6

Ich würde ja sagen. Die Schichtklasse verfügt über ein getSelectedExtent Verfahren und die Datenrahmen eine Ausdehnung Eigenschaft. Hab es aber nicht ausprobiert.

Kirk Kuykendall
quelle
16

Ich habe einen Code, der funktioniert. Ich habe es hier auf der ESRI-Website gefunden. Fügen Sie es einem Modell als Skript hinzu und verbinden Sie dann die Ausgabe eines Auswahlwerkzeugs mit dem Modell. Es macht genau das, was ich will.

import arcpy
mxd = arcpy.mapping.MapDocument('CURRENT')
df = arcpy.mapping.ListDataFrames(mxd, "Layers") [0]
df.zoomToSelectedFeatures()
arcpy.RefreshActiveView()
Zachary
quelle
Die meisten Skriptfunktionen für die Verwaltung, Anzeige oder Ausgabe von Dokumenten (mxd) verwenden das ArcPy-Mapping-Modul. help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/...
mindless.panda
3
+1 df.zoomToSelectedFeatures()So mache ich es. Möglicherweise möchten Sie auch die Skalierung mit festlegen df.scale = yourscalehere.
Nathanus
10

Wie Sie bereits vermutet haben,

df.zoomToSelectedFeatures()

ändert die Ausdehnung des Datenrahmens auf alle ausgewählten Features im Kartenrahmen. Wenn Sie nur auf einen Auswahlsatz für eine bestimmte Ebene zoomen möchten, verwenden Sie lyr.getSelectedExtent(). Ich stelle auch den Kartenmaßstab so ein, dass mein Code entweder so aussieht:

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

oder dieses:

df.extent = lyr.getSelectedExtent()
df.scale = 12000 # 1:1,000
arcpy.RefreshActiveView()
Erik Anderson
quelle
1

Um dies zu ergänzen, musste ich den größten Umfang über mehrere Ebenen hinweg verfolgen, ohne dass Features ausgewählt wurden. Der folgende Code verfolgt die größte Ausdehnung in jede Richtung. Extent_Object bleibt über alle Aufrufe der Funktion hinweg konstant und sollte auf einer der Ebenen initialisiert werden, die Sie einschließen. Das Argument "layer" für track_extent ist ein arcpy.Mapping.Layer-Objekt. Wenn Sie bereit sind, Ihre Karte zu speichern, legen Sie einfach die Ausdehnung Ihres Datenrahmens über etwas wie data_frame.extent = extend_object fest

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
quelle