緯度経度から都道府県・市区町村を検索できるオープンソースの逆ジオコーダーをベクトルタイルで作りました!

Posted by miya on May 20, 2021 · 1 min read

オープンソースの逆ジオコーダーをつくりました。

https://github.com/geolonia/open-reverse-geocoder

これを使用すると、緯度経度から都道府県名および市区町村名を検索することができます。

以下でデモをみることができます。地図を動かすと下の方に地図の中心点の住所が表示されます。

https://codepen.io/geolonia/pen/oNZLPQP

仕組み

一般的な逆ジオコーダーの仕組みは、地名のポリゴンを北海道から沖縄までループで回して、引数で渡された緯度経度がどのポリゴンに含まれているかを計算して、該当する地名を返すというような仕組みであろうかと思います。

しかし、たとえば全国の市町村のポリゴンはGeoJSONにすると400MB以上あり、AJAXで扱うにはとてもサイズが大きくなります。

都道府県単位に分割しても、北海道では3MBぐらいになるので、マシにはなりますがちょっと重いな。。。という感じです。

そこで、地図を配信するために弊社が使用している ベクトルタイル を使用すれば、数十KBほどのファイルを1枚ダウンロードすればどうにかなるんじゃないか?というアイディアを思いつきました。

仕組みを要約すると以下のような感じです。

  1. 緯度経度をもとに JavaScript でズームレベル10相当(約30km平米)のタイル番号を取得する。
  2. AJAX でタイルを取得し、クライアントサイドの JavaScript で GeoJSON に変換する。
  3. この GeoJSON には、隣接する複数の市町村の GeoJSON が含まれているため、指定された緯度経度が含まれる市区町村ポリゴンを検索する。

この方式のメリット

  1. サーバーサイドにリクエストされるのはズームレベル10相当のタイル番号(約30km平米)であり、緯度経度はサーバーに送られません。
  2. 緯度経度から都道府県名及び市区町村名に変換する処理も、クライアントサイドで行われるため、都道府県名も地名もサーバーには送信されません。
  3. サーバーにはベクトルタイルが静的なファイルとして設置されており、これはGitHub Pageを利用してホストしているため、最悪みなさんご自身でタイルをホストし続けることも可能です。

ご利用方法

この逆ジオコーダーは NPM モジュールとして公開しており、みなさんのアプリケーション内で利用されることを想定しています。

インストール方法

$ npm install @geolonia/open-reverse-geocoder -S

API

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 では、さらに精度の高い有償の逆ジオコーダー及びジオコーダーの提供も可能です。 有償サービスに関するお問い合わせは以下からどうぞ。

お問い合わせフォーム


Geolonia では、ウェブ地図や位置情報を利用したウェブアプリケーションや、モバイルアプリケーションの開発を承っています。

お問い合わせ