Ciągle myślę, że coś mi brakuje, ale wydaje się, że w ArcGIS 10 nie ma narzędzia do wybierania elementów (w szczególności wielokątów) z warstwy w lokalizacji punktu (X, Y) za pomocą ArcPy. Parametry takiego narzędzia to po prostu nazwa warstwy i lokalizacja XY.
W tej chwili obejdę to, tworząc klasę obiektów punktowych zawierającą punkt i wykonując na nim SelectLayerByLocation. Jednak gdy klasa elementów wielokątów znajduje się w Oracle (dostęp za pośrednictwem ArcSDE 9.x) i zawiera 3,5 miliona wielokątów, wybór może zająć więcej niż 5 minut, kiedy myślę, że sekunda lub dwie (z mniejszym kodem) byłyby bardziej odpowiedni. Klasa obiektów ma indeks przestrzenny i próbowałem użyć arcpy.env.extent (który SelectLayerByLocation wydaje się ignorować) w celu ograniczenia dostępnego obszaru geograficznego, ale wydajność pozostaje bardzo niska.
Czy jest szybszy sposób, aby to zrobić za pomocą ArcGIS Desktop 10 i ArcPy?
Odpowiedzi:
Innym podejściem do tego byłoby użycie narzędzia Łączenie przestrzenne. Użyj punktu jako wejściowej warstwy obiektów, jak powyżej, a warstwy wielokąta jako funkcji tożsamości.
W przeciwieństwie SelectLayerByLocation, SpatialJoin robi cześć środowiska stopniu.
JOIN_ONE_TO_MANY może wydawać się sprzeczny z intuicją, ale ponieważ masz tylko jedną funkcję łączenia, główną funkcją tej opcji jest wyłączenie agregacji i scalanie reguł. KEEP_COMMON upewni się, że twój wynik jest ograniczony tylko do wielokąta, który przecina twój punkt. Mapowanie pól ograniczy atrybuty wyjściowe tylko do kształtu i atrybutów warstwy wielokąta; domyślnie zawierałyby również atrybuty warstwy punktowej.
Reszta ustawień domyślnych będzie działać dobrze, więc możesz pominąć pozostałe argumenty.
źródło
Właśnie zdałem sobie sprawę z czegoś ...
Jeśli używasz tego do zaimplementowania usługi geoprzetwarzania, możesz również zaimplementować usługę cech z warstwą wielokątów i użyć operacji zapytania w usłudze funkcji.
Państwo może użyć prostego położenia XY z funkcją pracy Query Service, a także kontrolować atrybuty wyjście w tym kształcie.
Możesz mieć ograniczenia dotyczące tego, ile możesz wystawić klasę obiektów wielokąta, ale jeśli już udostępniasz ją dla usługi geoprzetwarzania, powinieneś być w stanie również zbudować usługę obiektów.
źródło
Ta odpowiedź pochodzi ze starych forów dyskusyjnych ArcGIS .
Dziękuję Jasonowi Scheirerowi za bardziej zwięzły kod:
A szczególnie Chrisowi Snyderowi za wskazówkę dotyczącą wydajności:
źródło