R/GIS:如何通过lat-long边界框对shapefile进行子集化?

use*_*432 7 gis r

我想将一个shapefile(将.shp和相关文件在这里)子集化为另一个由一组坐标限定的,例如在long [80,90]和lats [20,30]之间,然后将其写为另一个shape文件.如果我使用maptools包裹:

df = readShapeLines("/path/asia_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)
Run Code Online (Sandbox Code Playgroud)

但我不能似乎能够强制成这样SpatialLines,其可通过以下方式导出的数据帧writeSpatialShape()maptools.我一直收到这个错误:Error in PolySet2SpatialLines(df_sub) : unknown coordinate reference system.当然,我遗漏了一些非常基本的东西,应该有一种通过地理坐标对地理数据进行分类的简单方法?

joh*_*nes 6

您可以尝试以下方法:

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")
Run Code Online (Sandbox Code Playgroud)