问题
假设我们有两个形状文件,它们应该无缝连接。但是实际上,它们之间存在缝隙。有没有一种方法可以强制它们彼此粘合而不留下空白?
具体情况
我有两个形状文件:一个是欧洲地区的文件--REG
,另一个是邻国的文件--NEI
。这两个形状文件都来自欧盟统计局的资料库,并且应该能够拼合在一起;但是它们之间存在小缝隙。此外,我需要简化多边形,然后这些缝隙变得非常明显。
我所能想到的最好办法
我尝试了几种方法,但都没有成功。我唯一看到可以实现期望结果的方式包含以下步骤:
- 创建一个只包含两个形状文件边界的线sf;
- 从这条线创建一个缓冲区多边形,使其足够大覆盖所有缝隙;
- 将此缓冲区与邻居的形状文件--
NEI
连接并融合; - 使用
REG
形状文件剪裁扩展的NEI
。
显然,这是一种相当笨拙的解决方法。
是否有更好的方法?
在此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)
mapshaper::ms_simplify()
。该函数旨在简化多边形,并且它有一个snap
参数,当设置为 TRUE 时,可以避免出现这种情况。也许那样就可以解决问题了? - Philrm(list = ls(all = TRUE))
开始你的示例。如果有人不仔细看就运行它,会导致很大的麻烦。 - andyteucher