インタラクティブな地図を作成する方法を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>
leaflet

mapviewでインタラクティブな地図

マウスホバー時のラベルを指定するのに、labelを指定します。まあ文字化けしてるんですけどね。保存は、mapshotで行います。

library(mapview)
mv <- mapview(t_park,
              label = "P13_003")
mapshot(mv,"mapview_tokyo_park.html")

関連したいくつかのデータフォルダが作成されるので、ブログ上にアップできませんでした。ローカルで見る分には、問題ないです。

category