Qual è il trucco spaziale R più utile?


44

R sta diventando uno strumento piuttosto potente per la gestione e l'analisi dei dati spaziali. Ho imparato alcune cose utili attraverso domande come queste alla SO e ho pensato che potesse essere utile avere qualcosa di simile, ma più "spazialmente" orientato.

Puoi condividere alcuni suggerimenti e trucchi spaziali sulla R che hai trovato utili?


5
wiki della comunità?
Rilasciato il


ACK. Grazie. Credo di averlo visto, ma è facile dimenticarlo.
Relet


Penso che questo dovrebbe essere anche un wiki della comunità in quanto è diventato una specie di elenco.
RK,

Risposte:


38

Questo non è tanto un trucco quanto è la spplot()funzionalità integrata elegante. spplot()La capacità di ridimensionare i campioni di legenda (per abbinare gli intervalli di interruzione della classificazione) serve come utile strumento pedagogico quando si discute della distribuzione dei dati degli attributi e dei tipi di classificazione. La combinazione di grafici di distribuzione cumulativa con le mappe aiuta in questo sforzo.

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

Gli studenti devono solo modificare alcuni parametri dello script per esplorare i tipi di classificazione e gli effetti di trasformazione dei dati. Questa è di solito la loro prima incursione in R in quello che è un corso prevalentemente incentrato su ArcGIS.

Ecco uno snippet di codice:

library(rgdal) # Loads SP package by default
NE = readOGR(".", "NewEngland") # Creates a SpatialPolygonsDataFrame class (sp)

library(classInt)
library(RColorBrewer)
pal = brewer.pal(7,"Greens")
brks.qt = classIntervals(NE$Frac_Bach, n = 7, style = "quantile")
brks.jk = classIntervals(NE$Frac_Bach, n = 7, style = "jenks")
brks.eq = classIntervals(NE$Frac_Bach, n = 7, style = "equal")

# Example of one of the map plots
spplot(NE, "Frac_Bach",at=brks.eq$brks,col.regions=pal, col="transparent",
       main = list(label="Equal breaks"))
# Example of one of the cumulative dist plots
plot(brks.eq,pal=pal,main="Equal Breaks")

Rif: Analisi dei dati spaziali applicata con R (R. Bivand, E Pebesma e V. Gomez-Rubio)


1
molto bello! Sembra molto utile.
djq

2
PolyGeo fa schifo come moderatore
Below the Radar,

28

EDIT: nota che questo non funziona più 24-10-2018, a causa di nuovi requisiti per le fonti di Google Maps.

Sono stato abbastanza felice di trovare il pacchetto dismo con geocoding e download di google maps:

library(dismo)
x <- geocode('110 George Street, Bathurst, NSW, Australia')
a <- x[5:8] + c(-0.001, 0.001, -0.001, 0.001)
e <- extent(as.numeric(a))
g <- gmap(e, type = "satellite")

plot(g)

Questo è in R 2.12.0 su Windows, è banale installare dismo e le sue dipendenze lì, non sono sicuro su altri sistemi.

testo alternativo


1
Questo sembra molto utile, tuttavia, sto riscontrando problemi con l' e <- extent(x[4:7] + c(-0.001, 0.001, -0.001, 0.001))annuncio di linea e ricevo un messaggio di errore Error: c("x", "y") %in% names(x) is not all TRUE. x[4:7]sembra bene però; qualche idea su quale potrebbe essere il problema?
DJ

Sì, hai bisogno di un esempio riproducibile
mdsumner,

Sto cercando di riprodurre l'esempio in questa risposta e non funziona. x <- geocode('110 George Street, Bathurst, NSW, Australia')ritorna ZERO_RESULTSper esempio, e quando uso un esempio che restituisce un lat / long, la funzionee <- extent(x[4:7] + c(-0.001, 0.001, -0.001, 0.001)) also fails.
djq

Potrebbe esserci un modo più elegante per farlo, ma extentrichiede un vettore di numeri. Quindi funziona e <- extent(c(x[,4], x[,5], x[,6], x[,7]) + c(-0.001, 0.001, -0.001, 0.001)).
djq

2
Il seguente funziona anche:e <- extent(as.numeric(x[4:7]) + c(-0.001, 0.001, -0.001, 0.001))
snth


11

Inoltre non è un trucco, ma qui ci sono alcune risorse / esempi che ho raccolto

Un esempio di tracciamento di più piccole mappe multiple di dati Areal in R usando il pacchetto reticolare.

Ci sono alcune domande su StackOverflow che chiedono di mappare e R, e qui ce n'è una con un buon esempio. Vorrei esaminare anche le altre risposte e le risorse che forniscono (oltre a cercare altri esempi) su SO.

Un collegamento diverso allo stesso gruppo r-sig-geo che Brad ha già dato. È molto attivo e Roger Bivand risponde alle domande praticamente ogni giorno sul gruppo. Entrambi relativi alla programmazione e all'analisi statistica.

Oltre a dare un'occhiata alla pagina spaziale del cran, suggerirei anche di dare un'occhiata alla pagina Spatstat gestita da Adrian Baddeley. Un sacco di esempi, un corso e un e-book di prossima pubblicazione. (Al momento ho seguito il corso spatstat e penso che sia un'introduzione molto più delicata del libro Bivand).

Non è una risorsa gratuita, ma per chiunque sia interessato al RI, ti consigliamo di dare un'occhiata a Usa R! serie di Springer. Hanno un libro Applied Spatial Data Analysis con R direttamente pertinente (anche il libro A Beginner's Guide to R è il mio libro di apprendimento suggerito R).

Un e-book gratuito, A Practical Guide to Geostatistical Mapping (Hengl 2009), contiene esempi di geostati applicati in R, GRASS e Google Earth (KML).

Se trovo più buoni esempi continuerò ad aggiornare (spero che anche altre persone pubblichino buoni esempi!)


Grazie Andy. Mi piace l'esempio reticolare. Totalmente d'accordo su Bivand et al. libro - grande risorsa.
Radek,

10

Per l'analisi raster il pacchetto raster è estremamente potente. Oltre al manuale standard ci sono alcune vignette per iniziare.


Per tutto ciò che il pacchetto raster non può gestire perché funziona con la RAM, potresti considerare gdal_Utlis che fornisce la funzione wrapper per l'uso di gdal che ti consente di elaborare file di grandi dimensioni.
Joaoal,

7

Non sono un utente PostGIS, ma dopo aver suggerito poligoni Voronoi per una domanda del vicino più vicino , ho fatto un po 'di ricerca. Ho scoperto che con R puoi creare poligoni Voronoi per PostGIS . Sono impressionato.


Sono sicuro che ci sono modi più semplici di quello che sto per suggerire, ma è possibile creare tesselazioni nel pacchetto spatstat e quindi convertire tessquell'oggetto in un spoggetto usando questa funzione fornita da Adrian Baddeley. Se lo spdesideri, puoi esportarlo da uno shapefile da un oggetto.
Andy W,



4

Con questa funzione, puoi creare facilmente unioni spaziali, ma solo se tutte le aree sono riempite da poligoni.

library(rgeos)
library(sp) 
library(maptools)
library(rgdal)
library(sp)
xy.map <- readShapeSpatial("http://www.udec.cl/~jbustosm/points.shp")
manzana.map <- readShapeSpatial("http://www.udec.cl/~jbustosm/manzanas_from.shp" )

IntersectPtWithPoly <- function(x, y) { 
# Extracts values from a SpatialPolygonDataFrame with SpatialPointsDataFrame, and appends table (similar to 
# ArcGIS intersect)
# Args: 
#   x: SpatialPoints*Frame
#   y: SpatialPolygonsDataFrame
# Returns:
# SpatialPointsDataFrame with appended table of polygon attributes

  # Set up overlay with new column of join IDs in x
  z <- overlay(y, x)

  # Bind captured data to points dataframe
  x2 <- cbind(x, z)

  # Make it back into a SpatialPointsDataFrame 
  # Account for different coordinate variable names 
  if(("coords.x1" %in% colnames(x2)) & ("coords.x2" %in% colnames(x2))) {
    coordinates(x2) <- ~coords.x1 + coords.x2  
  } else if(("x" %in% colnames(x2)) & ("x" %in% colnames(x2))) {
    coordinates(x2) <- ~x + y 
  }

  # Reassign its projection if it has one
  if(is.na(CRSargs(x@proj4string)) == "FALSE") {
    x2@proj4string <- x@proj4string  
  }
  return(x2)
}


test<-IntersectPtWithPoly (xy.map,manzana.map)

3

Esempio di analisi del motivo a punti:

#Load library
library(spatstat) 
#create some coordinates        
x=c(78,120,150,17,20,402) 
#prepare the window range      
y=c(70,103,100,205,200,301)
win=owin(range(x),range(y)) 
#create the point pattern
p <- ppp(x,y,window=win)
#Plot it
plot(p) 

Crea un motivo a punti e lo rappresenta. Il pacchetto spatstat ha una serie di funzioni per l'analisi dei dati geografici. Ecco alcuni tutorial di spatstat :


1

Non sono sicuro che questo si qualifichi come un "trucco", ma sono un grande fan della combinazione del acspacchetto (per la selezione dei dati del censimento degli Stati Uniti) e del leafletpacchetto (per la creazione di mappe javascript interattive che possono essere ospitate online).

Questo tutorial fa un ottimo lavoro illustrando il vantaggio di usare questi due pacchetti insieme.

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.