Jest to specyficzne dla ArcGIS.
Mam 2 Shapefiles punktów A
i B
, pierwszym ( A
) to jeden punkt, który zawiera szer długości, druga ( B
) jest wielopunktowo (ponad 12k), z których każdy zawiera lat i ich długości. Usiłuję zautomatyzować wybór 75% punktów pliku kształtu na B
podstawie odległości od pliku kształtu A
. Innymi słowy, chcę wybrać najbliższe 75% B
punktów shapefile do A
jednego punktu shapefile .
arcgis-10.0
spatial-statistics
Furlong
źródło
źródło
Odpowiedzi:
Możesz utworzyć bufor wielokrotnego pierścienia na pliku kształtu A, a następnie wykonać przestrzenne połączenie bufora z plikiem kształtu B. Gdy wykonasz połączenie przestrzenne wielokątów i punktów, otrzymasz liczbę punktów w każdym wielokącie w atrybucie tabela sprzężenia. Następnie, badając całkowitą liczbę punktów w buforach, możesz uzyskać do 75% punktów w pliku kształtu B.
Nieco innym podejściem byłoby napisanie skryptu w Pythonie i sprawdzenie 75% w pętli, ale jeśli jest to jednorazowe obliczenie, możesz tego nie potrzebować.
źródło
Do 1200 punktów (lub nawet powiedzieć punktów 12M?) Ja po prostu umieścić je w pamięci jako Generic Collection - w tym przypadku SortedList z list . Można to uprościć, pomijając punkty, gdy napotkasz sytuację, w której wiele punktów znajduje się w tej samej odległości od punktu początkowego. Również pod kątem wydajności, należy rozważyć użycie hashtable zamiast SortedList i sortowania raz po włożeniu wszystkich dystansach. To zajmie jeszcze kilka linii kodu (?).
Nie miałem czasu, aby to przetestować, ale ten c # może zacząć:
źródło
Skrypt geoprzetwarzania Pythona jest oczywistym wyborem:
źródło
Miałem ten problem kilka lat temu. Uznałem, że łatwiej jest przechowywać dane jako „dane płaskie”, przeglądając wszystkie dane i ręcznie obliczając odległość, a następnie biorąc górne 75% (faktycznie zachowałem górne 10%). Następnie zrobiłem to samo w ArcIMS, korzystając z ich obliczeń odległości i zajęło to znacznie więcej czasu.
Buforowanie jest ogromnym obciążeniem, ale obliczenia matematyczne są mocną stroną. Jeśli buforujesz 12 000 punktów, myślę, że będziesz mieć problemy z wydajnością.
źródło