バッファ海岸線
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)