INPUTしたらOUTPUT!

忘れっぽいんでメモっとく

{leaflet}でポリゴンの境界をずらして描画したい

{leaflet}で線を描画すると重なることがある。以下の例のような場合、1kmメッシュ53393599は左と下の辺しか表示されない。

library(magrittr)
meshes <-
  jpmesh::export_meshes(c("53393599", "53393690", "53394509", "53394600")) %>% 
  dplyr::mutate(meshcode = as.character(meshcode))

pal <-
  leaflet::colorFactor("Set1", meshes$meshcode)

atr <- 
  "<a href='http://maps.gsi.go.jp/development/ichiran.html' target='_blank'>地理院タイル</a>"

basemap <-
  leaflet::leaflet() %>% 
  leaflet::addTiles(
    "http://cyberjapandata.gsi.go.jp/xyz/pale/{z}/{x}/{y}.png", 
    attribution = atr
  ) 

basemap %>% 
  leaflet::addPolylines(
    data = meshes,
    color = ~pal(meshcode),
    opacity = 1.0,
    weight = 5
  ) %>% 
  leaflet::addLegend("bottomright", pal = pal, values = ~meshcode)

f:id:tak95:20210328220848p:plain:w269:h179

重なった部分も少しずらして全ての辺を表示したい・・・ 本家leafletには線をずらして描画するプラグインがあるのでこれをRで使用する方法をメモしとく。

github.com


本家leafletプラグインを使用するには以下を参考にする。

ただ上述のプラグインだとうまく動作しないので以下を参考にプラグインのファイルを差し替える。

結果のコードは次のようになる。

# LeafletJSプラグインを登録する関数
registerPlugin <- 
  function(map, plugin) {
    map$dependencies <- c(map$dependencies, list(plugin))
    map
  }

# Offsetプラグイン
polylineoffset_Plugin <- 
  htmltools::htmlDependency(
    "Leaflet.PolylineOffset", "1.0.1",
    src = c(href = "https://trafficdash.nl/assets/"),
    script = "leaflet.polylineoffset_arw.js"
)

basemap %>% 
  registerPlugin(polylineoffset_Plugin) %>% 
  leaflet::addPolylines(
    data = meshes,
    color = ~pal(meshcode),
    opacity = 1.0,
    weight = 5,
    options = list(offset = -2)
  ) %>% 
  leaflet::addLegend("bottomright", pal = pal, values = ~meshcode)

f:id:tak95:20210328224921p:plain:w269:h179

描画する線の長さは変わらず内側にずらしただけなので、はみ出た部分ができてしまうが表示されないよりかは良しとしよう。。。