【问题标题】:Looking for a function allowing to select/identify polygon that share a line segment with a source polygon寻找允许选择/识别与源多边形共享线段的多边形的功能
【发布时间】:2013-11-05 08:43:28
【问题描述】:

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

有数字:

我有这种形状文件:

使用来自rgeos 包的gUnionCascaded,我有第二个带有“轮廓多边形”的shapefile

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

【问题讨论】:

  • 看看非常有区别的(但最初很难理解)rgeos::gRelate() 函数。 DE-9IM Wikipedia page 对理解如何使用它非常有帮助,一些 SO 帖子可能会展示它的使用。 Here's one example of rgeos::gRelate() 在行动中。
  • 特别是,您希望组件多边形与大多边形的外部共享边界,并且其内部与大多边形的内部重叠。
  • @JoshO'Brien Thx,我用过你的方法,效果很好。我不知道 DE-9IM 代码,看起来很有趣。
  • @JoshO'Brien "grock" ?嗯?我不认为海因莱因自己会摸“grock”:-)
  • @CarlWitthoft -- 哈!在 +/- 梦游时回答是否算作借口?现在开始重复 50 次:“glock, grok; glock, grok; glock, grock; ...” ;-)

标签: r select gis shapefile


【解决方案1】:

按照 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"))

【讨论】:

    【解决方案2】:

    我想支持上述解决方案,这对我帮助很大。要为 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...`
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      • 2011-11-27
      相关资源
      最近更新 更多