Conversione dei dati dei punti in frame di dati con griglia per l'analisi dell'istogramma utilizzando R?


14

Sono molto nuovo nell'uso dei dati GIS e ho avuto solo una modesta esperienza con R. Ho letto su come analizzare i dati spaziali usando il libro PDF spatial-analyst.net, quindi non sono completamente perso, ma ho pensato di poter descrivere il mio problema e le persone potrebbero suggerire idee.

Ho un set di dati con circa 2000 misurazioni a diverse coordinate lat / long, anche se probabilmente suddividerò questo set di dati poiché i dati sono stati raccolti in 3 anni e le condizioni sono cambiate nel tempo. Chiamiamo la variabile misurata "IP".

Voglio creare una mappa di IP nell'intera area in questione usando Kriging o qualche altro metodo di interpolazione sui dati di esempio. Quindi voglio creare un istogramma che misura la quantità di terra in vari bucket IP. Avrò anche bisogno di creare un istogramma che mostri il numero di campioni in ciascun bucket (nota che un campione potrebbe avere un IP effettivo superiore o inferiore rispetto a quello che kriging prevede per la sua terra).

Seguo come caricare i dati in uno SpatialPointsDataFrame ed eseguire un'analisi kriging, dove ho problemi è come convertire quei dati in un frame di dati con griglia in modo da poter eseguire l'analisi dell'istogramma.

Qualche suggerimento per convertire i punti in griglie?

Risposte:


12

Hai ragione ... è abbastanza facile! Il pacchetto "raster" presenta alcuni modi piuttosto semplici di gestire e creare raster.

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) 

È possibile assegnare la dimensione e la risoluzione della griglia in diversi modi: dare un'occhiata alla documentazione del pacchetto raster.

I valori delle celle raster da rasterizza possono essere calcolati con una funzione - "media" nell'esempio sopra. Assicurati di inserire questo: altrimenti usa solo il valore di IP dall'ultimo punto in cui si imbatte!


Da un 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)

Ehi, questo è molto utile, ma come sarebbe il codice se iniziassi con i punti in un semplice CSV con lat / longs piuttosto che con un file di forma? Le colonne nel CSV sarebbero IP, Lat, Long, ecc, ecc.
Ecc

Hai indicato che hai già caricato i dati in uno SpatialPointsDataFrame ... che è esattamente ciò che ptsè nel mio esempio sopra. Basta eseguire il codice sull'oggetto SpatialPointsDataFrame!
Simbamangu,

4
Questa risposta, sebbene eccellente, non sembra rispondere a ciò che è necessario. (Sembra invece offrire una soluzione a gis.stackexchange.com/questions/20018 ). La sfida è quella di interpolare circa 2000 punti, non solo assegnare i loro valori alle celle raster. Dato che l'OP afferma di aver già "eseguito un'analisi kriging", questa domanda si riduce all'estrazione dei valori di un raster (diciamo, r) da utilizzare in una histprocedura simile, che è semplicemente una questione di un'espressione simile hist(getValues(r)).
whuber

@whuber - Sembra che OP chieda "dove sto avendo problemi è come convertire quei dati in un frame di dati con griglia in modo che io possa fare l'analisi dell'istogramma ... qualsiasi suggerimento per convertire punti in griglie" come la vera domanda, e sa come per creare uno SpatialPointsDataFrame ed eseguire il kriging. Ma hai ragione, sembra essere un duplicato di 20018 (tranne per l'input con griglia).
Simbamangu,

Mi scuso, @ user1080253 ... Ho letto 'grid' come 'raster' che non è corretto e non è utile per kriging; vedere qui per un'idea migliore sulla creazione di una griglia regolare e sull'interpolazione dei dati su quella griglia.
Simbamangu,

3

Il pacchetto plotKML ha una funzione chiamata vect2rast. Questa funzione sostanzialmente estende la rasterizefunzione disponibile nel pacchetto raster. Il vantaggio di vect2rast; tuttavia, è che non richiede input dal lato dell'utente, ovvero determina automaticamente la dimensione della cella della griglia e il rettangolo di selezione in base alle proprietà del set di dati di input. La dimensione della cella della griglia viene stimata in base alla densità / dimensione delle caratteristiche nella mappa ( nndistfunzione nel pacchetto spatstat).

library(plotKML)
Rast2 <- vect2rast(pts)

# for large data sets use SAGA GIS:
Rast2 <- vect2rast(pts, method = "SAGA")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.