バッファ海岸線

Sep 10 2020

ライブラリのst_buffer()データを使用して海岸線バッファを生成しようとしていrnaturalearthます。ただし、バッファを作成すると、反対側の「側」にラップアラウンドするのではなく、プロジェクションの領域の外側に拡張されます。これにより、下流の形状の使用に問題が生じます。他の海岸線バッファの問題(例えば、1、2)GIS SEに関与していない投影エッジの問題かどうかは、Rになって

library(rgdal)
library(rnaturalearth)
library(sf)
library(ggplot2)

robin = CRS("+proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")

ROI = ne_countries(returnclass = 'sf') %>%
  st_combine() %>%
  st_transform(robin)
coastalWaters = ROI %>%
  st_buffer(500000)
ggplot() +
  geom_sf(data = coastalWaters, fill = "lightblue", col = "transparent") +
  geom_sf(data = ROI)

上記の再現可能なコードは、次のようなプロットになります(私が注釈を付けた赤い円):

だから、私の質問は、「理解された」ラッピングでポリゴンのグローバルセットをバッファリングするにはどうすればよいですか?ソリューションは、関数のsfライブラリを使用することが好ましいでしょう。

回答

2 Roger-123 Sep 11 2020 at 07:41

編集:結果の画像を追加

コメントで言及されているFSimardGISのように、ここで重要なのはを使用することst_wrap_datelineです。秘訣はst_transformation、バッファを作成する前に使用できないことです。これは、バッファがst_wrap_dateline必要な緯度/経度ではなく、投影の座標に変換されるためです。

st_buffer 次に、バッファ距離をアーク度で表示する必要があるため、kmをアーク秒に変換するための簡単な計算を行いましたが、調整が必要な場合があります。

次にcoord_sf、ggplotに追加して、ggplotがビジュアルの投影を実行できるようにしました。

library(rgdal)
library(rnaturalearth)
library(sf)
library(ggplot2)

robin = CRS("+proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")

ROI = ne_countries(returnclass = 'sf') %>%
  st_combine() 

#Please check the math on this part.
#KM/earth circumference * degrees in circle
buffer_in_km <- 500
buffer_as_arc_degrees<- buffer_in_km/40075*360

coastalWaters = ROI %>%
  st_buffer(buffer_as_arc_degrees)  %>% st_wrap_dateline()

ggplot() +
  geom_sf(data = coastalWaters, fill = "lightblue", col = "transparent") +
  geom_sf(data = ROI) +
  coord_sf(crs = robin)