ガイド

逆ジオコーディングで店舗検索を作る

店舗検索には、連携して動く2つの要素が必要です。顧客がどこにいるかを知る方法と、比較対象となる店舗の座標一覧です。前者は逆ジオコーディングですっきり解決できます。

座標を読みやすい場所に変換する

顧客が入力した場所やIP検索から顧客の座標を得たら、それを逆ジオコーディングして読みやすい地名を顧客に表示し、結果を表示する前に検索地点を確認してもらいます。

GET /v1/reverse?lat=51.5074&lon=-0.1278
{
  "status": "ok",
  "formatted": "Trafalgar Square, London, UK",
  "lat": 51.5074,
  "lon": -0.1278,
  "type": "address",
  "precision": "street",
  "confidence": 0.9,
  "place_id": "lm345",
  "components": {"city": "London", "country": "GB"}
}

最寄りの店舗を見つける

APIが返すのは座標であり、任意の2地点間の距離ではありません。顧客の緯度と経度が得られたら、2組の座標に対する標準的な大圏距離の計算で、自社一覧の各店舗までの距離を求めてください。その距離で店舗一覧を並べ替え、近い数件を表示します。

顧客に住所を入力してもらう場合

すべての訪問者が位置情報を共有してくれるわけではありません。住所を入力して検索する場合は、まず入力テキストを/v1/forwardでジオコーディングして座標を取得し、その結果に対して同じ最寄り店舗の距離計算を行います。住所全体の入力を待たずに、入力中に候補を表示したい場合は、/v1/autocompleteで入力補完フィールドを実装し、place_idまたは解決済みのテキストを同じジオコーディングの手順に渡せます。

2つ目の例:端末のGPSを使うモバイルアプリ

ネイティブアプリでは、端末の生の座標をすでに持っており、それを店舗一覧と直接比較できるため、近くの店舗を探すための逆ジオコーディングの手順は省略できます。それでも逆ジオコーディングは、顧客に表示する確認テキストで役に立ちます。単なる数値の組ではなく「ロンドン、トラファルガー広場付近の店舗を表示しています」のような表示は、結果をスクロールする前に、アプリが自分の位置を正しく理解していると顧客を安心させます。

避けるべきよくある間違い

距離計算を実行する前に、入力されたすべての住所が建物レベルの精度でジオコーディングされるとは考えないでください。都市名だけのような大まかなクエリでも結果は返りますが、精度は粗くなります。その粗い地点を顧客の建物を正確に特定したものとして扱うと、「最寄りの店舗」の順位は、confidenceとprecisionのフィールドから予想できたはずのものより信頼性が低くなります。

近くの2店舗が同距離になった場合

2つの店舗の計算距離がほぼ同じになった場合、距離だけではどちらが顧客に合っているかわかりません。両方を表示し、営業時間や在庫状況などの詳細を添えれば、恣意的な並び順ではなく、顧客自身が決め手を得られます。

一致を確認する

逆ジオコーディング結果の整形済み住所を店舗の結果と並べて表示すれば、検出または解決された場所が本当に検索したかった地点と一致しているかを顧客がすぐに確認でき、違っていれば修正できます。

コスト

検索1回につき、逆ジオコーディングまたはジオコーディングのリクエストは1件です。その後いくつの店舗と比較しても変わりません。両側の座標がそろえば、距離計算そのものは自社のコード内で行われるからです。1日に適度なトラフィックがある店舗検索なら、すべてのキーに含まれる1日あたりの無料リクエスト2,500件の範囲に余裕で収まります。

この方法で作る店舗検索は、顧客の検索1回につきジオコーディングリクエストがちょうど1件で済み、それ以降はすべて自社の店舗一覧に対してローカルで処理されます。レスポンスの全フィールドは逆ジオコーディングのドキュメントに掲載しています。