3

为了选择/识别 shapefile 的边界多边形,我想使用一个能够选择/识别与源多边形共享线段的多边形的函数。

有数字:

我有这种形状文件:

在此处输入图像描述

使用gUnionCascadedfrom rgeospackage,我有第二个带有“轮廓多边形”的 shapefile

在此处输入图像描述

现在我正在寻找一个可以选择/识别边界多边形(图中阴影)的函数,即第一个 shapefile 的多边形与第二个 shapefile 的多边形共享一条线段。:

在此处输入图像描述

4

2 回答 2

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 的多边形的边界与一个点相交

最后两个案例是我正在寻找的边界多边形。我有他们的身份证:

poly.border <- which(x %in% c("2FF10F212","2FF11F212"))
于 2013-11-05T09:58:57.390 回答
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...`

你可以在这里和这里看到它:

IHO地图

IHO 斑点

于 2015-05-18T15:34:18.590 回答