为了选择/识别shapefile的边框多边形,我想使用一个能够选择/识别与源多边形共享线段的多边形的函数。
有数字:
我有这种shapefile:
使用gUnionCascaded
包中的rgeos
,我有第二个带有“轮廓多边形”的shapefile
现在我正在寻找一种能够选择/识别边界多边形(图中阴影)的函数,即第一个shapefile的多边形,它与第二个shapefile的多边形共享一个线段。 :
答案 0 :(得分:3)
根据Josh O'Brien的提议,我使用了rgeos::gRelate()
函数。
我得到3个DE-9IM案例:
x <- gRelate(shapefile.1, shapefile.2, byid = TRUE)
table(x)
2FF10F212 2FF11F212 2FF1FF212
63 2470 174495
生成的DE-9IM字符串代码可以解释如下:
1)2FF1FF212:表示第一个shapefile中不与第二个shapefile的多边形边界相交的多边形
2)2FF11F212:表示第一个shapefile中与第二个shapefile的多边形的边界相交的多边形与一行
3)2FF10F212:表示第一个shapefile中与第二个shapefile的多边形边界相交的多边形与点
最后两个案例是我正在寻找的边界多边形。 我有他们的ID:
poly.border <- which(x %in% c("2FF10F212","2FF11F212"))
答案 1 :(得分:1)
我想提出上述解决方案,这对我帮助很大。要在DE-9IM解决方案中添加更多内容(请参阅DE-9IM上的维基百科页面),请参阅下面的应用程序 - 在这种情况下,我如何使用它来分配没有边界任何至少有一个CAFO的县的县/ IHO(集中动物饲养作业/工业生猪作业)中。也就是说,将下面的蓝色县与超级形状进行比较(就像使用gUnionCascaded的原始提问者一样),并且该向量用于对noIHO县进行分组。
IHOblob = gUnionCascaded(hasIHOcounties)
plot(IHOblob)
touch.v = gRelate(noIHO.counties, IHOblob, byid = T)
counties.not.touching<-(touch.v %in% c("FF2FF1212")) #DE-9IM is super cool.
notouchIHO.counties = noIHO.counties[counties.not.touching,]
plot(notouchIHO.counties, co="light blue", add=T)
invisible(text(getSpPPolygonsLabptSlots(notouchIHO.counties),
labels=as.character(notouchIHO.counties$NAME), cex=0.4))
#wish I had a better way to label polys than above...`
你可以在这里和这里看到它: