jak mogę obliczyć sumy, średnie itp. punktów rastrowych (wielopasmowych) na wielokąt warstwy wektorowej. Powiedziano mi, że nazywa się to „statystykami strefowymi”. Najpierw spróbowałem tego z QGIS.
Jest na to sposób, ale jest to zbyt powolne (konwersja rastra na wektor, przecięcie z drugą warstwą wektorową, obliczanie geometrii, eksportowanie liczb, obliczanie statystyk za pomocą arkusza kalkulacyjnego lub innego programu, ponowne importowanie wyników, trwa wieczność dla mojego 350 000 punktów rastrowych).
Dano mi również podpowiedź do użycia saga-gis. Ma to „statystyki strefowe”, ale te oparte są na kategoriach z pasma rastrowego, a nie na wielokątach z warstwy wektorowej. Aby go użyć, musiałbym przekonwertować warstwę wektorową na raster, a następnie obliczyć statystyki.
To wydaje się niewłaściwy sposób na rozwiązanie tego. Nie byłoby sposobu, aby uwzględnić punkty rastrowe, które należą do 2 lub więcej wielokątów, ponieważ są one przecinane przez granicę wielokąta. Zakładam, że statystyki oparte na wielokącie powinny być w stanie sobie z tym poradzić, więc zakładam również, że nie znalazłem jeszcze odpowiedniego modułu.
Saga-gis ma naprawdę wiele modułów. Daj mi znać, który z nich jest odpowiedni dla tej aplikacji.
źródło
Odpowiedzi:
Próbowałem zrobić dokładnie to samo, ale z różnych powodów jestem zdecydowany korzystać z QGIS. Próbowałem użyć v.rast.stats przy użyciu wtyczki GRASS, a także wtyczki Sextante. To drugie podejście zawiodło, ponieważ wydaje się, że dołącza statystyki do tymczasowej warstwy wektorowej, którą następnie usuwa. Wtyczka GRASS działała, ale nie radzi sobie z nakładającymi się wielokątami.
Po kilku kopaniach (w źródle obiecująco brzmiącej wtyczki ZonalStats) odkryłem, że QGIS ma wbudowane w API metody statystyki strefowej, które również mają powiązania Pythona. Tak długo, jak tylko szukasz
count
,sum
amean
statystyki dla swoich funkcji wielokąta, Python Console (Plugins> Python Console) jest obecnie najprostszym sposobem, aby dołączyć statystyk do tabeli atrybutów wielokąt.Wybierz warstwę rastrową w Spisie treści i wpisz następujące polecenie w konsoli (pobierze nazwę pliku źródłowego warstwy rastrowej)
>>> rasterfile = qgis.utils.iface.mapCanvas().currentLayer().source()
Wybierz warstwę wektorową i wykonaj następujące polecenie w konsoli (pobierze ona samą warstwę wektorową)
>>> vectorlayer = qgis.utils.iface.mapCanvas().currentLayer()
Wykonaj następujące trzy polecenia w konsoli (przekazują warstwę wektorową i plik rastrowy do wbudowanego kalkulatora statystyk strefowych QGIS)
>>> import qgis.analysis
>>> zonalstats = qgis.analysis.QgsZonalStatistics(vectorlayer,rasterfile)
>>> zonalstats.calculateStatistics(None)
Wyniki zostaną dołączone jako dodatkowe pola w warstwie wielokąta.
Zauważ, że jeśli chcesz dołączyć prefiks do nowych pól (zamiast mieć je tylko jako sumę, średnią i liczbę), zastąpisz pierwsze polecenie w kroku 3 następującym (zakładając, że chcesz użyć „zonal_” jako prefiks:
źródło
W końcu znalazłem: W Saga-GIS otwórz kategorię-wielokąty i siatkę danych, a następnie kształty-> siatka-> wartość siatki-> statystyki siatki dla wielokątów
źródło
Możesz to zrobić dość łatwo za pomocą PostGIS. Zobacz ten samouczek: http://trac.osgeo.org/postgis/wiki/WKTRasterTutorial01
źródło
Wydaje się, że ten problem został rozwiązany już jakiś czas temu, ale i tak dodam łyżkę do zupy, ponieważ ostatnio sam potrzebowałem statystyk rastrowych.
Metodologia QGIS opisana przez rudivonstaden działała jak urok, dzięki za wskazówkę. Jednak w moim przypadku chciałem również znać wartości min i max oraz std dla wartości rastrowych w moich wielokątach i tej funkcji nie mogłem znaleźć w QGIS. Znalazłem rozwiązanie dzięki funkcji isectpolyrst w GME , która jest moją ulubioną do rozwiązywania problemów z GIS. Ta funkcja dała mi tylko statystyki, których potrzebowałem i dość szybko.
PS. GME ma trochę niefortunnej zależności (ArcGIS). Nawet jeśli sam program jest ogólnie dostępny dla wszystkich, potrzebujesz ArcGIS, aby go uruchomić. Ale jeśli masz ArcGIS (dowolny poziom licencji), zalecamy wypróbowanie go.
EDYTOWAĆ:
Dostałem statystyki, które chciałem, ale później dowiedziałem się, że do pochopnych wniosków wyciągnąłem nieco po spojrzeniu na rzeczywiste liczby. Otrzymujesz statystyki, ale tylko dla pierwszego zespołu w rastrze. Więc jeśli operujesz z 3-pasmowym obrazem rastrowym, statystyki są niekompletne. Powinienem był wskazać liczbę kanałów w moim oryginalnym poście. Najlepiej używać SAGA-GIS jak stn zaproponowany powyżej, jeśli pracujesz z wielopasmowymi obrazami rastrowymi.
źródło
domyślnie oblicza tylko liczbę, sumę i średnią (jak można stwierdzić
Raster -> Zonal Statistics
w QGIS Desktop, może zrobić znacznie więcej).Jeśli na przykład chcesz obliczyć tylko średnią, której musisz użyć:
zobacz API dla wszystkich opcji.
źródło