leafletRでシェープファイルからOSM上に塗り分け地図
Leaflet - a JavaScript library for mobile-friendly maps
というインタラクティブ地図のためのJavaScriptライブラリがある。GeoJSONファイルを用意して、leafletのスクリプトを書いてやれば、OpenStreetMapの上にインタラクティブ機能付きでデータを可視化できる。
これの作業をR上でやってくれるのがleafletRパッケージ。
福岡県の市町村別高齢化率(平成26年)の塗り分け地図(コロプレス図)を作成してみる。
# leafletRパッケージを使って、Shapefileから # leafletJSを使ったインタラクティブな地図(コロプレス図)を作成 # leafletJS: http://leafletjs.com library(leafletR) library(rgdal) tmp <- tempdir() # 国土数値情報の行政界(平成26年度、福岡県)のシェープファイルを編集して、 # 各市町村の高齢化率を属性テーブルに追加した。 # 高齢化率は福岡県の高齢者人口及び高齢化率の推移 # (http://www.pref.fukuoka.lg.jp/contents/koureika-suii26-2.html) # のエクセルファイルより取得。 url <- "http://stat.fwu.ac.jp/~fujino/hateblo/20150510/fukuoka.zip" file <- basename(url) download.file(url, file) unzip(file, exdir=tmp) # シェープファイルをSpatialPolygonsDataFrameとして取り込む fukuoka <- readOGR(dsn=paste0(tmp,"/fukuoka"), layer="fukuoka", encoding="Shift_JIS") # GeoJSONオブジェクトに変換 # ちょっと時間がかかる fukuoka.dat <- toGeoJSON(data=fukuoka, name="fukuoka", dest=tmp) # スタイルの設定 # propは塗り分ける属性テーブルの列名、breaksは階級、 # style.valは階級の色、legは凡例のタイトル fukuoka.style <- styleGrad(prop="agingrate", breaks=seq(10,40,by=5), style.val=rev(heat.colors(6)), leg="Aging Rate", fill.alpha=0.7, lwd=0.5) # leafletJSのスクリプトを含むHTMLファイルを生成 # シェープファイルの属性テーブルにマルチバイト文字が含まれていて # 文字コードがUTF-8でない場合にはここでエラーが出る fukuoka.map <- leaflet(data=fukuoka.dat, dest=tmp, title="Aging Rate in Fukuoka", base.map="osm", style=fukuoka.style, popup="*") # ブラウザに表示 fukuoka.map
ポリゴンをクリックすると属性テーブルの情報がポップアップで表示される。
動くのは以下のリンクで。
Aging Rate in Fukuoka
githubで公開されているRStudioのleafletパッケージの方がポップアップのカスタマイズができたりと高機能な感じはするけど、まだ試していない。