ジオハッシュ関数でWebサービスのAPIを使わずに簡易に逆ジオコーディング

前回のエントリーで書いたジオハッシュ関数を用いて簡単な逆ジオコーディングを作ってみます。
想定している条件としては以下の通りです。

  • 単一の県など限定した範囲
  • 緯度経度から最も近いと思われる住所を得る
  • 住所は街区レベル(「○○町△丁目□番」)または大字・町丁目レベル
  • ジオハッシュの性質上,最も近い住所が検索されない場合がある

「限定した範囲」としたのは,Excelファイル内部に住所と緯度経度の変換テーブルを作る必要がありますが,行数の限界が105万行弱のためです。ある県で作成したところ,街区レベルでは20万行以上,同一座標の重複を除外しても10万行弱でした。
得られる情報は住所だけですが,WebサービスのAPIのように最寄り駅やランドマーク名などは得られません。
また,最も近い住所が検索されない場合があるため,精度が重要視される場合には使えません。

必要な位置情報データの入手

rg1国土交通省の「位置参照情報ダウンロードサービス」から必要な情報をダウンロードします。

  1. 取得範囲を都道府県または市区町村から選択
  2. 得る情報を街区レベル,大字・町丁目レベル,すべてのいずれかを選択
  3. データ整備年度を選択(通常は最新で良いでしょう)

変換テーブルの作成

  1. ダウンロードしたファイルを解凍し,対象のCSVファイルを開きます。
  2. 前回作成した関数を標準モジュールに作成します。
  3. Excel形式で保存します。2007以降の場合はマクロ有効ブック(xlsm)として下さい。
  4. 住所の列を作成します。
  5. rg3

  6. 作成したジオハッシュ関数を用いて,ジオハッシュの列を作成します。
  7. 作成した住所とジオハッシュの列は,再計算が起こらないよう,値として貼り付けします。
  8. ファイル容量を減らすため,不要な列を削除します。
  9. 範囲をテーブルに変換し,シート名・テーブル名を”GeoHash”に変更します。
  10. rg6

  11. すべての住所の緯度経度が調査されているわけではないようで,複数の住所で同じ緯度経度が含まれている場合がありますので,重複を削除します。
  12. rg8

  13. ジオハッシュを昇順で並べ替えます。これは,後で使うMATCH関数で検索するときに,照合型1を用いるためです。MATCH関数の詳細についてはここでは割愛しますので,別途検索して下さい。
  14. rg9

逆ジオコーディング関数の作成

次のコードを標準モジュールに追加します。

関数の使用例

シートやVBAのコード内から関数を呼び出して使用することが出来ます。
rg10

関連記事