R/GIS:如何用一个lat-long边界框来子集一个shapefile?

R/GIS:如何用一个lat-long边界框来子集一个shapefile?,r,gis,R,Gis,我想将一个shapefile(即.shp和相关文件)子集到另一个以一组坐标为边界的shapefile中,比如在long[80,90]和lats[20,30]之间,然后将其作为另一个shapefile写入。如果我使用maptools软件包: df=readshapeline(“/path/asia\u rivers.shp”) 然后看一下文件的结构,as.data.frame(df),我找不到任何明显的坐标子集方法。我可以使用PBSmapping包来子集: df = importShapefile

我想将一个shapefile(即.shp和相关文件)子集到另一个以一组坐标为边界的shapefile中,比如在long[80,90]和lats[20,30]之间,然后将其作为另一个shapefile写入。如果我使用
maptools
软件包:

df=readshapeline(“/path/asia\u rivers.shp”)

然后看一下文件的结构,
as.data.frame(df)
,我找不到任何明显的坐标子集方法。我可以使用
PBSmapping
包来子集:

df = importShapefile("/path/asia_rivers.shp")
df_sub = subset(df, X>=80 & X<=90 & Y >=20 & Y <=30)
df=importShapefile(“/path/asia\u rivers.shp”)

df_sub=subset(df,X>=80&X=20&Y您可以尝试以下方法:

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")
库(rgeos)

rivers我知道这已经得到了回答,但我认为您可以使用
PBSmapping
PBSmapping
具有剪裁多边形集(用于多边形和线数据)的功能,因此您可以尝试:

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

library(raster)

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

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

shapefile(sub, 'cropped_rivers.shp')
库(光栅)

s问题不在于打印,而在于以可导出为形状文件的格式进行子集设置。您是否尝试读取形状文件,使用gIntersection将其与适当的边界框相交,然后将其导出,例如使用maptools::writeShapeLines?我打印它只是为了向您显示已使用虚拟数据修剪了线,since您提供的形状文件无效(形状文件不仅仅包含*.shp文件;).Hi jmsigner…抱歉,我的错。我更改了压缩文件夹的链接,其中包含原始的.dbf、.lyr、.prj、.sbn、.sbx、.shp和.shx文件。谢谢。嗨,鉴于shapefile的大小,我将在GIS或gdal中使用ogr2ogr预处理数据。以下几秒钟在我的计算机上完成:ogr2ogr-spat 80 20 90 30 asisa_rivers_cut.shp asia_rivers.shpOh boy!看来这将是一次漫长的步行:-)谢谢你给我的金节小费,jmsigner。有一件事。。。您能告诉我为什么在执行gIntersection(SpatialPolygon,SpatialLinesDataFrame)时,结果只是类SpatialLines(不能使用writeSpatialShape()导出)?