Эта проблема
Предположим, что у нас есть два шейп файла, которые должны беспрепятственно пересекаться. Только они этого не делают. Есть ли способ заставить их придерживаться друг друга без пробелов?
Конкретный случай
У меня есть два шейп файла: один для регионов Европы - REG
, другой для соседних стран - NEI
. Оба шейп файла взяты из репозитория Eurostat и должны хорошо сочетаться; но есть небольшие пробелы. Кроме того, мне нужно упростить полигоны, и тогда пробелы становятся действительно заметными.
Лучшее, что я могу придумать
Я пробовал несколько подходов, но безуспешно. Единственный способ добиться желаемого результата, который я вижу, требует следующих шагов:
- создать строку sf только с границей между моими шейп файлами;
- из этой линии создайте буферный многоугольник, достаточно большой, чтобы покрыть все пробелы;
- объединить и распустить этот буфер в шейп файл для соседей -
NEI
; - клип с расширенным
NEI
с шейп-NEI
REG
.
Очевидно, это довольно неуклюжий обходной путь.
Есть ли лучший способ пойти?
Воспроизводимый пример в этом контексте
Минимальный пример
# 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)