Это расширение к ответу Z.lin (т.е. сначала используйте этот ответ для вычисления world_robinson
).Однако есть еще один полезный шаг, который можно добавить.После проецирования области, состоящие из более чем одного многоугольника, потому что они пересекаются с одной стороны карты на другую в исходной проекции (см. Антарктида, Фиджи и Россия), все еще имеют это разделение после репроекции.Например, вот крупный план Антарктиды, где мы можем видеть, что у нее есть граница на главном меридиане, где ни один из них не должен быть:
КПрошивая эти области вместе, мы можем сначала выяснить, какие полигоны являются проблемами, найдя те, которые пересекают простой меридиан:
bbox = st_bbox(world_robinson)
bbox[c(1,3)] = c(-1e-5,1e-5)
polygon2 <- st_as_sfc(bbox)
crosses = world_robinson %>%
st_intersects(polygon2) %>%
sapply(length) %>%
as.logical %>%
which
Теперь мы можем выбрать эти полигоны и установить их размер буфера равным нулю:
library(magrittr)
world_robinson[crosses,] %<>%
st_buffer(0)
ggplot(world_robinson) + geom_sf()
Как мы видим, на карте больше нет расщеплений по главному меридиану: