Mehr

Verwenden von ArcGIS Desktop zum Zoomen auf das nächste ausgewählte Feature?


Wie könnte ich den folgenden Code anpassen, damit ich nacheinander auf jede einzelne ausgewählte Geometrie zoomen kann?

import arcpy mxd = arcpy.mapping.MapDocument('CURRENT') df = arcpy.mapping.ListDataFrames(mxd, "Layers") [0] df.zoomToSelectedFeatures() arcpy.RefreshActiveView()

Ich habe ein Visit-Tool (in C#, konvertiert von VB.net, das von VB6 aktualisiert wurde, das von einem Tool beeinflusst wurde, das ich in AML geschrieben habe). Polylinie oder Multipoint und zentrieren Sie die Kartenausdehnung neu.

Hier ist ein sehr grundlegender Start für Sie:

import arcpy mxd = arcpy.mapping.MapDocument('CURRENT') df = arcpy.mapping.ListDataFrames(mxd, "Layers") [0] Envelopes = [] # Speichere Extents hier # Finde den Auswahlsatz SelLayer = arcpy.mapping ListLayers(mxd,data_frame=df)[0] # erste Ebene fidSet = arcpy.Describe(SelLayer).FIDSet if len(fidSet) == 0: arcpy.AddMessage("Nichts ausgewählt") else: # jetzt mit dem Cursor hindurch an Holen Sie sich die Geometrien # speichern Sie ihre Ausdehnungen in einer Liste mit arcpy.da.SearchCursor(SelLayer,"[email protected]") as SCur: for feat in SCur: # Ich gehe von Polygon/Polyline Envelopes.append(feat[0] .extent) # packe die Hülle df.extent = Envelopes[0] # erste Ausdehnung arcpy.RefreshActiveView()

Zuerst müssen Sie überprüfen, ob eine Auswahl für den Layer vorhanden ist, wenn sich der Cursor durch die Datensätze befindet (denken Sie daran, dass bei einer Auswahl für einen Layer nur die ausgewählten Datensätze zurückgegeben werden) mit [email protected], um das Geometrieobjekt zu erhalten, das eine Ausdehnung hat als Eigenschaft, speichern Sie diese in einer Liste und rufen Sie dann die erste auf, um die aktuelle Datenrahmenausdehnung (auch eine Eigenschaft) festzulegen.

Beachten Sie, dass die Auswahl, sobald die Liste erstellt wurde, geändert werden kann, dies kann Ihren Wünschen entsprechen oder auch nicht. In meinem Fall wollte ich, dass die Extents erhalten bleiben und beim Durchgehen der Liste bearbeitet werden können.


Sie können Ihren Code wie oben beschrieben einbinden, um Folgendes einzuschließen:

  1. Verwenden Sie arcpy.da.searchcursor(), um eine Python-Liste dieser ausgewählten Funktionen zu erstellen
  2. Durchlaufen Sie Ihre Python-Liste mit einer eindeutigen ID, um einen SQL-Ausdruck zu erstellen und zu verwenden, mit dem Sie nach Attribut auswählen und dann auf ausgewählte Funktionen zoomen können.

Beim Herumspielen denke ich, dass etwas in dieser Richtung funktionieren wird… es ist im Moment ungetestet:

import arcpy mxd = arcpy.mapping.MapDocument('CURRENT') df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0] # Aus der Auswahl Feature-Layer erstellen (ArcGIS verwendet standardmäßig immer ausgewählte Features) LayerList = [] mit arcpy.da.SearchCursor("Layer1", "OBJECTID") als Cursor: für Element im Cursor: LayerList.append(item) Query = """{0} = {1}""".format("OBJECTID" , item) #print LayerList #print Abfrage für Zeilen in LayerList: arcpy.SelectLayerByAttribute_management("Layer1", "NEW_SELECTION", Query) df.zoomToSelectedFeatures()