Mehr

Verstehen Sie die Verwendung von Ausdehnungen in ArcPy?

Verstehen Sie die Verwendung von Ausdehnungen in ArcPy?


Ich verstehe nicht ganz, wie der Umfang in ArcPy/Python funktionieren soll. Ich kann es anscheinend nicht in einer Funktion zum Laufen bringen, damit ich es durch meine Feature-Classes (FCs) filtern kann. Ich habe die ESRI-Hilfedateien gelesen, bin aber verwirrt.

Unten ist eine Beschreibung dessen, was ich zu erreichen versuche, gefolgt von dem kleinen Code, den ich bisher habe. Ich denke, es ist ein Problem mit meinem Verständnis davon, wie diese Operation funktioniert, aber jeder / alle Ratschläge sind willkommen.

Ein Skript, das zur Eingabe des Namens einer File-Geodatabase und eines XMIN-, YMIN-, XMAX-, YMAX-Koordinatensatzes auffordert. Führen Sie dann eine Schleife über jede Feature-Class und bestimmen Sie, ob die Ausdehnung jeder Feature-Class diese Ausdehnung überlappt. Wenn dies der Fall ist, wird auch bestimmt, wie viele Funktionen sich innerhalb dieses Umfangs befinden. *** Hinweis: Es sollte 0 für alle Feature-Classes gemeldet werden, die die Ausdehnung durchlaufen, aber keine Features in der Ausdehnung haben. Überprüfen Sie außerdem, ob eine der folgenden Geometrieoperationen vorhanden ist: innerhalb, enthält oder überlappt.

import arcpy, os from arcpy import env arcpy.env.overwriteOutput = True #Benutzerdefinierte Eingaben setzen gdb = r"F:… &&&.gdb" XMin = 1260000 YMin = 337000 XMax = 1280000 YMax = 360000 # Set Extent def Extent(): XMin = 1260000 YMin = 337000 XMax = 1280000 YMax = 360000 try: arcpy.env.extent = arcpy.Extent(XMIN,YMIN,XMAX,YMAX) Extent = arcpy.env.extent Rückgabewert außer: print (" In Extent() ist ein Fehler aufgetreten.") Extent = Extent() print extension #Liste verfügbarer Feature-Classes in einer Liste def FCs_in_GDB(gdb): try: arcpy.env.workspace = gdb print (arcpy.env.workspace) fcs = [] für fds in arcpy.ListDatasets(",'feature') + ["]: für fc in arcpy.ListFeatureClasses(",",fds): fcs.append(os.path.join(fds, fc)) return fcs außer: print ("In FCs_in_GDB() ist ein Fehler aufgetreten.") fcs = FCs_in_GDB(gdb) für fc in fcs: print fc

Habe meine Antwort gefunden, war nur eine Verwirrung meinerseits. Offensichtlich war eine Menge Kopfarbeit und ArcGIS-Hilfe beteiligt. Wenn also jemand weiter erklären möchte, was genau ich getan habe, kann es helfen, die Dinge für andere mit den gleichen Verwirrungen zu klären, die ich hatte.

Für Interessierte hier die Lösung, die ich gefunden habe:

#Define Geodatabase and workspace #gdb = r"F:… ####.gdb" env.workspace = gdb env.scratchworkspace = gdb # Ausdehnungsausdehnung festlegen = arcpy.Extent(XMIN,YMIN,XMAX,YMAX) # Verfügbare Feature-Classes in einer Liste auflisten def FCs_in_GDB(gdb): try: fcs = [] for fds in arcpy.ListDatasets(",'feature') + ["]: for fc in arcpy.ListFeatureClasses(",",fds) : fcs.append(os.path.join(fds, fc)) fcs zurückgeben außer: print ("In FCs_in_GDB() ist ein Fehler aufgetreten.") fc_list = FCs_in_GDB(gdb) #Process Describe() Filter auf Zählfunktion für fc in fc_list: try: name = arcpy.Describe(fc).name x = arcpy.Describe(fc).extent overlaps = x.overlaps(extent) enthält = x.contains(extent) innerhalb = x.within(extent) if überlappen==True or enthält==True oder innerhalb==True: count = arcpy.GetCount_management(fc) außer: print ("In fc_list() ist ein Fehler aufgetreten.")

Um Ausdehnungen in ArcPy zu verstehen, würde ich Folgendes empfehlen:

  • Ausgabeumfang (Umgebungseinstellung):

Werkzeuge, die die Umgebung der Ausgabeausdehnung berücksichtigen, verarbeiten nur Features oder Raster, die in die in dieser Einstellung angegebene Ausdehnung fallen.

Die Umgebungseinstellung Ausgabeausdehnung definiert, welche Features oder Raster von einem Werkzeug verarbeitet werden. Dies ist nützlich, wenn Sie nur einen Teil eines größeren Datasets verarbeiten müssen. Sie können sich diese Einstellung als Rechteck vorstellen, mit dem Eingabe-Features und Raster für die Verarbeitung ausgewählt werden. Jedes Feature oder Raster, das durch das Rechteck verläuft, wird verarbeitet und in die Ausgabe geschrieben. Beachten Sie, dass das Rechteck nur zum Auswählen von Features verwendet wird, nicht zum Beschneiden. Die Ausdehnung des Ausgabe-Datasets ist normalerweise größer als die Einstellung Ausgabeausdehnung, um Features zu berücksichtigen, die durch das Ausdehnungsrechteck verlaufen.

  • Umfangsobjekt:

Eine Ausdehnung ist ein Rechteck, das durch Angabe der Koordinate der unteren linken Ecke und der Koordinate der oberen rechten Ecke in Karteneinheiten angegeben wird.

Um herauszufinden, wie viele Features einen Extent durchlaufen, gibt es zwei Möglichkeiten, die ich in der Vergangenheit verwendet habe, je nach Situation:

  • setze arcpy.env.extent() und verwende dann CopyFeatures gefolgt von GetCount - das ist gut, wenn nicht zu viele Features kopiert werden
  • Erstellen Sie eine Rechteckgeometrie und verwenden Sie sie dann als select_features in Select Layer By Location, gefolgt von Get Count