業務で使いたいシチュエーションがあったので週末を利用してembulkのfilterプラグインを作りました。
gemに登録して公開しましたのでせっかくだから紹介します。
##embulk-filter_reverse_geocoding
URL: https://github.com/oqrusk/embulk-filter-reverse_geocoding
緯度経度(度分秒/世界測地系)から都道府県名、市区町村名、ジオハッシュ(5桁)を生成するフィルタープラグインです。
元となる緯度経度から5桁のジオハッシュを生成して住所データとマッチングしています。
住所データは@masuidriveさんのこちらの記事で紹介されていたものをお借りしました。
https://github.com/FrogAppsDev/jpcities
##モチベーション
今回このプラグインを作ろうと思ったのはTableauで色塗りマップを使いたかったからです。
Tableauは都道府県名称や郵便番号の上3桁の文字列から色塗りマップを作ることが出来ます。
ただし、緯度経度をそのまま与えると点になってしまい色塗りマップにならないので緯度経度からリバースジオコーディングするプラグインを作りました。
##使い方
spot,lat,lon
六本木グランドタワー,35.6641222,139.729426
spot,lat,lon,pref,city,hash
六本木グランドタワー,35.6641222,139.729426,東京都,東京都港区,xn76g
filters:
- type: reverse_geocoding
target_lon: lon
target_lat: lat
output_columns:
- {name: pref, type: string, out: pref}
- {name: city, type: string, out: city}
- {name: hash, type: string, out: hash}
target_lat/target_lonというオプションに緯度/経度それぞれのカラムを指定するとoutput_columnsの値を出力することができます。
今のところ生成出来る値は下記の3パターンです。
- pref : 都道府県
ex) 東京都 - city : 都道府県 + 地区町村名
ex) 東京都港区 - hash : ジオハッシュ(5桁)
ex) xn76g
緯度経度は世界測地系(WGS84)の度分秒形式のみ対応しています。
ミリ秒や測地系の変換はまた別のプラグインを作成中です。
##最後に
開発にあたってたくさんの記事を参考にさせて頂きました。
ありがとうざいます。
・IntelliJIDEAでデバッグする方法
http://qiita.com/sonots/items/676a2903082fa8528ee5
・UnitTest(JUnit)の書き方
http://qiita.com/Civitaspo/items/c092620577983c9e84cc
・参考にさせていただいたコード
特にoutput schemaやテストコード
https://github.com/sonots/embulk-filter-column
特にPageOutput周り
https://github.com/kamatama41/embulk-filter-hash