Antworten:
Ich würde ja sagen. Die Schichtklasse verfügt über ein getSelectedExtent Verfahren und die Datenrahmen eine Ausdehnung Eigenschaft. Hab es aber nicht ausprobiert.
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()
df.zoomToSelectedFeatures()
So mache ich es. Möglicherweise möchten Sie auch die Skalierung mit festlegen df.scale = yourscalehere
.
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()
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