準備

library(leaflet) # ライブラリの読み込み
library(ggmap)
library(dplyr)
library(knitr)
library(DT)

ベース地図の描画

leaflet() %>%
  addTiles(urlTemplate = "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png") %>%  # オープンストリートマップ
  setView(lng = 140,lat = 36, zoom = 9)  # 初期表示位置(省略可)

マークの描画

マーク用データの準備

df <- data.frame(
  id = 1:50,
  lng = rnorm(50, mean = 140, sd = 0.5),
  lat = rnorm(50, mean = 36,  sd = 0.5),
  group = rep(c("groupA", "groupB"), 25),
  pop = paste0("pop ", 1:50, "!"),
  label = paste0("label ", 1:50, "!")
)
knitr::kable(head(df))
id lng lat group pop label
1 139.9243 36.44596 groupA pop 1! label 1!
2 139.7237 35.62759 groupB pop 2! label 2!
3 139.9773 36.45864 groupA pop 3! label 3!
4 139.6034 36.44415 groupB pop 4! label 4!
5 139.0843 35.82925 groupA pop 5! label 5!
6 140.0365 35.83830 groupB pop 6! label 6!
# マーク用データの入力
base.map <- leaflet(df) %>%
  addTiles(urlTemplate = "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png") 

マークの描画

base.map %>%
addMarkers(lng = ~lng, lat = ~lat,
           popup = ~pop,
           label = ~label)

サークルの描画

base.map %>%
addCircles(lng = ~lng, lat = ~lat,
           radius = 1000,  #半径(メートル単位)
           color = "#09f",
           weight = 20)  # 線幅

ポップアップの描画

base.map %>%
addPopups(lng = ~lng, lat = ~lat,
          popup = ~pop)

レイヤ

base.map %>%
  addMarkers(lng = ~lng, lat = ~lat, popup = ~pop, group = "groupA",
             data = filter(.data = df, group == "groupA")) %>%
  addMarkers(lng = ~lng, lat = ~lat, popup = ~pop, group = "groupB",
             data = filter(.data = df, group == "groupB")) %>%
  addLayersControl(overlayGroups = c("groupA","groupB"),
                   options = layersControlOptions(collapsed = FALSE))

ケーススタディ

前処理

データ読み込み

df <-read.csv("library.csv",  stringsAsFactors = FALSE)
kable(head(df))
id name group locate url
1 杉並区立柿木図書館 図書館(地域) 東京都杉並区上井草1-6-13 https://www.library.city.suginami.tokyo.jp
2 杉並区立今川図書館 図書館(地域) 東京都杉並区今川4-12-10 https://www.library.city.suginami.tokyo.jp
3 杉並区立南荻窪図書館 図書館(地域) 東京都杉並区南荻窪1-10-2 https://www.library.city.suginami.tokyo.jp
4 杉並区立高井戸図書館 図書館(地域) 東京都杉並区高井戸東1-28-1 https://www.library.city.suginami.tokyo.jp
5 杉並区立宮前図書館 図書館(地域) 東京都杉並区宮前5-5-27 https://www.library.city.suginami.tokyo.jp
6 杉並区立成田図書館 図書館(地域) 東京都杉並区成田東3-28-5 https://www.library.city.suginami.tokyo.jp

住所から緯度経度への変換

lnla <- geocode(df$locate)
df$lng <- lnla$lon
df$lat <- lnla$lat
kable(head(df))
id name group locate url lng lat
1 杉並区立柿木図書館 図書館(地域) 東京都杉並区上井草1-6-13 https://www.library.city.suginami.tokyo.jp 139.6121 35.72025
2 杉並区立今川図書館 図書館(地域) 東京都杉並区今川4-12-10 https://www.library.city.suginami.tokyo.jp 139.5999 35.71557
3 杉並区立南荻窪図書館 図書館(地域) 東京都杉並区南荻窪1-10-2 https://www.library.city.suginami.tokyo.jp NA NA
4 杉並区立高井戸図書館 図書館(地域) 東京都杉並区高井戸東1-28-1 https://www.library.city.suginami.tokyo.jp NA NA
5 杉並区立宮前図書館 図書館(地域) 東京都杉並区宮前5-5-27 https://www.library.city.suginami.tokyo.jp 139.5989 35.69322
6 杉並区立成田図書館 図書館(地域) 東京都杉並区成田東3-28-5 https://www.library.city.suginami.tokyo.jp NA NA

ポップアップ用のテキスト編集

df$pop <- paste0(df$name, '<br><a href = "', df$url, '"> link </a>')

レイヤ用に前処理

group_list <- unique(df$group)

地図の描画

leaflet() %>%
  addTiles(urlTemplate = "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png") %>%
  addMarkers(lng = ~lng, lat = ~lat, popup = ~pop, group = group_list[1],
             data = filter(.data = df, group == group_list[1])) %>%
  addMarkers(lng = ~lng, lat = ~lat, popup = ~pop, group = group_list[2],
             data = filter(.data = df, group == group_list[2])) %>%
  addMarkers(lng = ~lng, lat = ~lat, popup = ~pop, group = group_list[3],
             data = filter(.data = df, group == group_list[3])) %>%
  addLayersControl(overlayGroups = group_list,
                   options = layersControlOptions(collapsed = FALSE))

一覧表示

datatable(dplyr::select(df, name:url))

「データから価値を創造する」一般社団法人データマーケティングラボラトリー

Copyright© DML All Rights Reserved.