【问题标题】:r gis: find borders between polygonsr gis:查找多边形之间的边界
【发布时间】:2016-06-18 02:42:25
【问题描述】:

拥有一个多边形 shapefile,我需要生成一个仅包含多边形之间公共边界的折线 shapefile(见图)。

我的问题类似于12,只是我需要在R 中执行此操作。后一个类似问题是指使用Shapely 包为python 的解决方案。 RShapely 的类似物是 rgeos。不过,我自己找不到rgeos 的解决方案。


注意:用于插图的带有边框的 shapefile 是在 ArcGIS 中使用类似问题 1 的解决方案生成的。现在我需要在 R 中执行相同的操作。

【问题讨论】:

  • 在 gis.stackexchange.com 上发布这个问题,你会更快得到答案
  • @MaxPD 我考虑过。但我真的需要一个R 特定的解决方案。所以,我想,R 社区在 SO 更大
  • 您的“期望输出”已经错过了保加利亚和罗马尼亚之间的边界!边界线可能在这里是多瑙河的相对两侧,因此它们不会重叠。当您放大数据时,您可能会看到这一点。需要注意的事情......
  • @Spacedman 抱歉,我没有在帖子中提到这一点。这就是我需要再次生成边框 shapefile 的确切原因。在我的研究中,我首先决定排除罗马尼亚,因为欧盟统计局公布的人口数据不统一(2011 年罗马尼亚的人口普查显示人口下降被低估了)。后来,我自己做了数据协调,现在我需要将罗马尼亚包括在内。抱歉,我想,这与帖子不太相关。但感谢您指出这一点。我应该更新问题吗?
  • 您仍然有一些非欧盟国家(挪威、瑞士等)被绘制成灰色,但没有红色边框!我怀疑它使用了欧盟范围,但地图是欧洲或其他东西,但如果我的回答给了你想要的东西,那么我会留下它。我认为即使地图并不完全正确,我们也能从问题的文本中理解想要的内容!

标签: r gis rgdal


【解决方案1】:

您想要的是来自溶解区域的线集与区域本身的线之间的差异线。在rgeos 包中,gUnaryUnion 将溶解多边形,gDifference 将减去。

对于我的小型欧盟子集eusub,我可以这样做:

library(rgeos); library(sp)
borders = gDifference(
   as(eusub,"SpatialLines"),
   as(gUnaryUnion(eusub),"SpatialLines"),
   byid=TRUE)

注意需要将多边形转换为线,因为输出将是线。

然后看这个:

plot(eusub)
plot(borders, col="red",lwd=2,add=TRUE)

【讨论】:

  • 很方便的方法!非常感谢!
  • 它有效。不过,我猜 ArcGIS 的工作速度要快 20 倍
猜你喜欢
  • 1970-01-01
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多