RGIS:查找多边形边界

3

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

我的问题类似于12,只不过我需要在R中完成。后一个相似的问题提到了使用pythonShapely包的解决方案。在R中,与Shapely相对应的是rgeos。尽管如此,我还没有找到使用rgeos的解决方案。


enter image description here

注意:用于说明的带边界的shapefile是使用类似问题1的ArcGIS解决方案生成的。现在我需要在R中做同样的事情。


将此问题发布在gis.stackexchange.com上,您将更快地获得答案。 - CuriousBeing
@MaxPD 我考虑过这个问题。但我真的需要一个针对 R 的解决方案。所以,我认为在 Stack Overflow 上 R 社区更大。 - ikashnitsky
你的“期望输出”中错漏了保加利亚和罗马尼亚之间的边界!可能是因为这里的边界线位于多瑙河的两岸,所以它们不重叠。当你放大数据时,你可能会注意到这一点。要注意这个问题... - Spacedman
@Spacedman 抱歉,我在帖子中没有提到。这正是我需要再次生成边界shapefile的原因。在我的研究中,我首先决定排除罗马尼亚,因为欧盟统计局发布了不协调的人口数据(罗马尼亚在2011年进行了一次普查,注册了低估的人口下降)。后来,我自己进行了数据协调,现在我需要包含有边界的罗马尼亚。抱歉,我认为这对本帖子不是非常相关。但是感谢您指出这一点。我应该更新问题吗? - ikashnitsky
你还有一些非欧盟国家被标为灰色(挪威、瑞士等),但没有红色边框!我怀疑它使用了欧盟边界,但地图是欧洲或其他什么东西,但如果我的答案能够满足你的需求,那我会保留它。即使地图不完全正确,我认为我们从问题的文本中理解了所需的内容! - Spacedman
@Spacedman 是的。我在重新绘制具有新边界的地图时犯了一个愚蠢的错误。我已经修复了这个问题。非常感谢你的帮助! - ikashnitsky
1个回答

7
您需要的是从已溶解区域的线集合和区域本身的线之间的差异。在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)

enter image description here


非常方便的方式!非常感谢! - ikashnitsky
它可以工作。虽然,我猜ArcGIS的速度快了20倍。 - ikashnitsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接