MULTISOUP

MULTISOUP

MULTISOUP

マルティスープ
Staff Blog

Introduction example

2023.05.15

ジオコーディングサービスの精度と料金について調べてみました

Photo by Szczecinolog – 30-28 Mazurska Street in Szczecin, address plate (2019) / Adapted.

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-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右側)のプロット図です。

右側の図では、正解地点からの距離に応じて、点の大きさを変えています。点が大きいほど距離が大きいことを表しています。

 

図1 地図上での正解地点(左)とGoogle Maps APIによる推定地点(右)

図1 地図上での正解地点(左)とGoogle Maps APIによる推定地点(右)


ぱっと見たところ、大体合っていそうな印象ですが、地図の縮尺が小さいため、この見方では誤差を正しく判断できません。ただ、いくつか誤差が大きい地点があるようです。

 

地図を拡大してみると、「槻田児童館親子ふれあいルーム」と「学童保育館みのりクラブ」の2つの地点は大きく外れています(図2参照)。

 

 

図2 正解地点からの距離が大きい地点(左:正解地点、右:Google Maps APIによる推定地点)

図2 正解地点からの距離が大きい地点(左:正解地点、右:Google Maps APIによる推定地点)

 

槻田児童館親子ふれあいルームの推定結果を見ると、北九州市八幡東区役所東別館の緯度・経度になっており、この建物内に八幡東区親子ふれあいセンターがありました。推測ですが、「親子ふれあい」という文字列が部分的にマッチしたため、この場所が推定されたのかも知れません。

一方、学童保育館の方は、学童保育ではない別のお店の名前と部分的にマッチしたため、このお店の緯度・経度が表示されたようです。

3.3 結果

正解地点の緯度経度と推定した緯度経度を使って距離(誤差)を求めてみると、表2のようになりました。単位はmです。

誤差を中央値順に比べると、Google Maps API、Amazon(Here)、Amazon(Esri)、CSVアドレスマッチングサービスの順になりました。

 

表2 誤差の比較(単位:m)
表2 誤差の比較

 

次に、誤差のばらつきを図3に示します。縦軸は誤差(単位:m)、横軸は各サービスです。

誤差を箱ひげ図で表していますが、外れ値が多いため、箱の部分は下の方につぶれてしまっています。

 

図3 サービス別の誤差のばらつき(全体)


ここで、表示する誤差の範囲を500mまでに限定すると、サービスごとの分布の違いが見えてきます(図4参照)。

Google, Amazon(Here)、Amazon(Esri)は概ねばらつきが似通っており、CSVアドレスマッチングサービスは他と比べ、分布が広がっています。

 

図4 サービス別の誤差のばらつき(誤差500mまで)


誤差が500m以上あった地点を図5に示します。

誤差の大きかった地点の傾向としては、住所に番地の記載が無いものや、地図上に施設名が記載されていないもので誤差が大きくなりました。

 

図5 誤差500m以上の地点

図5 誤差500m以上の地点

4. 料金比較

次にそれぞれのサービスの料金を比較します。各サービスの料金を表3にまとめました。(2023年4月24日現在)

 

表3 各サービスの料金
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参照)

 

図6 GoogleとAmazonの料金比較

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で検索した地点は最新の地点と言えそうです。

図7 正解地点が移動した例(Map data ©2023 Google)

図7 正解地点が移動した例(Map data ©2023 Google)

 

Google ストリートビューで確認してみると、正解データ付近のストリートビュー(図8参照)では、建物が無く、工事が行われており、Google Maps APIで検索した地点(図9参照)には、確かに「市営バス折尾駅前案内所」の表示が出ています。

これは2022年11月に撮影された写真のようです。

図8 正解データ付近のGoogleストリートビュー(Image capture: Nov 2022, ©2023 Google)

図8 正解データ付近のGoogleストリートビュー(Image capture: Nov 2022, ©2023 Google)

図9 Google Mapsで検索した地点付近のGoogleストリートビュー(Image capture: Nov 2022, ©2023 Google)

図9 Google Mapsで検索した地点付近のGoogleストリートビュー(Image capture: Nov 2022, ©2023 Google)


一方、今回使用した正解データは2016年3月8日のものでした。

2016年から2023年の間に、様々な要因で住所が変わった施設がある場合、正解データは利用できず、最新の住所辞書を使用したサービスが正しい結果となります。

この場合、Google の結果は正しく、Amazon(Here、Esri)は古い地点を指していました。このように、住所辞書が最新のものにメンテナンスされているかも重要なポイントです。

 

要因4は、施設の敷地面積が広大で、住所辞書に登録された地点が目的とする地点に合致しない場合です。これは郊外の農場や公園、ショッピングモール、土木工事現場など、敷地面積が広い施設で、住所辞書に登録された地点が管理事務所など一部の地点だけが登録されている場合、目的とする地点が住所辞書に登録された地点と一致しないケースです。

これも例を見てみましょう。

 

図10は、「皿倉山ケーブルカー」をGoogle Maps APIで検索した地点(図左)と正解データに記載された地点(図右)です。ケーブルカーが山腹に沿って存在することから、山麓と山頂で距離が大きくことなります。正解データは山麓の建物の位置を示していましたが、Googleの結果は山頂の建物の位置を示していました。このように、広大な敷地面積の施設の場合、敷地内のどの地点を正解と見なすかによって誤差が変わってきます。この場合、1.1kmの誤差となりました。

 

図10 敷地面積が広大な施設の例(Map data ©2023 Google)

図10 敷地面積が広大な施設の例(Map data ©2023 Google)

 

もう一つ例を見てみましょう。

図11は、イオンモール大和郡山店の地図上での表示です。左の図はGoogle Maps APIで検索した地点を表しています。一方、右は国土地理院地図[3]で表示した様子です。さらに右の図では、地理院地図の等距圏機能を使って半径100mの同心円を3本描いています。この図で見るように、郊外のショッピングモールは駐車場を含め、広大な敷地面積を有しています。

 

このように広大な敷地面積を持つ施設では、代表地点を見つけるだけでは不十分で、敷地内のどの場所かを探す必要が出てきます。

例えば、商品の搬入を行うトラックドライバーにとっては、ショッピングモールのどこに搬入口があるかを知る必要があります。

 

荷物を運ぶトラックドライバー

図11 敷地面積が広大な施設の例(左:Google Maps; Imagery ©2023 CNES / Airbus, Digital Earth Technology, Maxar Technologies, Planet.com, Map data ©2023 、右:国土地理院地図ウェブサイト)

 

 

図12は、Google Mapsで確認した商品搬入口と、Google Maps APIで検索した地点の位置関係を示したものです。ジオコーディングによる推定結果の地点から搬入口までは200mほど離れています。このように、敷地面積が広い施設の場合、ジオコーディングの結果、目的とする地点が正しく得られているかを確認する必要があります。

 

図12 代表地点と搬入口が離れているケース(左:Google Mapsで確認した搬入口; Imagery ©2023 Google, Imagery ©2023 CNES / Airbus, Digital Earth Technology, Maxar Technologies, Map data ©2023 、右:Google Maps APIで検索した地点と搬入口; Imagery ©2023 Google, Imagery ©2023 CNES / Airbus, Digital Earth Technology, Maxar Technologies, Planet.com, Map data ©2023 )

 

建物の入口に関しては、ゼンリンさんがデータを整備しているそうです[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(アイ・フィールド)®シリーズは、屋内外業務の現場の実力を減少させるコミュニケーション障壁を除き、使い慣れたスマートデバイスを使って 現場の実力をリアルに伝えるサービス。

位置・空間情報のエキスパート集団として一緒に働きませんか?

マルティスープは地図情報をはじめとする位置・空間情報技術のエキスパート集団です。当社で日々研究している地図や位置情報といった技術は、災害支援など貢献度の高いシステムとして使用されることもあれば、スマートフォンアプリのゲームとして使われることもあり、その利用用途・価値は、今後もますます広がっていっています。
私たちの企業理念は、「創る喜び、使う喜び」です。
今後の開発体制をより強化するために、新卒・中途問わず、当社の未来を共に創っていただける新メンバーを募集します!

【関連記事】こんな記事も読まれています

2017.09.24

Googleマップ上にベクトルタイルを描画してみる

みなさん、こんにちは。

前回のブログで紹介したベクトルタイルを 、Google マップ上に描画する方法を調査してみました。

続きを読む

2017.07.09

Geocoding API を使って郵便番号から住所を入力するフォーム

みなさん、こんにちは。

よく入力フォームで住所を入力するとき、郵便番号から自動で住所を入力する方法がありますね。今回は、Google Maps・・・

続きを読む

2017.03.05

Google マップにKMLファイルをロードする

みなさん、こんにちは。

今回は、Google Maps に KMLファイルをロードしてマーカー、ライン、ポリゴンを表示する方法を紹介します・・・

続きを読む

 - スタッフ日記