2つのSFポリゴンをシームレスにフィットさせる 質問する

2つのSFポリゴンをシームレスにフィットさせる 質問する

問題

シームレスに境界を接するべき 2 つのシェープファイルがあるとします。しかし、実際にはそうではありません。これらを隙間なく互いにくっつける方法はあるでしょうか?

ここに画像の説明を入力してください


具体的な事例

私には2つのシェイプファイルがあります。1つはヨーロッパ地域のものでREG、もう1つは近隣諸国のものですNEI。どちらのシェイプファイルも以下から取得されています。ユーロスタットリポジトリうまくフィットするはずですが、小さな隙間があります。また、ポリゴンを単純化する必要があり、そうすると隙間がかなり目立つようになります。


私が考えられる最高のもの

いくつかのアプローチを試しましたが、成功しませんでした。私が思うに、望ましい結果を得るには、次の手順を実行するしかありません。

  • シェイプファイル間の境界線のみを含む線 sf を作成します。
  • この線から、すべてのギャップをカバーするのに十分な大きさのバッファ ポリゴンを作成します。
  • このバッファを隣接するシェープファイルに結合して解消します -- 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)

ベストアンサー1

ms_simplifyは最小限の例では機能しているようですが、まず 2 つの「シェープファイル」を 1 つの「シェープファイル」にグループ化する必要があります。必要な場合は、境界を簡略化した後で簡単に分割できます。
(注: 私のバージョンの は、オブジェクトで使用する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()

ここに画像の説明を入力してください

おすすめ記事