オープンソースの逆ジオコーダーをつくりました。
https://github.com/geolonia/open-reverse-geocoder
これを使用すると、緯度経度から都道府県名および市区町村名を検索することができます。
以下でデモをみることができます。地図を動かすと下の方に地図の中心点の住所が表示されます。
https://codepen.io/geolonia/pen/oNZLPQP
一般的な逆ジオコーダーの仕組みは、地名のポリゴンを北海道から沖縄までループで回して、引数で渡された緯度経度がどのポリゴンに含まれているかを計算して、該当する地名を返すというような仕組みであろうかと思います。
しかし、たとえば全国の市町村のポリゴンはGeoJSONにすると400MB以上あり、AJAXで扱うにはとてもサイズが大きくなります。
都道府県単位に分割しても、北海道では3MBぐらいになるので、マシにはなりますがちょっと重いな。。。という感じです。
そこで、地図を配信するために弊社が使用している ベクトルタイル を使用すれば、数十KBほどのファイルを1枚ダウンロードすればどうにかなるんじゃないか?というアイディアを思いつきました。
仕組みを要約すると以下のような感じです。
この逆ジオコーダーは NPM モジュールとして公開しており、みなさんのアプリケーション内で利用されることを想定しています。
$ npm install @geolonia/open-reverse-geocoder -S
openReverseGeocoder([139.7673068, 35.6809591]).then(result => {
console.log(result) // {"code": "13101", "prefecture": "東京都", "city": "千代田区"}
}).catch(error => {
// 必要に応じてエラー処理。
})
都道府県及び市区町村名のポリゴンには、国土数値情報の行政区域ポリゴンを使用しています。
https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03-v2_4.html
ライセンスは MIT ライセンスです。
Geolonia では、さらに精度の高い有償の逆ジオコーダー及びジオコーダーの提供も可能です。 有償サービスに関するお問い合わせは以下からどうぞ。
お問い合わせフォーム