はじめに 前回はPlaces API全体について紹介しました。 今回はその中でもよく使われる機能である Nearby Search(周辺検索) について解説します。 現在地周辺の店舗検索や、地図アプリの「近くのお店」を実現する際に 非常に重要な機能です。 Places API New ↓ Nearby Searchとは? Nearby Searchは、指定した位置(緯度・経度)を中心に、 周辺の店舗や施設を検索できる機能です。 検索範囲(半径)や、店舗の種類(カフェ・レストランなど)を指定することで、 条件に合った場所の一覧を取得できます。 エンドポイントの指定 NearbySearchリクエストでは、以下のURLへHTTP POSTリクエストをします。 https://places.googleapis.com/v1/places:searchNearby 検索パラメータ(検索条件の指定) 検索条件 locationRestriction オブジェクト内 circle (centerの緯度経度とradius(半径))を使って、現在地から周辺エリアの情報を絞り込むことができる。 店舗・施設フィルタリング : i ncludedTypesで、例えばレストランでも、 "seafood_restaurant" 、 "restaurant" 、 "food" 、 "point_of_interest" 、 "establishment" などのタイプがあります。 includedTypes と excludedTypes を使用して、場所に関連付けられたタイプのリストで結果をフィルタ検索できます。 例 非常に具体的な指定 (特化型) • "seafood_restaurant" シーフード料理のお店のみ。 限定的で狭い範囲でユーザー好みに合う検索が可能。 一般的なカテゴリ指定 (標準的) • "restaurant" 飲食店全般。和食・洋食・中華など、提供する幅が広く検索が可能。 より広い業種指定 (広域) • "food" レストランだけでなく、カフェ・スーバー・飲食店系など「食」に関する施設全般を検索可能。 極めて汎用的な指定 (抽象的) "point_of_interest" (観光スポット・施設) "establishment" (店舗・施設) ほぼ全てのビジネスや公共施設も含まれている。 レストラン以外の公園・銀行・役所など。 リクエストで、 includedTypes 、 excludedTypes 、 includedPrimaryTypes 、 excludedPrimaryTypes を省略すると、検索では、位置情報の制限範囲内のすべてのタイプの場所が返されます。 フィールドマスク(取得項目の指定) 見つかった場所の、どこの情報(データ)を返してほしいかを制御する役割。 例えば、 「名前と住所だけ欲しい」といったように、必要な情報だけを指定して取得できます。 例 places.displayName places.formattedAddress 指定場所: HTTPヘッダー( X-Goog-FieldMask )またはURLパラメータ( fields )として指定します。 必須性: Nearby Searchでは必須項目になります。指定しないとエラーで返ってきます。 なぜフィールドマスクや検索パラメータは別々で定義する必要があるのか? フィールドマスクを別で用意する理由は、「不要なデータ項目の取得を避けるため」 以下、メリットです。 処理時間の短縮: 必要なデータのみ転送するので、レスポンスが早くなる。 課金の回避: 必要なデータだけに絞ることで、無駄な支払いを防げる。 まとめ Nearby Searchでは、 「半径500m圏内のレストランを探す」(検索条件) 「名前と住所だけ取得する」(フィールドマスク) のように、 「何を探すか」と「何を取得するか」を分けて設計できるのが特徴です。