インタラクティブな地図を作成する方法を3つ紹介します。
- plotly
- leaflet
- mapview
一番お勧めは、leafletでの地図作成です。
mapviewは、文字化けを治せませんでした。でも、バックグラウンドの地図を変更出来たりと魅力はあります。
データ
東京都の公園の場所のポイントデータを使います。
出典:国土交通省国土数値情報ダウンロードサイト「国土数値情報 都市公園データ」(国土交通省)(https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03-v2_4.html)を加工して作成
緯度経度は、JGD2000(EPSG:4612)です。
plotlyでインタラクティブな地図
まず、上記のshapeファイルを読み込みます。
library(sf)
t_park <- st_read("tokyo_park\\P13-11_13.shp",
options = "ENCODING=CP932",
crs = st_crs(4612))
ベースとなる地図を読み込みます。tidyverse内のmap_dataという関数を使います。このmap_dataのEPSGは4326だと思います。
library(tidyverse)
jpn <- map_data("world", region = "Japan")
jpn <- st_as_sf(jpn, coords=c('long', 'lat'), crs=st_crs(4326))
さっそくggplotで日本地図を書いてみます。
g <- ggplot() +
geom_sf(data=jpn,
fill = "white", #線の中
color = "cadetblue4", #線自体
lwd = 0.5) + #線の太さ
geom_sf(data=t_park,
color="lightcoral")+
theme_void()
g
plotlyに変換します。
library(plotly)
fig <- ggplotly(g)
library(htmlwidgets)
saveWidget(fig, "plotly_map.html")
leafletでインタラクティブな地図
leafletではすべてのファイルはEPSG4326である必要があります。そのため、公園のデータのCRSをEPSG4326に変更します。
マウスホバー時のラベルを指定するのに、popupを指定します。leafletでは変数を指定する際は~が必要です。P13_003は、公園名です。
t_park2 <- st_transform(t_park, crs = 4326)
library(leaflet)
leaf <-leaflet() %>%
addTiles() %>%
addCircles(data = t_park2,
popup = ~P13_003)
htmlwidgets::saveWidget(leaf,"leaf_tokyo_park.html")
出来上がったleafletのhtmlファイルをwordpressのカスタムhtmlとして埋め込む場合は、最後の部分(以下)を削除して貼り付けます。
<script type="application/htmlwidget-sizing" data-for="htmlwidget-39f05682bdd7f7e94851">{"viewer":{"width":"100%","height":400,"padding":0,"fill":true},"browser":{"width":"100%","height":400,"padding":0,"fill":true}}</script>
mapviewでインタラクティブな地図
マウスホバー時のラベルを指定するのに、labelを指定します。まあ文字化けしてるんですけどね。保存は、mapshotで行います。
library(mapview)
mv <- mapview(t_park,
label = "P13_003")
mapshot(mv,"mapview_tokyo_park.html")
関連したいくつかのデータフォルダが作成されるので、ブログ上にアップできませんでした。ローカルで見る分には、問題ないです。