Mam pytanie dotyczące agregacji przestrzennej w R. Próbuję agregować punktowy zestaw danych do siatki. Nie jestem jednak pewien, jak to zrobić, ponieważ mam niewielkie doświadczenie w tego typu sprawach. Miałem nadzieję, że ktoś z was może mieć jakieś przydatne wskazówki / możliwe rozwiązanie.
Moim punktem obserwacyjnym jest zestaw danych zawierający dane georeferencyjne dotyczące konfliktów w Afryce (patrz www.acleddata.com). Punkty są georeferencyjne ze współrzędnymi szerokości i długości geograficznej i zawierają dane dotyczące rodzaju i czasu zdarzenia. To, co chcę zrobić, to zsumować te punkty do siatki 1x1 stopnia.
Zatem komórka siatki powinna zawierać informacje o punktach danych, jeśli zdarzenie miało miejsce w tej komórce siatki. Ostatecznym produktem tego powinna być ramka danych lub coś, co mogę wyeksportować do pliku csv, ponieważ dane są przeznaczone do wykorzystania w zestawie danych panelu do analizy statystycznej.
Do tej pory załadowałem i wydrukowałem dane oraz plik kształtu za pomocą poniższego kodu. Uważam, że powinienem użyć funkcji over z pakietu sp do agregacji, ale nie wiem jak. Mam nadzieję, że jeden z was może pomóc.
Kod, którego do tej pory użyłem, można znaleźć tutaj z odpowiednim wynikiem wizualnym tam .
Sugestie dotyczące zrobienia tego w QGIS są również mile widziane.
źródło
Odpowiedzi:
Pobrane dane zawierają pewne szczere błędy lokalizacyjne, więc pierwszą rzeczą do zrobienia jest ograniczenie współrzędnych do rozsądnych wartości:
Obliczenie współrzędnych i identyfikatorów komórki siatki jest jedynie kwestią obcięcia liczb dziesiętnych od wartości szerokości i długości geograficznej. (Mówiąc bardziej ogólnie, w przypadku dowolnych rastrów najpierw wyśrodkuj je i skaluj, aby dopasować do rozmiaru komórki, skróć dziesiętne, a następnie przeskaluj i ponownie wyśrodkuj z powrotem do ich pierwotnej pozycji, jak pokazano w poniższym kodzie
ji
.) Możemy połączyć te współrzędne w unikalne identyfikatory, dołączając je do wejściowej ramki danych i zapisz rozszerzoną ramkę danych jako plik CSV. Będzie jeden rekord na punkt:Zamiast tego możesz chcieć wyników podsumowujących zdarzenia w każdej komórce siatki. Aby to zilustrować, obliczmy liczby na komórkę i wyprowadzamy je, jeden rekord na komórkę:
W przypadku innych podsumowań zmień
function
argument w obliczeniachcounts
. (Ewentualnie użyj arkusza kalkulacyjnego lub oprogramowania bazy danych, aby podsumować pierwszy plik wyjściowy według identyfikatora komórki).W celu sprawdzenia, niech map liczniki za pomocą siatki centrów zlokalizować symbole na mapach. (Punkty położone na Morzu Śródziemnym, w Europie i na Oceanie Atlantyckim mają podejrzane lokalizacje: podejrzewam, że wiele z nich wynika z pomieszania szerokości i długości geograficznej w procesie wprowadzania danych.)
Ten przepływ pracy jest teraz
Dokładnie udokumentowane (za pomocą samego
R
kodu),Powtarzalne (przez ponowne uruchomienie tego kodu),
Rozszerzalny (poprzez modyfikację kodu w oczywisty sposób), oraz
Dość szybko (cała operacja zajmuje mniej niż 10 sekund na przetworzenie tych 53052 obserwacji).
źródło
Cóż, to czego potrzebujesz to podstawowe tak zwane „łączenie przestrzenne”, które dopasowuje do siebie dwa pliki kształtów i przydziela sumę (liczbę) do wynikowej tabeli atrybutów. Jeśli szukasz „Spatial Join in R”, znajdziesz tu wiele przykładów nawet tutaj na GIS.Stackexchange. Szybko przejrzałem Google i znalazłem na przykład ten kod opublikowany na liście mailingowej.
Jeśli chcesz uzyskać sprzężenie atrybutu przestrzennego w QGIS, wykonaj następujące czynności:
Jeśli Łączenie jakoś się nie powiedzie (nie działa dla mnie za każdym razem), trzymaj się SEXTANTE i poszukaj przybornika SAGA, który ma również bardzo dobre funkcje łączenia.
źródło
R
wyróżnia się. Korzystanie z plików kształtów,rgdal
QGIS i Sextante przypomina trochę zalecenie, aby ktoś wynajął nowoczesny zautomatyzowany zakład przemysłowy w celu połączenia dwóch desek :-).