23

问题

假设我们有两个无缝边界的 shapefile。只是,他们没有。有没有一种方法可以迫使它们彼此无间隙地粘在一起?

在此处输入图像描述


具体案例

我有两个 shapefile:一个用于欧洲地区 - REG,另一个用于邻国 - NEI。两个 shapefile 都取自Eurostat 存储库,应该可以很好地组合在一起;但有一些小的差距。另外,我需要简化多边形,然后差距变得非常明显。


我能想到的最好的

我尝试了几种方法,但没有成功。实现我看到的预期结果的唯一方法需要以下步骤:

  • 用我的 shapefile 之间的边界创建一条线 sf;
  • 从这条线创建一个足够大的缓冲区多边形以覆盖所有间隙;
  • 将此缓冲区加入并解散到邻居的 shapefile 中 - NEI
  • NEIREGshapefile剪掉扩展的部分。

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

有更好的方法吗?


此要点中可重现的示例


一个最小的例子

# 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)
4

1 回答 1

1

ms_simplify似乎适用于您的最小示例,但您首先需要将您的 2 个“shapefile”分组为一个“shapefile”。如果需要,可以在简化边界后轻松拆分它们。
(注意:我的版本在与对象一起使用rmapshaper时会返回错误。这就是为什么我将对象转换为对象的原因)ms_simplifysftmpspas(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()

在此处输入图像描述

于 2018-01-26T01:16:49.000 回答