为了选择/识别 shapefile 的边界多边形,我想使用一个能够选择/识别与源多边形共享线段的多边形的函数。
有数字:
我有这种形状文件:
使用gUnionCascaded
from rgeos
package,我有第二个带有“轮廓多边形”的 shapefile
现在我正在寻找一个可以选择/识别边界多边形(图中阴影)的函数,即第一个 shapefile 的多边形与第二个 shapefile 的多边形共享一条线段。:
正如 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 的多边形的边界与一个点相交
最后两个案例是我正在寻找的边界多边形。我有他们的身份证:
poly.border <- which(x %in% c("2FF10F212","2FF11F212"))
我想支持上述解决方案,这对我帮助很大。要为 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...`
你可以在这里和这里看到它: