2012-03-22 17 views
6

Quiero subconjuntar un shapefile (los archivos .shp y asociados son here) en otro delimitado por un conjunto de coordenadas, por ejemplo entre longs [80,90] y lats [20,30], y luego escribir esto como otro shapefile Si utilizo el paquete maptools:R/GIS: ¿Cómo subconjuntar un shapefile por un cuadro delimitador de latitud larga?

df = readShapeLines("/path/asia_rivers.shp")

y luego miro a la estructura del archivo con as.data.frame(df), no puedo encontrar ninguna manera obvia de subsetting por coordenadas. Yo puedo utilizar el paquete PBSmapping al subconjunto:

df = importShapefile("/path/asia_rivers.shp") 
df_sub = subset(df, X>=80 & X<=90 & Y >=20 & Y <=30) 

pero entonces me parece que no puede ser capaz de obligar a esto en un marco de datos que pueden ser exportados a través de writeSpatialShape() en maptools. Sigo recibiendo este error: Error in PolySet2SpatialLines(df_sub) : unknown coordinate reference system. Seguramente me está perdiendo algo muy básico y debería haber una manera fácil de subconjunto de geo-datos por coordenadas geográficas.

Respuesta

6

puede probar con el siguiente:

library(rgeos) 
rivers <- readWKT("MULTILINESTRING((15 5, 1 20, 200 25), (-5 -8,-10 -8,-15 -4), (0 10,100 5,20 230))") 
bbx <- readWKT("POLYGON((0 40, 20 40, 20 0, 0 0, 0 40))") 

rivers.cut <- gIntersection(rivers, bbx) 

plot(rivers, col="grey") 
plot(bbx, add=T, lty=2) 
plot(rivers.cut, add=T, col="blue") 
+0

El problema no está en el trazado, pero en subjuegos en un formato que puede ser exportado como un archivo de formas. – user702432

+0

¿Intentó leer su archivo shape, lo cruzó con un recuadro delimitador apropiado utilizando gIntersection y luego lo exportó, p. Ej. con maptools :: writeShapeLines? Solo tracé esto para mostrarte que las líneas se han recortado con datos ficticios, ya que el archivo de formas que proporcionaste no es válido (un shapefile consiste en más que un simple archivo * .shp; http://en.wikipedia.org/ wiki/Shapefile). – johannes

+0

Hola jmsigner ... Lo siento, mi mal. Cambié el enlace a la carpeta comprimida que contiene los archivos originales .dbf, .lyr, .prj, .sbn, .sbx, .shp y .shx. Gracias. – user702432

2

Sé que esto ha sido contestada, pero creo que se puede hacer exactamente lo que desee mediante PBSmapping. PBSmapping tiene una función para recortar Polysets (para datos de polígonos y líneas) para que pueda probar:

df <- importShapefile("/path/asia_rivers.shp") 
df_sub <- clipLines(df, xlim = c(80 , 90) , ylim = c(20 , 30), keepExtra = TRUE) 
dfSL <- PolySet2SpatialLines(df_sub) 

El extra de fortaleza le permite mantener las columnas no estándar cuando lo hace el recorte (supongo que para los datos de atributos).

1

Otra forma:

library(raster) 

s <- shapefile("/path/asia_rivers.shp") 

sub <- crop(s, extent(80, 90, 20, 30)) 

shapefile(sub, 'cropped_rivers.shp') 
Cuestiones relacionadas