¿Cómo abrir un shapefile en R?

52

Necesito abrir un shapefile de ArcMap en R para usarlo para un análisis geoestadístico adicional. Lo he convertido en un archivo de texto ASCII, pero en R se reconoce como data.frame. La función de coordenadas no funciona tan pronto como x e y se reconocen como no numéricas. ¿Podrías ayudar a lidiar con eso?

    
pregunta slava 20.01.2012 - 10:06

6 respuestas

45

Usa el shapefile directamente. Puede hacer esto fácilmente con los paquetes rgdal o sf , y leer la forma en un objeto. Para ambos paquetes, debe proporcionar dsn - la fuente de datos, que en el caso de un shapefile es el directorio , y layer - que es el nombre del shapefile, menos extensión:

# Read SHAPEFILE.shp from the current working directory (".")

require(rgdal)
shape <- readOGR(dsn = ".", layer = "SHAPEFILE")

require(sf)
shape <- read_sf(dsn = ".", layer = "SHAPEFILE")

(Para rgdal, en OSX o Linux no puede usar la abreviatura '~' para el directorio de inicio como el directorio de origen de datos ( dsn ); de lo contrario, aparecerá el mensaje "No se puede abrir el origen de datos"). El paquete sf no tiene esta limitación, entre otras ventajas.)

Esto le dará un objeto que es un marco de datos espacial * (puntos, líneas o polígonos) - los campos de la tabla de atributos son accesibles para usted de la misma manera que un marco de datos ordinario, es decir, shape$ID para el ID columna.

Si desea usar el archivo ASCII que importó, simplemente debe convertir los campos de texto (carácter) x e y en números, por ejemplo:

shape$x <- as.numeric(as.character(shape$x))
shape$y <- as.numeric(as.character(shape$y))
coordinates(shape) <- ~x + y

Editar 2015-01-18 : tenga en cuenta que rgdal es un poco mejor que maptools (que inicialmente sugerí aquí), principalmente porque lee y escribe información de proyección automáticamente.

Notas:

  • las funciones as.numeric(as.character()) anidadas: si su texto ASCII se leyó como un factor (probablemente), esto garantiza que obtenga los valores numéricos en lugar de los niveles de los factores.
  • rgdal y sf tienen formas confusas de acceder a diferentes tipos de archivos y bases de datos (por ejemplo, para un archivo GPX, el dsn es el nombre del archivo y las capas de los componentes individuales, como puntos de referencia, puntos de seguimiento, etc.) y lectura cuidadosa de ejemplos en línea es necesario
respondido por el Simbamangu 20.01.2012 - 15:23
19

Estoy de acuerdo con Simbamangu y se resolvió en términos de conservar el shapefile, pero quiero dirigir su atención específicamente a la biblioteca rgdal. Siga el enlace sugerido por gissolved para NCEAS y siga las instrucciones para rgdal. Puede ser difícil instalarlo en algunas máquinas, pero puede mejorar sustancialmente los resultados cuando se trata de proyecciones.

La biblioteca maptools es excelente y le permite definir la proyección para el shapefile que está leyendo, pero para hacerlo debe saber cómo especificar esa proyección en el formato proj4. un ejemplo podría ser algo como:

project2<-"+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=33 +lat_2=45 +x_0=0 +y_0=0 +ellps=GRS80    
   +datum=NAD83 +units=m +no_defs" #USA Contiguous Equidistant Conic Projection
data.shape<-readShapePoly("./MyMap.shp",IDvar="FIPS",proj4string=CRS(project2))
plot(data.shape)

Si quieres ir por esta ruta, te recomiendo enlace como el lugar para averiguar cómo se ve tu proyección en el formato proj4 . Si eso le parece una molestia, rgdal lo facilitará leyendo el archivo .prj del archivo ESRI shape (el archivo que contiene la definición de proyección de ESRI para el archivo shape. Para usar rgdal en el mismo archivo simplemente escriba:

library(rgdal)
data.shape<-readOGR(dsn="C:/Directory_Containing_Shapefile",layer="MyMap")
plot(data.shape)

Es probable que pueda pasar por alto sin hacer esto si solo está trabajando con un único shapefile, pero tan pronto como comience a buscar múltiples fuentes de datos o se superponga con Google Maps, será esencial mantener sus proyecciones en buen estado.

Para algunos tutoriales útiles sobre datos espaciales en R, incluyendo un montón de cosas sobre la importación y el trabajo con patrones de puntos, tengo algunos materiales antiguos del curso en línea en enlace (puede encontrar más talleres aquí ) Eso podría ayudarlo a ver cómo se comparan estos métodos en la práctica.

    
respondido por el csfowler 22.01.2012 - 07:16
16

Creo que no deberías convertir el shapefile en un ASCII, sino que debes usar el shapefile directamente con una de las extensiones espaciales. Aquí puede encontrar tres formas de leer (y escribir) un shapefile enlace . Es probable que el proyecto R-spatial también le interese enlace .

    
respondido por el Samuel 20.01.2012 - 10:21
9

Puede usar la biblioteca sf para abrir Shapefiles directamente en R . Es más rápido que la biblioteca rgdal , consulte aquí: Funciones simples para R y Primeras impresiones de sf - Las características simples R Package . También esos enlaces tienen más información sobre cómo usar sf .

# Load library
library('sf')

# Load shapefile
shapeName <- read_sf('~/path/to/file.shp')
    
respondido por el Guzmán 31.05.2017 - 16:57
9

Una solución fácil en 2017 es la función shapefile() en la biblioteca raster .

#Load library
library(raster)

#Load shapefile
shp <- shapefile("myshapefile")
    
respondido por el Christopher 31.05.2017 - 19:14
5

Una alternativa más es usar la biblioteca fastshp que ofrece ::

  

Rutinas para el manejo de grandes shapefiles ESRI (.shp). Esto incluye   Lectura, reducción de puntos y combinación de puntos para contener.   formas El objetivo principal de este paquete es proporcionar la velocidad para   Soporta grandes shapefiles (millones de puntos). Es varias ordenes de   maginute más rápido que algunos otros paquetes de shapefile.

Aquí está mi pregunta sobre SE sobre cómo usarlo con ggplot2:

¿Cómo puedo trazar el shapefile cargado a través de fastshp en ggplot2?

    
respondido por el radek 02.11.2012 - 14:57

Lea otras preguntas en las etiquetas