¿Cuál es el truco espacial R más útil?

44

R se está convirtiendo en una herramienta bastante fuerte para manejar y analizar datos espaciales. Aprendí algunas cosas útiles a través de preguntas como estas en SO y pensé que podría ser útil tener algo similar, pero más orientado 'espacialmente'.

¿Puedes compartir algunos consejos y trucos espaciales de R que te resultaron útiles?

revs radek
fuente
55
wiki de la comunidad?
relet
ack. Gracias. Creo que vi esa, pero es fácil de olvidar.
relet
3
También: rspatialtips.org.uk
radek
Creo que esto también debería ser un wiki de la comunidad, ya que se ha convertido en una especie de lista.
RK

Respuestas:

38

Esto no es tanto un truco como lo es spplot()la ingeniosa funcionalidad incorporada. spplot()La capacidad de escalar muestras de leyenda (para que coincida con los rangos de ruptura de clasificación) sirve como una herramienta pedagógica útil cuando se discute la distribución de datos de atributos y los tipos de clasificación. La combinación de parcelas de distribución acumulativa con los mapas ayuda en este esfuerzo.

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Los estudiantes solo necesitan modificar algunos parámetros de script para explorar los tipos de clasificación y los efectos de transformación de datos. Esta suele ser su primera incursión en R en un curso centrado principalmente en ArcGIS.

Aquí hay un fragmento de código:

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")

Ref: Análisis de datos espaciales aplicados con R (R. Bivand, E Pebesma y V. Gomez-Rubio)

MannyG
fuente
1
¡muy genial! Eso se ve muy útil.
djq
2
PolyGeo apesta como moderador
debajo del radar
28

EDITAR: tenga en cuenta que esto ya no funciona 2018-10-24, debido a los nuevos requisitos para las fuentes de mapas de Google.

Estaba bastante feliz de encontrar el paquete de dismo con geocodificación y descarga de 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)

Eso está en R 2.12.0 en Windows, es trivial instalar dismo y sus dependencias allí, no estoy seguro en otros sistemas.

texto alternativo

mdsumner
fuente
1
Esto parece muy útil; sin embargo, me encuentro con problemas con el e <- extent(x[4:7] + c(-0.001, 0.001, -0.001, 0.001))anuncio de línea y recibo un mensaje de error Error: c("x", "y") %in% names(x) is not all TRUE. x[4:7]parece bien sin embargo; alguna idea sobre cuál podría ser el problema?
DJ
Sí, necesita un ejemplo reproducible
mdsumner el
Estoy tratando de reproducir el ejemplo en esta respuesta y no funciona. x <- geocode('110 George Street, Bathurst, NSW, Australia')regresa ZERO_RESULTSpor ejemplo, y cuando se utiliza un ejemplo que devuelve una latitud / longitud, la funcióne <- extent(x[4:7] + c(-0.001, 0.001, -0.001, 0.001)) also fails.
DJQ
Puede haber una forma más elegante de hacer esto, pero extentrequiere un vector de números. Entonces esto funciona e <- extent(c(x[,4], x[,5], x[,6], x[,7]) + c(-0.001, 0.001, -0.001, 0.001)).
DJ
2
Lo siguiente también funciona:e <- extent(as.numeric(x[4:7]) + c(-0.001, 0.001, -0.001, 0.001))
2011
11

Tampoco es un truco, pero aquí hay algunos recursos / ejemplos que he recopilado

Un ejemplo de trazar pequeños mapas múltiples de datos de Areal en R usando el paquete de celosía.

Hay algunas preguntas sobre StackOverflow sobre mapeo y R, y aquí hay una con un buen ejemplo. Me gustaría ver las otras respuestas y los recursos que ofrecen (así como buscar algunos ejemplos más) en SO también.

Un enlace diferente al mismo grupo r-sig-geo que Brad ya dio. Es muy activo, y Roger Bivand responde preguntas prácticamente todos los días en el grupo. Ambos relacionados con la programación y el análisis estadístico.

Además de revisar la página espacial del cráneo , también sugeriría que revise específicamente la página Spatstat mantenida por Adrian Baddeley. Muchos ejemplos, un curso y un próximo libro electrónico. (En este momento he estado siguiendo el curso de statstat , y creo que es una introducción mucho más amable que el libro Bivand).

No es un recurso gratuito, pero para cualquier persona interesada en RI, sugeriría que eche un vistazo a Use R! serie de Springer. Tienen un libro Análisis de datos espaciales aplicados con R directamente pertinente (también el libro A Beginner's Guide to R es mi libro de aprendizaje sugerido de R).

Un libro electrónico gratuito, Una guía práctica para el mapeo geoestadístico (Hengl 2009), tiene ejemplos de geoestatos aplicados en R, GRASS y Google Earth (KML).

Si encuentro más ejemplos buenos, continuaré actualizando (¡espero que otras personas publiquen buenos ejemplos también!)

Andy W
fuente
Gracias Andy Me gusta el ejemplo de celosía. Totalmente de acuerdo en Bivand et al. libro - gran recurso
radek
10

Para el análisis ráster, el paquete ráster es extremadamente poderoso. Además del manual estándar, hay algunas viñetas para comenzar.

johannes
fuente
Para todo lo que el paquete ráster no puede manejar porque funciona con RAM, puede considerar gdal_Utlis, que proporciona la función de envoltura para usar gdal, lo que le permite procesar archivos grandes.
joaoal
7

No soy un usuario de PostGIS, pero después de sugerir polígonos de Voronoi para una pregunta del vecino más cercano , hice un poco de búsqueda. Descubrí que con R, puedes crear polígonos Voronoi para PostGIS . Estoy impresionado.

Kirk Kuykendall
fuente
Estoy seguro de que hay formas más fáciles de lo que voy a sugerir, pero puede crear Tesselations en el paquete de statstat y luego convertir ese tessobjeto en un spobjeto utilizando esta función proporcionada por Adrian Baddeley. Desde un spobjeto, puede exportarlo a un shapefile si lo desea.
Andy W
5

Me topé con Spatial-Analyst.net . Muy informativo, completo y útil. Más específico a esta pregunta y en línea con algunas de las respuestas anteriores, vea esta página .

Sean Baskin
fuente
4

Con esta función, puede hacer fácilmente uniones espaciales, pero solo si todas las áreas están llenas de polígonos.

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)
José Bustos
fuente
3

Ejemplo de análisis de patrón de puntos:

#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 patrón de puntos y lo representa. El paquete spatstat tiene varias funciones para analizar datos geográficos. Aquí hay algunos tutoriales de statstat :

dimitris
fuente
1

No estoy seguro de si esto califica como un "truco", pero soy un gran admirador de la combinación del acspaquete (para seleccionar datos del Censo de EE. UU.) Y el leafletpaquete (para hacer mapas interactivos de JavaScript que se pueden alojar en línea).

Este tutorial hace un excelente trabajo ilustrando el beneficio de usar estos dos paquetes juntos.

Tiernan
fuente