问题

假设我们有两个shapefile,它们应该无缝接壤。只是,他们没有。有没有一种方法可以迫使他们彼此无间隙地坚持下去?

r - 无缝地适合两个SF多边形-LMLPHP



具体情况

我有两个shapefile:一个用于欧洲地区-REG,另一个用于邻国-NEI。这两个shapefile均取自Eurostat repository,应该很好地结合在一起。但是差距很小。另外,我需要简化多边形,然后间隙真正变得明显。



我能想到的最好的

我尝试了几种方法,但没有成功。要达到我所期望的结果的唯一方法,需要执行以下步骤:


用我的shapefile之间的边界创建一条线sf;
从这条线创建一个缓冲多边形,其大小足以覆盖所有间隙;
将这个缓冲区加入并溶解到邻居的shapefile中-NEI;
使用NEI shapefile剪切扩展的REG


显然,这是一个相当笨拙的解决方法。

还有更好的方法吗?



this gist中的可复制示例



一个最小的例子

# install dev version of ggplot2
devtools::dev_mode()
devtools::install_github("tidyverse/ggplot2")

library(tidyverse)
library(sf)
library(rmapshaper)
library(ggthemes)


# load data
source(file = url("https://gist.githubusercontent.com/ikashnitsky/4b92f6b9f4bcbd8b2190fb0796fd1ec0/raw/1e281b7bb8ec74c9c9989fe50a87b6021ddbad03/minimal-data.R"))

# test how good they fit together
ggplot() +
        geom_sf(data = REG, color = "black", size = .2, fill = NA) +
        geom_sf(data = NEI, color = "red", size = .2, fill = NA)+
        coord_sf(datum = NA)+
        theme_map()

ggsave("test-1.pdf", width = 12, height = 10)

# simplify
REGs <- REG %>% ms_simplify(keep = .5, keep_shapes = TRUE)
NEIs <- NEI %>% ms_simplify(keep = .5, keep_shapes = TRUE)


ggplot() +
        geom_sf(data = REGs, color = "black", size = .2, fill = NA) +
        geom_sf(data = NEIs, color = "red", size = .2, fill = NA)+
        coord_sf(datum = NA)+
        theme_map()

ggsave("test-2.pdf", width = 12, height = 10)

最佳答案

ms_simplify似乎在您的最小示例上起作用,但是您需要首先将2个“ shapefile”分组为一个“ shapefile”。如果需要的话,在简化边界之后很容易将它们拆分。
(注意:当rmapshaperms_simplify对象一起使用时,我的sf版本会返回错误。这就是为什么我将tmp对象转换为sp对象中的as(tmp, "Spatial")对象的原因)

NEI <- st_transform(NEI, st_crs(REG)$epsg)
tmp <- rbind(REG , NEI)
tmp <- ms_simplify(as(tmp, "Spatial"), keep = .1, keep_shapes = T)
ggplot() + geom_sf(data = st_as_sf(tmp)) + theme_bw()


r - 无缝地适合两个SF多边形-LMLPHP

关于r - 无缝地适合两个SF多边形,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48360446/

10-12 23:21