{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)
重なった部分も少しずらして全ての辺を表示したい・・・ 本家leafletには線をずらして描画するプラグインがあるのでこれをRで使用する方法をメモしとく。
本家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)
描画する線の長さは変わらず内側にずらしただけなので、はみ出た部分ができてしまうが表示されないよりかは良しとしよう。。。