住所確認とジオコーディング

目標

場所の位置を確認する必要がある場合がよくあります。Google Maps Platform には、このユースケースに役立つさまざまなサービスがあります。このドキュメントは、2 つの主要な位置情報検証サービス(Address Validation API と Geocoding API)のどちらを使用するかを判断する際に役立ちます。

Address Validation API は、Google Maps Platform のサービスの一つで、住所が正確かどうかをお客様が検証するのに役立ちます。

Geocoding API を使用したジオコーディングとは、住所を地理座標に変換する処理のことです。地理座標を使用して、地図上にマーカーを配置したり、地図上の位置を指定したりできます。

Address Validation と Geocoding API の違いの概要については、こちらをご覧ください。

Address Validation API と Geocoding API のどちらを選択すべきか

Address-Validation-vs-Geocoding

上記のフローチャートに関する注意事項:

  • ユーザー インタラクションのユースケースとは、ユーザーが結果を操作する場合を指します。
  • Place Autocomplete は JavaScript API であるため、ユーザー インターフェースとの統合に適しています。
  • 既存の住所にデータ品質の問題があることに気づいているかもしれません。そのため、ジオコードのみが必要な場合でも、Address Validation API を介してそれらの位置情報を実行し、データセットを修正することをおすすめします。

上記のディシジョン ツリーに基づいて、あるプロダクトを別のプロダクトよりも優先して使用する状況は数多くあります。しかし、目標を達成するために両方のプロダクトを使用する必要がある場合もあります。

次のような場合は、Geocoding API ではなく Address Validation API を使用することをおすすめします。

  • データに問題がある可能性が高い場合や、誤った住所を取得すると下流に悪影響を及ぼす場合。これは、Address Validation API が、入力に対して高精度の結果が得られなかった理由について、より多くのフィードバックを提供するためです。
  • ユーザー入力(スペルミスやフィールドの欠落など)を修正する必要があり、出力で正確な結果が得られる可能性が高まります。
  • 対象地域では、Geocoding API と比較して、Address Validation API からより多くのメタデータ(住宅用と商業用の建物タイプの分類など)が返されます。

次のような場合は、Address Validation API ではなく Geocoding を使用することをおすすめします。

  • 主な目的は住所の位置を取得することであり、個々の住所の精度は重要ではない可能性があります。
    • たとえば、大規模なデータセットからヒートマップを生成する場合などです。
  • 建物の入口、建物の輪郭、乗車 / 降車ナビゲーション ポイントなどのハイパーローカルな目的地の詳細情報が必要である(Geocoding API v4 の SearchDestinations メソッドで利用可能)。
  • グローバル ソリューションが必要で、Address Validation API がすべての対象地域で利用できない。

次に、Geocoding API と比較した Address Validation API の機能を示す例をいくつか示します。

無効な住所の例

1 Fake St, Mountain View, CA 94043, USA

Address Validation API は、この入力を個々の住所コンポーネント(番地、市区町村、都道府県など)に分解します。また、住所が無効な理由について、PREMISE レベルまで詳細なフィードバックを提供することもできます。

Fake St はカリフォルニア州マウンテンビューには存在しません。Address Validation API は、返されたコンポーネント レベルの詳細にそのことを反映します。

{
  "componentName": {
    "text": "Fake St",
    "languageCode": "en"
   },
   "componentType": "route",
   "confirmationLevel":"UNCONFIRMED_BUT_PLAUSIBLE"
 }

この場合に検査する重要なプロパティは confirmationLevel です。Fake St に対して UNCONFIRMED_BUT_PLAUSIBLE を返すことで、API は、その名前を持つ通りが存在する可能性はあるものの、対応する住所データと一致させることができないと判断しています。

API の結果をフィードバックとして使用すると、この入力の番地コンポーネント(Fake St)に問題があると推測できます。

Geocoding API で同じ住所を使用すると、ジオコーディング ツールのスクリーンショットに表示されているように「California」と一致します。このツールはこちらでお試しいただけます。

alt_text

ただし、結果は州全体のジオコードであり、入力のどのコンポーネントに不具合があったかについてのフィードバックは最小限です。

スペルミスの例

76 Buckingamm Palace Road, Londn, SW1W 9TQ, GB

上記の住所には、町名と地域にそれぞれ 1 つずつ、計 2 つのスペルミスがあります。

Address Validation API と Geocoding API の両方で、これらの間違いを修正し、76 Buckingham Palace Road, London, SW1W 9TQ という結果を得ることができます。ただし、Address Validation API を使用すると、このプロセスに関する詳細情報を取得できます。

入力時にスペルミスがあった住所コンポーネントの 1 つを見てみましょう。

{
  "componentName": {
    "text": "Buckingham Palace Road",
    "languageCode": "en"
        },
        "componentType": "route",
        "confirmationLevel": "CONFIRMED",
        "spellCorrected": true
     }
}

Address Validation API は、フィールドが修正されたことを示すフラグを返します。このフラグに対してビジネス ロジックを実装して、データ プロバイダ(e コマースの購入手続きを行う顧客など)による修正を再確認できます。

データの欠落とスペルミスの例

Bollschestraße 86, 12587, DE

上記の住所では、町名のスペルが間違っており、市区町村(地域)の Berlin が抜けています。

Address Validation API は、これらのエラーを両方とも修正し、PREMISE レベルのジオコードと、PREMISE レベルまで検証された住所を返します。

Bölschestraße 86, 12587 Berlin, DE

この場合、Geocoding API は入力エラーを正常に克服できず、ZERO_RESULTS の結果を返します。

追加の住所メタデータの例

111 8th Avenue Ste 123, New York, NY 10011-5201, US

この住所は、建物内に存在しないユニット番号(Ste 123)を除いて正しいです。

Address Validation API は、住所を PREMISE(111 8th Ave)まで検証し、その物件に関するメタデータ(商業用であることなど)を提供できます。

premises:

"business": true

また、レスポンスの uspsData の一部として返される dpvConfirmation の値は S です。

"dpvConfirmation": "S"

dpvConfirmation の値が S の場合、住所は PREMISE レベルで検証されていますが、入力で指定された部屋番号はその住所に関連付けられていません。

Geocoding API ではこの情報を提供できません。

Geocoding API レスポンスについて

概要

Geocoding API を使用すると、ジオコーディングの結果として、提供された住所の詳細を把握するために使用できるさまざまな情報がレスポンスに含まれます。

Geocoding API は、階層内の住所コンポーネントを解決する仕組みで動作します。

たとえば、123 Example Street, Chicago, 60007, USA は次の順序で解決されます。

/ Example Street/ Chicago/ 60007/ USA はこの順序で評価されます。この場合、最初に一致するのはシカゴ、具体的には郵便番号 60007 です。したがって、その郵便番号に対して次の Place_id が返されます。

ChIJwRKzf8ixD4gRHiXqucwr_HQ

Geocode API のレスポンスには、次の情報が含まれます。

        "partial_match": true,
           "place_id": "ChIJwRKzf8ixD4gRHiXqucwr_HQ",
           "types": [
               "postal_code"
           ]

Geocoding API を使用すると、この住所がどのような場所に対応しているかを確認できます。Geocoding API から返される住所 types のリストについては、こちらをご覧ください。

入力のコンポーネントが 1 つも解決されない場合、API は次を返します。

{
   "results": [],
   "status": "ZERO_RESULTS"
}

番地なしで町名と番地のみを指定してリクエストを行うと、次のような形式で結果が返されます。

"types": [
  "route"
]

つまり、Geocoding API で番地が見つからなかったか、一致しなかったことを意味します。

注: 住所が存在するかどうかを確認するには、Geocoding API レスポンスでパラメータ(types、partial_match, results, status) など)が設定されているかどうかを確認します。これにより、アドレスが存在する可能性の信頼度は徐々に高まりますが、100% 正確になるわけではありません。そのため、Address Validation API が必要になります。

上記の手法を使用すると、Geocoding API レスポンスのみから住所の精度に対する信頼性を高めることができます。ただし、Address Validation API の結果とは異なり、Geocoding API は結果の精度を判断するための正確なフィードバックを返しません。

ロケーション タイプ

このセクションを正しく理解するには、Geocoding API のレスポンスから返される可能性のあるさまざまな場所の種類を理解する必要があります。

  • ROOFTOP は、返された結果が正確なジオコーディングであることを示します。この場合、番地レベルの精度で位置情報が返されます。
  • RANGE_INTERPOLATED は、返された結果が(交差点などの)正確な 2 地点間で補間された近似値(通常は道路上)を反映していることを示します。補間された結果が返されるのは、番地に対してルーフトップ ジオコーディングが使用できない場合が一般的です。
  • GEOMETRIC_CENTER は、返された結果が、ポリライン(道路など)やポリゴン(地域)などの幾何学的な中心であることを示します。
  • APPROXIMATE は、返された結果が上記のいずれでもないことを示します。

Geocoding API が location_type の ROOFTOP または RANGE_INTERPOLATED を返しても、必ずしも住所が存在するとは限りません。同様に、Geocoding API が partial_match フラグを true に設定して返した場合でも、それが正しい結果である可能性があります。

このタイプの誤照合は、Geocoding API で解決するのが非常に難しい問題です。少なくとも、リクエスト / レスポンスの国と地域に対して、基本的な後処理検証を実装することを検討してください。さらに、実際の番地を比較して、スペルミスや不完全な住所がないかを確認します。

注: Geocoding API を使用する場合は、最初のリクエストと Geocoding API レスポンスの間でデータ品質チェックを定期的に行うことをおすすめします。

部分一致と誤った一致

住所が部分一致の場合(Geocoding API が住所を正確に特定できなかった場合)、レスポンスには次の情報が含まれます。

"partial_match": true,
"types": [
           "locality",
           "political"
         ]

上記のロケーション タイプよりも重要なのは、レスポンスに partial_match = true が含まれている場合を考慮することです。 partial_match は、Geocoding API によって、元のリクエストに完全一致する住所は見つからなかったものの、部分一致する住所は見つかったことを示します。

元のリクエストで住所が不完全である可能性があります。多くの場合、リクエストで指定された地域に番地が存在しないために部分一致が発生します。また、同じ地域内に複数の場所があるリクエストを行った場合も部分一致が返されます。

たとえば、「21 Henr St, Bristol, UK」の場合は、Henry Street と Henrietta Street の両方の部分一致が返されます。リクエストに表記が間違った住所コンポーネントが含まれている場合、Geocoding API が別の住所を提示することもある点に注意してください。この場合、部分一致として結果が返されることはありません。

合成アドレス

Geocoding API は、Google のデータベースに正確な位置情報として存在しない「合成」住所の位置情報を返すことがあります。

このような場合、レスポンス オブジェクトには長いプレイス ID と geometry.location_type=APPROXIMATE プロパティが含まれることがよくあります。

レスポンスにこれらのインジケーターが含まれている場合は、入力された住所を無効としてマークし、別の方法で再検証することを検討してください。

注: これは、Address Validation API で住所が存在しない場合に直接フィードバックを受け取る別の例です。

Address Validation API のレスポンスについて

Address Validation API からのレスポンスを理解する方法については、すでに優れたドキュメントが用意されているため、ここでは詳しく説明しません。

ベスト プラクティス

地域を指定する

Address Validation API または Geocoding API を呼び出す際は、住所を検索する地域を制限することをおすすめします。2 つの API は、これを 2 つの異なる方法で実装します。

  • Geocoding API - 地域バイアス

    ジオコードが特定の国に存在することがわかっている場合は、地域バイアスを使用すると、より適切な結果が得られます。たとえば、カナダでジオコーディングを行う場合は、リクエストに &region=ca を追加してカナダにバイアスをかけることをおすすめします。なお、地域バイアスで優先されるのはその地域内の結果のみです。地域外の結果が表示されることもあります。

  • Address Validation API - 地域コード

    同様に、Address Validation API では、regionCode フィールドを使用して ISO2 コードをリクエストに渡すと、より正確な結果が得られます。

場所 ID の保存

今後のリクエスト用に Google Maps Platform の場所情報を保管しておくには、場所の属性として、プレイス ID をデータベースに無期限に保存することをおすすめします。Find Place リクエストは、placeID ごとに 1 回のみ行う必要があります。ユーザーが取引明細をリクエストするたびにプレイス ID を検索することもできます。

常に最新の情報にアクセスできるように、Place Details リクエストと place_id パラメータを使用し、12 か月ごとにプレイス ID を更新します。

注: ジオコーディングのベスト プラクティス ガイドもご確認ください。

まとめ

このドキュメントでは、Address Validation API と Geocoding API の主な違いについて説明します。まとめると、Address Validation API の使用を検討すべきなのは、次のような場合です。

  • 特に配信可能性の観点から、正確な郵送先住所が必要です。
  • 入力データの品質が低いことがわかっている。Address Validation API は入力エラーに対してより寛容で、検証できない住所コンポーネントをハイライト表示し、入力データを修正します。
  • 住所に関する詳細情報(住宅用か商業用かなど)が必要です(一部の地域で利用可能)。

次のステップ

信頼性の高い住所で購入手続き、配送、オペレーションを改善する ホワイトペーパーをダウンロードし、Address Validation で購入手続き、配送、オペレーションを改善する ウェブセミナーをご覧ください。

参考資料:

寄稿者

この記事は Google が管理しています。このドキュメントは、以下のコントリビューターによって作成されました。

主な著者:

Henrik Valve | ソリューション エンジニア

Thomas Anglaret | ソリューション エンジニア

Sarthak Ganguly | ソリューション エンジニア