フリーランスウェブエンジニアがウェブ全般について綴るブログ|いしかわろぐ
PRPR

緯度経度から住所を取得してリスト化したい【逆ジオコーディング】

緯度経度から住所を取得してリスト化したい【逆ジオコーディング】ウェブ制作・運用
ウェブ制作・運用HTML・CSS・プログラミング
本ページはプロモーションが含まれています

少し前の案件で「建物の緯度経度は所持しているのだけど住所が無い。緯度経度から住所をまとめて取得することは可能?」という話がありました。
逆ジオコーディングってやつですね。
「Google mapとか利用してできない?」と、ウェブ絡みの話ということで僕に話がきたようなのですが、

  • 住所を取得したい建物数が数万〜数十万戸
  • カタログ内で取得した住所データを利用したい
  • あまり費用はかけたくない

という要件からして最初から懸念たっぷりでした。
要は、大量の住所データを安価で取得して二次利用したいってことです。
触れた感覚から難しそうな匂いがプンプンします。
データを販売する会社があるということは、それなりの理由があるわけで。
とはいえ、こんな要望について以前も調べた覚えがあるのに完全に忘れていたので、一旦まとめておこうと思います。

実現可能かどうか逆ジオコーディング可能なAPIを調査

住所や地名などから緯度経度を導き出す技術のことをジオコーディング、その逆で緯度経度から住所や地名などを導き出す技術のことを逆ジオコーディングと呼びます。
今回必要なのは後者ですね。
そして安価でとのことだったので、住所販売などでは無く、まずはAPIを探ってみることにします。
APIの必須条件としては、

  • 無料であること
  • 逆ジオコーディング可能であること
  • 接続上限数が多いこともしくは制限無しであること
  • 二次利用できること

となります。
4つ目の条件がもっとも難関であることが想定されますね。

ひとまず逆ジオコーディングしてみる

とりあえず目的のデータが取れるかどうか、手軽なGoogleのGeocoding APIを利用して確かめてみます。
ざっと書くと下記のような感じでしょうか。

<?php
/*
** 緯度経度取得及び設定
*/
$latlngs = array();
$latlngs = [
 ['35.7202869', '139.9249688'],
 ['35.71148684139082', '139.76839363574982'],
 ['35.72546314632721', '139.7471398115158'],
 ['35.738426818811796', '139.73446369171143'],
 ['35.76239773757285', '139.74768161773682']
];
/*
** jsonデータ取得
*/
$GMADs = array();
foreach ($latlngs as $latlng) {
 $GMADs[] = json_decode(@file_get_contents('http://maps.google.com/maps/api/geocode/json?latlng=' . $latlng[0] . ',' . $latlng[1] . '&sensor=false&language=ja'), true);
}
/*
** 住所取得
*/
$addresses = array();
foreach ($GMADs as $GMAD) {
 $addresses[] = $GMAD['results'][0]['formatted_address'];
}
print('<pre>');
print_r($addresses);
print('</pre>');

緯度経度は適当にいれました。
結果として、

Array
(
 [0] => 日本, 〒272-0023 千葉県市川市南八幡4丁目4−16
 [1] => 日本, 〒110-0008 東京都台東区池之端1丁目4−29
 [2] => 日本, 〒113-0001 東京都文京区白山5丁目16−6
 [3] => 日本, 〒170-0002 東京都豊島区巣鴨5丁目3−2
 [4] => 日本, 〒114-0003 東京都北区豊島4丁目1−17
)

となり、ある程度希望通りのデータは取得できそうです。
整形は必要でしょうけどね。
その他のAPIも大きく仕様が異なることは無さそうなので、取得はいけるかな、といった感触です。

条件を満たすAPIはあるか

次に求めている条件もとにAPIを調査し、下記が候補として残りました。

  • Google Geocoding API
  • YahooローカルサーチAPI
  • 国土交通省 位置参照情報ダウンロードサービス
  • 農研機構 簡易逆ジオコーディングサービス

今回の条件にもとづいて、それぞれの仕様をまとめていきます。

Google Geocoding API

緯度経度から住所を取得してリスト化したい【逆ジオコーディング】
Geocoding API overview  |  Google for Developers
Geocoding converts addresses into geographic coordinates to be placed on a map. Reverse Geocoding finds an address based on geographic coordinates or Place IDs.
  • 価格: 基本無料
  • 逆ジオコーディング: 可
  • 接続上限: 1日あたり2,500、1秒あたり5
  • 状況: 号まで取得可能(例:1丁目1番1号)。しかし、APIの利用規約に抵触するため今回の目的では使用不可(※)。

※Terms of Use Restrictions
The Google Maps Geocoding API may only be used in conjunction with a Google map; geocoding results without displaying them on a map is prohibited. For complete details on allowed usage, consult the Maps API Terms of Service License Restrictions.
引用(利用規約): https://developers.google.com/maps/documentation/geocoding/usage-limits?hl=ja

YahooローカルサーチAPI

緯度経度から住所を取得してリスト化したい【逆ジオコーディング】
Yahoo!ローカルサーチAPI - Yahoo!デベロッパーネットワーク
Yahoo! Open Local PlatformのローカルサーチAPIを使うと、店舗、イベント、クチコミ情報などの地域・拠点情報(POI)を検索できます。
  • 価格: 基本無料
  • 逆ジオコーディング: 可
  • 接続上限: 24時間中1アプリケーションIDにつき50,000件
  • 状況: 番地までおそらく取得可能(試していない)。しかし、APIの利用規約に抵触するため今回の目的ではやはり使用不可(※)。

Q. データを保存して利用できますか? また、二次利用はできますか?
A. API経由で取得したデータを保存したり、二次利用することはできません。
引用(FAQ): http://olp.yahoo.co.jp/faq.html#14

国土交通省 位置参照情報ダウンロードサービス

緯度経度から住所を取得してリスト化したい【逆ジオコーディング】
http://nlftp.mlit.go.jp/isj/
  • 価格: 無料
  • 逆ジオコーディング: 可
  • 接続上限: DL形式のため上限無し(Web APIもあるが試行版)
  • 状況: 取得できるのは番地までのデータとなる(例:1丁目1番)。二次利用OKだが、出所の明記が必要(※)。

Q3 位置参照情報を加工して作成したデータには、どのように出所を明記すればよいのでしょうか?
A3 「位置参照情報利用約款」に記載があるように、「『位置参照情報 国土交通省』を使用して作成」と記述するのが一般的です。作成した図表等を書籍等に掲載する場合は、その図表の説明として分かる場所に明記してください。またデータの場合は、データの説明文章等に記載をお願いします。
Q5 ダウンロードした街区レベル位置参照情報をそのまま複製して2次配布することはできますか?
A5 そのまま複製して2次配布することも可能です。ただし、出所の明記を必ず行ってください。また、街区レベル位置参照情報と同時に提供しているメタデータを、位置参照情報のデータに必ず添付した状態で2次配布してください。
引用(FAQ): http://nlftp.mlit.go.jp/isj/faq.html

農研機構 簡易逆ジオコーディングサービス

緯度経度から住所を取得してリスト化したい【逆ジオコーディング】
https://aginfo.cgk.affrc.go.jp/rgeocode/index.html.ja
  • 価格: 無料
  • 逆ジオコーディング: 可
  • 接続上限: 1日あたりの使用回数上限は原則として10万件
  • 状況: 番地までのデータとなる(例:1丁目1番)。二次利用OKだが、サイト閉鎖の可能性について記述されている上、データ品質については無保証であること旨の注意文が記載されている(※)。

当該サービスを用いて作成された成果物を配布、公開等する場合には、次のことまたはこれと同じ趣旨のことを成果物利用者、配布対象者等に通知しなれければなりません。
当該サービス提供者は、当該サービスを無保証で提供しており、当該サービスが原因で発生した損害等について、補償等は一切おこないません。
当該サービス提供者は、当該サービスを原因とする不具合があった場合でも、成果物に関する直接的なサポートを行いません。
引用(個別使用条件): https://aginfo.cgk.affrc.go.jp/rgeocode/index.html.ja

調査結果

諸々調べた結果、条件付きではありますが、「国土交通省 位置参照情報ダウンロードサービス」が今回の要望に沿うものと言えるでしょう。
改めて、今回APIに求める条件は下記になります。

  • 無料であること
  • 逆ジオコーディング可能であること
  • 使用制限数が多いこともしくは制限無しであること
  • 二次利用できること

上記条件から図にすると下記のようになります。

無料逆ジオコーディング使用制限数が多い二次利用
国土交通省
農研機構
Yahoo×
Google××

Google、Yahooは二次利用不可との規約に抵触するのでそもそも使用不可。
国土交通省と農研機構はほぼ条件を満たしているのですが、農研機構はサイト閉鎖の可能性があるため候補から省きます。
結果、「国土交通省 位置参照情報ダウンロードサービス」となりました。
ただし、下記が許容範囲内か要確認となります。

  • 住所が番地までで「号」は取得不可能(例:1丁目1番)
  • 出所の明記が必要

まとめ

やはり、「号」まで含めた住所の取得を無料で、しかも二次利用可で、というのは無理がありました。
号までの住所データを購入するとなると下記のようなサービスを利用する必要がありそうです。
http://www.navit-j.com/service/address_data.html
そりゃそうだよな、といった結果ではありましたが、「国土交通省 位置参照情報ダウンロードサービス」でもある程度まではやれると思います。
APIもありますが試行版のため、利用する際はダウンロードになるかと思いますが、注意点としては全国となるとダウンロードしたデータだけで数GB相当になることです。
とはいえ、ローカルのDBにでも突っ込んでしまえば後は自由に使えるので、メリットは大きいものであると言えます。
同じようなことで迷われた時には参考になればと思います。

 

オススメ
アイテム

緯度経度から住所を取得してリスト化したい【逆ジオコーディング】

コメント

タイトルとURLをコピーしました