緯度・経度から住所へ変換する

本記事は,以前書いた記事を最新の情報に修正して書きなおしたものです。

何をするプロシージャか

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

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

これらのような位置情報から,逆ジオコーディングのWebAPIサービスを利用して住所に変換するFunctionプロシージャを作成します。

ReverseGeoCoding関数の作成

上の目的から,引数として緯度・経度を渡し,戻り値が住所となるようなReverseGeoCodingという関数を作成します。

動作確認状況

Excel 32ビット 64ビット
2007 たぶんOK(未確認)
2010 たぶんOK(未確認) たぶんOK(未確認)
2011 Mac NG
2013 OK たぶんOK(未確認)

2013の32ビットでしか動作確認していませんが、Win32APIを用いていないので、おそらく64ビットでもそのまま動くでしょう。
MSXMLオブジェクトを使用しているため,Mac2011では動作しません。

ソースコード

標準モジュールに以下のコードを記述して,Functionプロシージャを作成します。

コードの解説

7〜9行目

APIへのリクエストURLを作成しています。逆ジオコーディングが可能なマップサービスは何種類かあると思いますが,ここではYahoo!デベロッパーネットワークで公開されている地図サービス(YOLP)のリバースジオコーダAPIを用います。
<あなたのアプリケーションID>には,Yahoo!デベロッパーネットワークに登録して取得したアプリケーションIDで置き換えます。
詳細な利用方法や利用規約などは以下のリンクから確認して下さい。

Webサービス by Yahoo! JAPAN

11〜13行目

リバースジオコーダAPIではXML形式でデータを受信しますので,その処理のためにIXMLHTTPRequestオブジェクトを用意してからリクエストを行います。

16,18行目

リクエストの結果,受信したXMLデータから,Addressタグを探して,最初に見つかった住所を戻り値に代入しています。

実装例

例えば,既知の位置情報として緯度がA2セルに,経度がB2セルに入力済みとし,住所に変換してC2セルに出力するという,非常に簡単な例です。
表全体に対して繰り返し処理するようなルーチンや,ボタンをクリックしたら実行するなどのインターフェースは別途作成してください。

SS_2014_10_05_19_40

標準モジュールを作成し,以下のコードを記述します。

実行結果

[Alt]+[F8]でマクロを選択して実行してください。

SS_2014_10_05_20_21

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

SS_2014_10_05_20_24

このとき,APIにより以下のようなXMLを受信しています。Addressタグには,指定した緯度・経度から最も近い住所が記載されているため,この内容を取得しています。

関連記事