Szukasz szybkiej, otwartej aplikacji rastrowej do obliczania kosztów i odległości do użycia w kodzie

9

Szukałem w Internecie szybkiej, opartej na otwartych źródłach funkcji odległości i kosztów, którą mogę osadzić w swoim kodzie. Funkcjonalność powinna zasadniczo działać podobnie jak implementacja ArcGIS, w której mogę określić raster źródłowy i raster kosztów i wyprowadzić raster odległości kosztów. To powiedziawszy, implementacja nie musi być tak zaawansowana jak ArcGIS, ponieważ nie muszę koniecznie wprowadzać „rastrów” z osadzonymi metadanymi geograficznymi - wystarczy podpis, który przyjmuje proste tablice numeryczne, ponieważ mogę sprawdzić, czy dane prawidłowo się pokrywają w momencie, gdy wywołuję funkcję.

Moim konkretnym celem jest obliczenie odległości kosztu do pojedynczego punktu w centrum rastra kosztu 1000 x 1000 na podstawie kliknięcia użytkownika, więc szybkie wykonanie jest bardzo ważne.

Implementacja AC # byłaby idealna, ale przyjrzę się wszystkim, co tam jest.

Czy ktoś wie o bibliotece typu open source, która to obsługuje? Dzięki za pomoc!

atogle
źródło

Odpowiedzi:

5

GRASS GIS ma implementację C w r.cost( źródło , dokumentacja ), która używa min-sterty . Alternatywnie możesz użyć pakietu graficznego takiego jak QuickGraph i Floyd-Warshall do obliczenia kosztu.

Ostatnie zmiany w GRASS 6.4 spowodowały, że koszt r. Był znacznie szybszy , więc być może wydajność może być wystarczająco dobra: na moim laptopie zajmuje około 3s dla regionu komórki 1M lub 5s z włączonym ruchem rycerza. GRASS jest aplikacją typu C, a nie drop-in rozwiązaniem dla bazy kodu C #. Jeśli nie masz nic przeciwko dodawaniu do stosu, możesz użyć PyWPS do wykonywania połączeń z GRASS, a następnie użyć wyniku w innym miejscu swojej aplikacji.

scw
źródło
Będę tego używał w aplikacji internetowej, więc moim celem jest ukończenie operacji w ciągu kilku sekund. Zawsze będę mieć tylko jedną komórkę docelową i stosunkowo wąski maksymalny koszt-odległość (odległość od środkowej komórki docelowej do krawędzi rastra kosztów, przy założeniu linii prostej przy minimalnym koszcie). Moje testy z ArcMap w tych warunkach sprawiają, że myślę, że to możliwe. Wszelkie wskazówki lub doświadczenia związane z korzystaniem z GRASS w C #?
atogle
Zaktualizowałem moje pytanie, aby odpowiedzieć na twoje pytania, zaczęło się jako komentarz, ale stało się za długie. Mam nadzieję, że to pomaga!
scw
Dzięki scw! To wszystko świetna informacja, ale tak naprawdę nie prowadzi mnie tam, gdzie powinienem być, chyba że zacznę przenosić kod GRASS (czego nie chcę.) Być może istnieją jeszcze inni maniacy rastrowi z kilkoma wskazówkami. Mam zamiar dalej się w to zagłębiać i opublikuję rozwiązanie, na którym się zdecydowałem.
atogle
Być może możesz zwrócić się do swojego kolegi: azavea.com/research/staff-research-projects/map-algebra ;-) Zasugerowałem kod GRASS, ponieważ jest to solidna i szybka implementacja, C # jest stosunkowo nowy w przestrzeni geoprzetwarzania, więc istnieje wdrożenia mogą być trudne do zdobycia.
scw
scw - tak właściwie zaczęła się moja podróż. Mój problem polega na tym, że jego wdrożenie poświęca czas przetwarzania na obliczenia wysokiej jakości. Pracujemy teraz nad algorytmem, który działa odwrotnie. GRASS to świetna sugestia, po prostu nie mam sposobu, aby z niej skorzystać. =)
Google
3

Często korzystam z tej r.costfunkcji w GRASS. 1000 * 1000 siatek nie stanowiło problemu na normalnym laptopie. Opracowywany jest także pakiet R (gdistance, http://r-forge.r-project.org/projects/gdistance/ ). GRASS znalazłem dużo szybciej.

Johnnes
źródło