Arcmap Mit Python nach Attribut auswählen


9

Ich möchte, dass im Folgenden die Ebene "Projekt" ausgewählt (hervorgehoben) wird, die das Raster schneidet, und dann ein Datensatz aus dem ausgewählten "Raster" gezogen wird. Ich muss die Ebene nicht speichern.

Hinweis: Ausführen des Skripts in ArcMap im Python Console-Fenster.

import arcpy

# Make a layer from the feature class
arcpy.MakeFeatureLayer_management("project","project_lyr")

# Then add a selection to the layer based on location to features in another feature class 
arcpy.SelectLayerByLocation_management("project_lyr","INTERSECT","Grid")

Dieser Code wird ausgeführt und es werden keine Fehler angegeben, es werden jedoch keine Funktionen ausgewählt (hervorgehoben). Irgendeine Idee warum? Läuft auch sehr langsam.

Ergebnisse

Grundsätzlich versuche ich das:

Geben Sie hier die Bildbeschreibung ein

Dies läuft sehr schnell fast sofort, aber ich möchte das gleiche mit Python tun. Ich benötige nur einen Wert aus der Tabelle des ausgewählten Features. Ich benötige keine Kopie der Ebene.

Ein Teil der Lösung sein , um die Verwendung kann im Speicher befindlichen Arbeitsbereich , die ist

Das Schreiben von Daten in den In-Memory-Arbeitsbereich ist häufig erheblich schneller als das Schreiben in andere Formate ...

Ich bin mir nur nicht sicher, wie ich den In-Memory-Arbeitsbereich implementieren soll


Führen Sie dieses Skript in ArcMap aus (dh in der Python-Konsole)? Oder von außerhalb von ArcMap (dh innerhalb von IDLE oder einem anderen Python-Editor)? ArcMap kann Features nur in ArcMap "auswählen (hervorheben)". Ich vermute, dass Sie das Skript von außerhalb von ArcMap ausführen, da die Ausführung des import arcpyBefehls eine Weile dauert.
dmahr

Ich führe das Skript in ArcMap im Python Console-Fenster aus.
Tristan Forward

Wenn Sie es in ArcMap ausführen, benötigen Sie die arcpy.MakeFeatureLayer()Linie nicht, da projectes sich bereits um eine Ebene handelt. Tu es einfach arcpy.SelectLayerByLocation_management("project","INTERSECT","Grid").
dmahr

tolles Fragenformat!
Brad Nesom

Danke @dmahr, läuft immer noch langsamer als das eingebaute Select by Attribute, funktioniert aber.
Tristan Forward

Antworten:


2

Gute Frage!

Dmahr hat recht, es ist schneller, einfach die Ebene auszuwählen, anstatt eine Feature-Ebene zu erstellen. Ich würde auch den Rest der Variablen hinzufügen, obwohl sie optional sind.

arcpy.SelectLayerByLocation_management ("project_lyr", "INTERSECT", "Grid", "#", "NEW_SELECTION")

Eine andere Sache, die ich finde, ist, dass das Ausführen von Dingen im Python-Fenster von ArcMap immer langsamer ist. Ich finde, wenn Sie den Code in eine .py-Datei schreiben, ihn als Skript zur Toolbox hinzufügen und dann ausführen, wird die Verarbeitung schneller.

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.