位置情報から住所へ変換(逆ジオコーディング)する。

旧ローカルサーチAPIの提供終了に伴い、本記事の情報は古くなっています。
新しいAPIに対応した記事を書きましたので,こちらのページを参照してください。


施設の点検や資産管理などの業務アプリケーションを構築する場合に,位置情報(緯度・経度)からその場所の住所へ変換したい場合があります。先に位置情報が分かっていて,そこの住所を知りたい場合は次のようなケースが考えられます。

  • Google Mapや電子国土などのWeb GISと連携し,地図画面上でクリックした地点の住所を知りたい
  • スマートフォンやGPS付きデジカメで撮影した写真の位置情報から住所を知りたい

これらのような位置情報をExcelに取り込んだあと,逆ジオコーディングのサービスを利用して住所に変換することが出来ます。

例えば,既知の位置情報として緯度がA2セルに,経度がB2セルに入力済みとし,住所に変換してC2セルに出力するという,簡単な例です。

逆ジオコーディングの例

位置情報から住所を求めるための逆ジオコーディングの関数を別途作成するとして,メインのマクロは以下のようになります。標準モジュールを作成し,以下のコードを記述します。

10行目で呼び出しているように,引数に緯度・経度,戻り値が住所となるようなReverseGeoCodingという関数を作成します。

〔4~7行目〕
逆ジオコーディングではXML形式でデータを受信しますので,その処理のためにXML通信やドキュメント・ノードなどのオブジェクトを用意する必要があります。XMLを利用できるよう,VBEの参照設定から Microsoft XML, V6.0 を選択しておきます。

XMLの参照設定

〔12~18行目〕
APIへのリクエストURLを作成しています。逆ジオコーディングが可能なマップサービスは何種類かあると思いますが,ここではYahoo!デベロッパーネットワークで公開されている地図サービス(YOLP)のAPIを用います。
リバースジオコーダというずばりそのもののAPIもありますが,山中など住所・地名が見つからない場合もあったので,ローカルサーチAPIを用いて,半径1km以内の最も近い住所を探すようにします。
<あなたのアプリケーションID>には,Yahoo!デベロッパーネットワークに登録して取得したアプリケーションIDで置き換えます。
詳細な利用方法や利用規約などは以下のリンクから確認して下さい。

Webサービス by Yahoo! JAPAN

〔20~27行目〕
ローカルサーチAPIでリクエストするためのXMLオブジェクトを作成し,逆ジオコーディングのリクエストを行い,XML形式で受信します。
〔29~35行目〕
受信した結果の住所の一覧から読み取れるような処理をします。半径1km以内に見つかった住所のうち最も近いものを戻り値に設定します。

簡単ですが以上ですので,実行してみます。
必要に応じてボタンなどメニューを設ければ良いと思いますが,今回はマクロのメニューから直接実行します。

マクロの実行

このように住所へ変換することができました。

実行結果

このとき,APIにより以下のようなXMLを受信しています。LocalSearchResult以下の,Itemタグには,指定した位置情報から近い順に10箇所の住所が記載されているため,この中から一番最初の(0番目の)Addressタグを取得しています。

ダウンロード

上記の手順で作成することが可能ですが、自分で作るのは面倒という方は、上記のコードを含んだサンプルファイルをGumroadからダウンロードできます。

関連記事