我想将一个shapefile(.shp和相关文件是here)子集化为由一组坐标限定的另一个,例如long [80,90]和lats [20,30]之间,然后将其写为另一个shapefile。如果我使用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)
但是我似乎无法将此强制转换为SpatialLines
数据框,可以通过writeSpatialShape()
中的maptools
导出。我一直收到这个错误:Error in PolySet2SpatialLines(df_sub) : unknown coordinate reference system
。当然,我遗漏了一些非常基本的东西,应该有一种通过地理坐标对地理数据进行分类的简单方法吗?
答案 0 :(得分: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")
答案 1 :(得分:2)
我知道这已经得到了解答,但我认为您可以使用PBSmapping
完全按照自己的意愿行事。 PBSmapping
具有剪辑Polysets(对于多边形和线条数据)的功能,因此您可以尝试:
df <- importShapefile("/path/asia_rivers.shp")
df_sub <- clipLines(df, xlim = c(80 , 90) , ylim = c(20 , 30), keepExtra = TRUE )
dfSL <- PolySet2SpatialLines( df_sub )
keep extra允许您在进行剪辑时保留非标准列(我假设属性数据)。
答案 2 :(得分:2)
另一种方式:
library(raster)
s <- shapefile("/path/asia_rivers.shp")
sub <- crop(s, extent(80, 90, 20, 30))
shapefile(sub, 'cropped_rivers.shp')