2023.05.15
ジオコーディングサービスの精度と料金について調べてみました
Szczecinolog, 30-28 Mazurska Street in Szczecin, address plate, clipped, CC BY-SA 4.0
こんにちは!今回はジオコーディングサービスの精度と料金について調べてみました。
なお、以下は2022年9月9日時点の調査結果です。
1. はじめに
現在、住所から緯度・経度に変換するジオコーディングサービスが沢山あります。その中で、どれが精度が良いか、またいくらで利用できるか気になったので調べてみました。
以前、このブログで住所から緯度経度に変換する手法としてジオコーディング(アドレスマッチング)についてご紹介しました。
ジオコーディングとはどういうもの?と言いますと、以下に説明があります。
住所や郵便番号といった位置情報を地理座標に変換するツールやサービスのことを言います。また、地理座標から住所に変更することを「逆ジオコーディング」と呼びます。[1]
ジオコーディングがどのように住所から座標情報を得るのかについては、こちらに説明がありました。
住所の表記方法は世界各国で異なりますが、住所文字列と座標情報(緯度・経度など)を管理するファイルをもとに対応付けます。この住所文字列と座標情報(緯度・経度など)を管理するファイルのことを「住所辞書」と呼びます。[2]
どうやらジオコーディングの精度は住所辞書が関係していそうです。
現在、ジオコーディングは有料のもの、無料のものを含め、多くのサービスが利用可能です。
有料のものではGoogle、Amazonがジオコーディング、逆ジオコーディングのサービスを提供しています。また、東京ガスエンジニアリングソリューションズ、ゼンリンデータコムも独自のジオコーディングサービスを提供しています。
無料のものでは、東京大学空間情報科学研究センターのCSVアドレスマッチングサービス、埼玉大学教育学部谷謙二研究室がサービスを提供しています。
今回はこれらのジオコーディングサービスについて、推定した位置の精度(正解地点と比較した時の誤差)と料金について比べてみました。
2. 調査対象
今回、以下の4つのジオコーディングサービスを調査対象としました。
1. Google Maps Platform: Geocoding API
2. Amazon Location Service (Esriエンジン)
3. Amazon Location Service (Hereエンジン)
4. CSVアドレスマッチングサービス
1~3は商用のサービス、4は東京大学空間情報科学研究センターが提供している無料のサービスです。無料でジオコーディングできるサービスがあるのは有難いですね。
Amazon Location Serviceでは4種類のデータプロバイダが利用可能です。この内、ジオコーディングを利用できるのはEsri、Here、GrabMaps の3つのプロバイダです。今回はEsriとHereの2つを調査対象としました。
3. 精度調査
各サービスのジオコーディング精度について見て行きましょう。
3.1 調査方法
調査方法として、予め緯度・経度が分かってる住所について、それぞれジオコーディングサービスを使って緯度・経度を求めます。ここでは前者を正解データ、後者を推定データと呼ぶことにします。
正解データの緯度・経度と推定データの緯度・経度を使って距離(誤差)を求め、どれだけ誤差が少なかったか、あるいは大きかったかを評価します。
各サービスへのリクエストには、郵便番号、住所、施設名を合わせた文字列で検索し、APIからのレスポンスの内、POI(Point of Interest)情報がある場合はその緯度・経度を、無い場合は最初に示された緯度・経度を使用しました。
Google Maps APIを使用したジオコーディングでPythonコードを以下に示します。
# Google Maps APIを使用したジオコーディング
import googlemaps
import csv
import geopy
from geopy import distance
if __name__ == '__main__':
# 予めGoogle Maps APIのキーを取得しておく。
gmaps = googlemaps.Client(key='***')
# 評価対象の地点のデータ
target_file = "geocoding_test.csv"
with open(target_file) as f:
reader = csv.reader(f)
for row in reader:
name, address, postal_code, lat_truth, lng_truth, type = row
# 郵便番号、住所、施設名をスペースで連結した文字列で検索する。
geocode_result = gmaps.geocode("%s %s %s" % (postal_code, address, name))
# APIからの結果から、緯度・経度を取り出す。
if len(geocode_result) > 0:
flag_poi = False
for i in range(len(geocode_result)):
# POI情報がある場合、POIの緯度・経度を使用する。
if "point_of_interest" in geocode_result[i]["types"]:
flag_poi = True
lat = geocode_result[i]["geometry"]["location"]["lat"]
lng = geocode_result[i]["geometry"]["location"]["lng"]
print("lat, lng = %f, %f" % (lat, lng))
break
# POI情報が無い場合、最初の緯度・経度を使用する。
if flag_poi is False:
print("No point_of_interest. First lat and lng will be used.")
lat = geocode_result[0]["geometry"]["location"]["lat"]
lng = geocode_result[0]["geometry"]["location"]["lng"]
# ジオコーディング結果の緯度・経度と正解データの緯度・経度から距離(誤差)を求める。
if lat is not NULL and lng is not NULL:
coordTruth = tuple([lat_truth, lng_truth])
coordEstimate = tuple([lat, lng])
dist = geopy.distance.geodesic(coordTruth, coordEstimate).m
print("dist: %.0f m" % dist)
次に正解データについて説明します。
3.2 正解データ
正解データとして、自治体オープンデータサイトが公開している、緯度・経度付きのデータを使用しました。ここでは北九州市の施設データを使用しました。
この施設データには1,310地点のデータが掲載されていますが、ここではランダムに224地点のデータをピックアップし、評価用データとして使用しました。
施設データは以下のような内容になっています(抜粋)。
名称 | 住所表記 | 郵便番号 | 緯度 | 経度 | 種別 |
---|---|---|---|---|---|
門司陸上競技場 | 北九州市門司区不老町1-1 | 800-0032 | 33.8982842 | 130.9363855 | スポーツ施設 |
小倉競輪場 | 北九州市小倉北区三萩野三丁目1-1 | 802-0065 | 33.871236 | 130.886552 | その他 |
北九州市営バス 折尾駅前案内所 | 北九州市八幡西区北鷹見町13-10 オリオンプラザ内 | 807-0834 | 33.8634776 | 130.713414 | その他 |
以下は抜き出した224件の施設について、正解地点(図1左側)と、Google Maps APIで取得した地点(図1右側)のプロット図です。
右側の図では、正解地点からの距離に応じて、点の大きさを変えています。点が大きいほど距離が大きいことを表しています。
ぱっと見たところ、大体合っていそうな印象ですが、地図の縮尺が小さいため、この見方では誤差を正しく判断できません。ただ、いくつか誤差が大きい地点があるようです。
地図を拡大してみると、「槻田児童館親子ふれあいルーム」と「学童保育館みのりクラブ」の2つの地点は大きく外れています(図2参照)。
槻田児童館親子ふれあいルームの推定結果を見ると、北九州市八幡東区役所東別館の緯度・経度になっており、この建物内に八幡東区親子ふれあいセンターがありました。推測ですが、「親子ふれあい」という文字列が部分的にマッチしたため、この場所が推定されたのかも知れません。
一方、学童保育館の方は、学童保育ではない別のお店の名前と部分的にマッチしたため、このお店の緯度・経度が表示されたようです。
3.3 結果
正解地点の緯度経度と推定した緯度経度を使って距離(誤差)を求めてみると、表2のようになりました。単位はmです。
誤差を中央値順に比べると、Google Maps API、Amazon(Here)、Amazon(Esri)、CSVアドレスマッチングサービスの順になりました。
次に、誤差のばらつきを図3に示します。縦軸は誤差(単位:m)、横軸は各サービスです。
誤差を箱ひげ図で表していますが、外れ値が多いため、箱の部分は下の方につぶれてしまっています。
ここで、表示する誤差の範囲を500mまでに限定すると、サービスごとの分布の違いが見えてきます(図4参照)。
Google, Amazon(Here)、Amazon(Esri)は概ねばらつきが似通っており、CSVアドレスマッチングサービスは他と比べ、分布が広がっています。
誤差が500m以上あった地点を図5に示します。
誤差の大きかった地点の傾向としては、住所に番地の記載が無いものや、地図上に施設名が記載されていないもので誤差が大きくなりました。
4. 料金比較
次にそれぞれのサービスの料金を比較します。各サービスの料金を表3にまとめました。(2023年4月24日現在)
No. | サービス名 | 料金 | 備考 |
---|---|---|---|
1 | Google Maps Platform API | $5.0 / 1,000リクエスト | 毎月$200までは無料 |
2 | Amazon Location Service(Hereエンジン) | $0.5 / 1,000リクエスト | アジアパシフィック(東京)リージョンの場合 |
3 | Amazon Location Service(Esriエンジン) | 同上 | 同上 |
4 | CSVアドレスマッチングサービス | 無料 |
有料サービスの中で安価なのはAmazonで、1,000リクエスト当たり$0.5です(アジアパシフィック(東京)リージョンの場合)。
また、Google Maps Platformは毎月$200までは無料で使えますが、それ以上になると1,000リクエストごとに$5.0かかります。
$200 で利用できるリクエスト回数は40,000リクエストまでなので、40,000件までであればGoogle Maps Platformを無料で利用できるようです。
また、リクエスト数(単位:千件)を変数 xとして、GoogleとAmazonの料金が釣り合うリクエスト数を計算してみると、
5x - 200 = 0.5x
4.5x = 200
x = 44.4
となり、月に44.4リクエスト(単位:千件)=4万4千リクエストまでであればGoogleを使うとお得で、それ以降はAmazonを使うとコストを抑えられます。(図6参照)
5. 考察
5.1 精度について
Google Maps APIは大半が誤差100m以内に入りましたが、外れ値として誤差が大きい地点も見られました。Amazon Location Service(Hereエンジン、Esriエンジン)も大半が誤差100m以内に収まっていますが、Hereエンジンの方でばらつきが大きくなっています。CSVアドレスマッチングサービスは誤差の大半が200m以内に収まりました。
誤差を生み出す要因として、以下が考えられます。
1. 住所辞書に該当する住所または施設名が掲載されていない
2. 住所辞書に複数の住所または施設名が登録されている
3. 住所辞書に登録された住所または施設名が更新されていない
4. 施設の敷地が広大で住所辞書に登録された地点が目的の地点を示していない
要因1は、住所辞書自体に探したい住所/施設名が掲載されていないケースです。この場合の対応策は、住所辞書の項目数を増やすことになります。この場合、利用者側では対応できないため、サービス提供者にお願いするしかなさそうです。
要因2は、住所辞書に複数の住所/施設名が掲載されているケースです。住所に関しては重複することは無いと思いますが、施設名が重複する場合、複数の推定結果からどれが求める結果であるかを判別する必要があります。ジオコーディングサービスからは住所、施設名の入力に対して、1つ以上の結果が返るため、結果が複数ある場合は、どれが求める結果であるかを目で見て確認する必要があります。このため、全自動で住所から緯度・経度に変換できるものと、そうでないものがあることを踏まえた上で、サービスを利用すると良いかと思います。
要因3は、住所辞書に登録された住所または施設名の情報が古く、更新されていないケースです。実際の施設は、様々な要因で位置が変更されることがあり、そのため、住所辞書は定期的にメンテナンスされる必要があります。住所辞書がメンテナンスされていないと、実際の施設の位置が変化したのに、住所辞書に記載された位置が更新されていないため、間違った結果が返ってきます。
要因3について、例を見てみましょう。
図7は、「北九州市営バス 折尾駅前案内所」をGoogle Maps APIで検索した地点と、正解データに記載された地点との比較です。左はGoogleで検索した地点、右は正解データに記載された地点です。この場合、正解データに記載された地点は古い地点で、Google Maps APIで検索した地点は最新の地点と言えそうです。
Google ストリートビューで確認してみると、正解データ付近のストリートビュー(図8参照)では、建物が無く、工事が行われており、Google Maps APIで検索した地点(図9参照)には、確かに「市営バス折尾駅前案内所」の表示が出ています。
これは2022年11月に撮影された写真のようです。
一方、今回使用した正解データは2016年3月8日のものでした。
2016年から2023年の間に、様々な要因で住所が変わった施設がある場合、正解データは利用できず、最新の住所辞書を使用したサービスが正しい結果となります。
この場合、Google の結果は正しく、Amazon(Here、Esri)は古い地点を指していました。このように、住所辞書が最新のものにメンテナンスされているかも重要なポイントです。
要因4は、施設の敷地面積が広大で、住所辞書に登録された地点が目的とする地点に合致しない場合です。これは郊外の農場や公園、ショッピングモール、土木工事現場など、敷地面積が広い施設で、住所辞書に登録された地点が管理事務所など一部の地点だけが登録されている場合、目的とする地点が住所辞書に登録された地点と一致しないケースです。
これも例を見てみましょう。
図10は、「皿倉山ケーブルカー」をGoogle Maps APIで検索した地点(図左)と正解データに記載された地点(図右)です。ケーブルカーが山腹に沿って存在することから、山麓と山頂で距離が大きくことなります。正解データは山麓の建物の位置を示していましたが、Googleの結果は山頂の建物の位置を示していました。このように、広大な敷地面積の施設の場合、敷地内のどの地点を正解と見なすかによって誤差が変わってきます。この場合、1.1kmの誤差となりました。
もう一つ例を見てみましょう。
図11は、イオンモール大和郡山店の地図上での表示です。左の図はGoogle Maps APIで検索した地点を表しています。一方、右は国土地理院地図[3]で表示した様子です。さらに右の図では、地理院地図の等距圏機能を使って半径100mの同心円を3本描いています。この図で見るように、郊外のショッピングモールは駐車場を含め、広大な敷地面積を有しています。
このように広大な敷地面積を持つ施設では、代表地点を見つけるだけでは不十分で、敷地内のどの場所かを探す必要が出てきます。
例えば、商品の搬入を行うトラックドライバーにとっては、ショッピングモールのどこに搬入口があるかを知る必要があります。
図12は、Google Mapsで確認した商品搬入口と、Google Maps APIで検索した地点の位置関係を示したものです。ジオコーディングによる推定結果の地点から搬入口までは200mほど離れています。このように、敷地面積が広い施設の場合、ジオコーディングの結果、目的とする地点が正しく得られているかを確認する必要があります。
建物の入口に関しては、ゼンリンさんがデータを整備しているそうです[4]。大変な労力だと思います。
なお、今回は国内で地域を限定して調査を行いましたが、国内の別の地域、また、海外の場合では結果は変わってくると思います。
5.2 料金について
費用面も気になるところです。
上で見たように、毎月の変換リクエスト数が4万件までであれば、Google Maps APIを無料で利用できます。
また、リクエスト数が4万4千件を超えた時は、Amazonのサービスが安価に利用できることを確認しました。
料金だけで言えば、無料のサービスを利用することでコストを抑えられますが、大学等で公開されているサービスは教育・研究が第一の目的であることから、それぞれの利用規約の範囲内で利用することが必要になります。
こうしたサービスを無償で提供して下さっている方々に感謝して利用させてもらいたいですね。
6. まとめ
今回はジオコーディングサービスについて、有料サービスのGoogle Maps API、Amazon Location Serviceと、無料のCSVアドレスマッチングサービスについて、精度と料金の比較を行いました。
精度ではGoogle Maps Platformが誤差と住所辞書のメンテナンスの点で有利であることが分かりました。
また、Amazon Location Service(Esriエンジン)もGoogle Maps APIと同程度の成績を示しました。CSVアドレスマッチングサービスは上の2つには及びませんでしたが、無償で利用できるサービスとして十分健闘していると思います。
なお、広大な敷地面積を持つ施設の場合、ジオコーディング結果が目的とする地点になっているかを確認する必要があることも確認しました。
費用面では有料サービスでは変換する住所のリクエスト数に応じて、料金が変わることを確認しました。
実際には精度と料金とを天秤にかけて使用するサービスを選択しますので、今回の調査結果がジオコーディングサービスを選ぶ際の一つのご参考になればと思います。
今回はこの辺で・・・
バイ!
参考資料
[1] 中島 円,「その問題、デジタル地図が解決します」,ベレ出版,2021年.
[2] 朝日孝輔,大友翔一,水谷貴行,山手規裕,「統計・防災・環境情報がひと目でわかる地図の作り方」,技術評論社,2014年.
[3] 国土地理院,地理院地図,https://maps.gsi.go.jp/ (参照 2023-04-27).
[4] GEMBA編集部,”地図情報の「ゼンリン」が語るーー次世代物流実現のカギはAIが読む高精度な地図データ”,GEMBA,2019-06-12,https://gemba-pi.jp/post-192513 (参照 2023-04-27).
地図や位置情報を用いたシステムのご提案・開発ならマルティスープへ
マルティスープは、創業以来のGISとモバイル開発の実績と技術力で、営業支援システムやリサーチ・公共インフラ・工事・警備業界の現場を支援するシステム開発など、地図や位置情報を使った業務システムの導入のご提案や開発をいたします。
現場をつなぐコミュニケーションが屋内外業務のパフォーマンスを最大限に。マルティスープのiField(アイ・フィールド)®シリーズは、屋内外業務の現場の実力を減少させるコミュニケーション障壁を除き、使い慣れたスマートデバイスを使って 現場の実力をリアルに伝えるサービス。
位置・空間情報のエキスパート集団として一緒に働きませんか?
マルティスープは地図情報をはじめとする位置・空間情報技術のエキスパート集団です。当社で日々研究している地図や位置情報といった技術は、災害支援など貢献度の高いシステムとして使用されることもあれば、スマートフォンアプリのゲームとして使われることもあり、その利用用途・価値は、今後もますます広がっていっています。
私たちの企業理念は、「創る喜び、使う喜び」です。
今後の開発体制をより強化するために、新卒・中途問わず、当社の未来を共に創っていただける新メンバーを募集します!
【関連記事】こんな記事も読まれています
2018.06.22
Google Maps Platform でAPIキーを新規に作成する方法
みなさん、こんにちは。
Google 社より5月3日に発表された Google Maps Platform では、APIキーを指定しないアクセ・・・
2018.08.02
Directions と Directions Advanced の違い
みなさん、こんにちは。
7月16日より、Google Maps APIs は Google Maps Platform と名前を変え、新しい価・・・
2017.05.19
みなさん、こんにちは。
Googleマップ上に同心円を書きたいと思ったことはありませんか? 私は、よくあります。
マルティスープで・・・
-
最新記事New Posts
-
人気記事Popular Posts
-
関連タグRelated Tags
-
アーカイブArchive