Konwersja danych punktowych na siatkową ramkę danych do analizy histogramu przy użyciu R?

14

Jestem bardzo nowy w korzystaniu z danych GIS i mam jedynie niewielkie doświadczenie z R. Czytałem o tym, jak analizować dane przestrzenne za pomocą książki PDF spatial-analyst.net, więc nie jestem całkowicie zagubiony, ale pomyślałem, że mógłbym opisać mój problem i ludzie mogą sugerować pomysły.

Mam zestaw danych z około 2000 pomiarami przy różnych współrzędnych szerokości / długości, chociaż prawdopodobnie podzielę ten zestaw danych, ponieważ dane były gromadzone przez 3 lata, a warunki zmieniały się z czasem. Nazwijmy mierzoną zmienną „IP”.

Chcę utworzyć mapę IP na całym badanym obszarze za pomocą Kriginga lub innej metody interpolacji na przykładowych danych. Następnie chcę utworzyć histogram mierzący wielkość terenu w różnych segmentach IP. Będę też musiał stworzyć histogram, który pokazuje liczbę próbek w każdym wiadrze (zauważ, że próbka może mieć wyższe lub niższe rzeczywiste IP niż to, co przewiduje kriging dla jego ziemi).

Śledzę, jak ładować dane do SpatialPointsDataFrame i przeprowadzam analizę kriging, w której mam problem z tym, jak przekonwertować te dane na siatkową ramkę danych, aby móc przeprowadzić analizę histogramu.

Wszelkie sugestie dotyczące konwertowania punktów na siatki?

użytkownik1080253
źródło

Odpowiedzi:

12

Masz rację ... to całkiem proste! Pakiet „rastrowy” ma całkiem proste sposoby radzenia sobie z tworzeniem i manipulowaniem rastrami.

library(maptools)
library(raster)

# Load your point shapefile (with IP values in an IP field):
pts <- readShapePoints("pts.shp")

# Create a raster, give it the same extent as the points
# and define rows and columns:

rast <- raster()
extent(rast) <- extent(pts) # this might be unnecessary
ncol(rast) <- 20 # this is one way of assigning cell size / resolution
nrow(rast) <- 20

# And then ... rasterize it! This creates a grid version 
# of your points using the cells of rast, values from the IP field:
rast2 <- rasterize(pts, rast, pts$IP, fun=mean) 

Możesz przypisać rozmiar siatki i rozdzielczość na wiele sposobów - zapoznaj się z dokumentacją pakietu rastrowego.

Wartości komórek rastrowych z rasteryzacji można obliczyć za pomocą funkcji - „średnia” w powyższym przykładzie. Upewnij się, że umieściłeś to: w przeciwnym razie po prostu używa wartości IP od ostatniego punktu, w którym się znajduje!


Z pliku CSV:

pts <- read.csv("IP.csv")
coordinates(pts) <- ~lon+lat
rast <- raster(ncol = 10, nrow = 10)
extent(rast) <- extent(pts)
rasterize(pts, rast, pts$IP, fun = mean)
Simbamangu
źródło
Hej, to jest bardzo przydatne, ale jak wyglądałby kod, gdybym zaczął od punktów w prostym CSV z lat / longs zamiast pliku kształtu? Kolumny w CSV to IP, Lat, Long itp. Itd.
user1080253
Wskazałeś, że już załadowałeś dane do SpatialPointsDataFrame ... dokładnie tak, jak ptsw moim przykładzie powyżej. Po prostu uruchom kod na swoim obiekcie SpatialPointsDataFrame!
Simbamangu
4
Ta odpowiedź, choć doskonała, wydaje się nie uwzględniać tego, co jest potrzebne. (Wydaje się, że oferuje rozwiązanie zamiast gis.stackexchange.com/questions/20018 ). Wyzwaniem jest interpolacja około 2000 punktów, a nie tylko przypisanie ich wartości do komórek rastrowych. Biorąc pod uwagę, że OP twierdzi, że już „przeprowadził analizę kriging”, to pytanie sprowadza się do wyodrębnienia wartości rastra (powiedzmy r) za użycie w histpodobnej procedurze, która jest po prostu kwestią podobnego wyrażenia hist(getValues(r)).
whuber
@ whuber - Wygląda na to, że OP pyta „gdzie mam problem z tym, jak przekonwertować te dane do siatki danych, aby móc przeprowadzić analizę histogramu ... wszelkie sugestie dotyczące konwersji punktów na siatki” jako aktualne pytanie, i wie, jak to zrobić zrobić SpatialPointsDataFrame i uruchomić kriging. Ale masz rację, wydaje się, że jest to duplikat 20018 (z wyjątkiem danych wejściowych z siatki).
Simbamangu
Przepraszam, @ user1080253 ... Czytam „grid” jako „raster”, co nie jest poprawne i nie pomaga w krigingu; zobacz tutaj, aby uzyskać lepszy pomysł na tworzenie regularnej siatki i interpolację danych do tej siatki.
Simbamangu
3

Pakiet plotKML ma funkcję o nazwie vect2rast. Ta funkcja zasadniczo rozszerza rasterizefunkcję dostępną w pakiecie rastrowym. Zaletą vect2rast; polega jednak na tym, że nie wymaga wprowadzania danych ze strony użytkownika, tj. automatycznie określa rozmiar komórki siatki i ramki granicznej na podstawie właściwości zestawu danych wejściowych. Rozmiar komórki siatki jest szacowany na podstawie gęstości / rozmiaru obiektów na mapie ( nndistfunkcja w pakiecie spatstat).

library(plotKML)
Rast2 <- vect2rast(pts)

# for large data sets use SAGA GIS:
Rast2 <- vect2rast(pts, method = "SAGA")
HassanSh__3571619
źródło