leaflet で coast line の表示


はじめに

R の leaflet でカラーマップなどを表示した際に、陸地と海の境界線が非常に見難くなった。そこで「海岸線(coast line)」のみを表示しカラーマップと一緒にプロットしようと考えた。その方法についていろいろと調べたので備忘録として記事に残しておく。

GeoJSON データの入手

leaflet の中に海岸線のみを表示するような機能を見つけられなかった。一方で、GeoJSON形式で海岸線データを配布してくれているところ(https://github.com/nvkelso/natural-earth-vector)があったので、それを使用することとする。

ここでは、1:10m, 1:50m, 1:110m の分解能でデータが提供されている。github 上で、geojson フォルダ内の、ne_10m_coastline.geojson, ne_50m_coastline.geojson, ne_110m_coastline.geojson のいずれかをダウンロードして使用する。

GeoJSONデータを leaflet 上に表示

geojson を読み込み、スタイル(線の色、塗りつぶしの有無など)を変更し、addGeoJSONでleaflet 上に表示する。以下が、そのコードである。

#必要なパッケージの読み込み
library(dplyr)
library(leaflet)
library(jsonlite)
library(mapview)

#GeoJSONファイルの読み込み
#geojson <- read_json("./natural-earth-vector/geojson/ne_10m_coastline.geojson")
#geojson <- read_json("./natural-earth-vector/geojson/ne_50m_coastline.geojson")
geojson <- read_json("./natural-earth-vector/geojson/ne_110m_coastline.geojson")

#スタイルの変更
geojson$style = list(
  color = "#000", #線の色
 weight = 1, #線の太さ
  fill = FALSE #塗りつぶしの有無
)

#leaflet で表示
map <- leaflet() %>% addTiles() %>% addGeoJSON(geojson)
print(map)

#png に保存
mapview::mapshot(map, file = "./coast_line.png")

海岸線が表示されているのが分かる。

分解能の違い(10m, 50m, 110m)

地図を拡大してみると、細かい部分の違いが見えてくる。分かりやすさのため線を太くし、石川県周辺(setView(lng = 136.4, lat = 36.3, zoom = 8)を追加)で見てみると、

110m:能登半島が直線で表されていて、形は全く分からない。

50m:能登半島の概形が分かる程度

10m:細かい湾港まで形が分かる

となる。もちろん細かい方がデータも重いので表示にかなり時間がかかる(自身のノートPCで10mの表示に数分かかった)ので、用途に応じて選択することが必要となる。

おわりに

GeoJSON 形式のファイルなら同様の方法で leaflet に重ねていくことができると思われるので、他の GeoJSON データでもいろいろと試してみたい。また、今回はオープンソースになっている GeoJSON データを用いて、cosat line の表示を行ったが、もし leaflet のパッケージで簡単に行える方法をご存じの方がいれば是非コメント下さい!