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?

Antworten:



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()

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()

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.