Arcmap Wybierz według atrybutu za pomocą Pythona

9

Chciałbym, aby następujące elementy wybrały (podświetliły) warstwę „projektu” przecinającą siatkę, a następnie pobrały zapis z wybranej „siatki”. Nie muszę zapisywać warstwy.

Uwaga: Uruchomienie skryptu z poziomu ArcMap w oknie konsoli Python.

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

Ten kod działa i nie są podawane żadne błędy, ale nie wybiera (wyróżnia) żadnych funkcji. Masz pomysł, dlaczego? Działa również bardzo wolno.

Wyniki

Zasadniczo próbuję to zrobić:

wprowadź opis zdjęcia tutaj

Działa to naprawdę szybko, niemal natychmiast, ale chcę zrobić to samo przy użyciu Pythona. Potrzebuję tylko wartości z tabeli wybranej funkcji, nie potrzebuję kopii warstwy.

Częścią rozwiązania może być wykorzystanie obszaru roboczego w pamięci, którym jest

Zapisywanie danych w obszarze roboczym w pamięci jest często znacznie szybsze niż zapisywanie w innych formatach ...

Tylko nie wiem, jak zaimplementować obszar roboczy w pamięci

Naprzód Tristan
źródło
Czy uruchamiasz ten skrypt z poziomu ArcMap (tj. W konsoli Python)? Lub spoza ArcMap (tj. W IDLE lub innym edytorze Python)? Jedynym sposobem, w jaki ArcMap „wybiera (wyróżnia) dowolne funkcje” jest ArcMap. Podejrzewam, że uruchamiasz skrypt spoza ArcMap, ponieważ wykonanie import arcpypolecenia zajmuje trochę czasu.
dmahr
Uruchamiam skrypt z ArcMap w oknie konsoli Python.
Tristan Forward
Jeśli uruchamiasz go z poziomu ArcMap, nie potrzebujesz arcpy.MakeFeatureLayer()linii, ponieważ projectjest ona już warstwą. Po prostu zrób arcpy.SelectLayerByLocation_management("project","INTERSECT","Grid").
dmahr
świetny format pytania!
Brad Nesom,
Dzięki @dmahr, nadal działa wolniej niż wbudowany Select by Attribute, ale działa.
Tristan Forward

Odpowiedzi:

2

Dobre pytanie!

Dmahr ma rację, szybciej jest po prostu wybrać warstwę zamiast tworzyć warstwę funkcji. Dodałbym również resztę zmiennych, nawet jeśli są one opcjonalne.

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

Kolejną rzeczą, którą znajduję, jest to, że uruchamianie rzeczy w oknie Pythona ArcMap jest zawsze wolniejsze. Uważam, że jeśli napiszesz kod do pliku .py, dodasz go jako skrypt do przybornika, a następnie uruchomisz, przetwarzanie będzie przebiegać szybciej.

Cody Brown
źródło