テキスト検索(新版)

プラットフォームを選択: Android iOS JavaScript ウェブサービス

欧州経済領域(EEA)のデベロッパー

テキスト検索は、�����������基づいてプレイスのセットに関する情報を返します。たとえば、「渋谷 ピザショップ」「表参道 靴店」「123 番地」などです。テキスト文字列と、その時点で設定済みの地域バイアスをもとに、場所のリストを返すサービスです。

このサービスは、自動化されたシステムで曖昧な住所クエリを行う場合に特に便利です。文字列の住所以外のコンポーネントは、住所だけでなくビジネスにも一致する可能性があります。曖昧な住所クエリの例としては、住所の形式が正しくない場合や、ビジネス名などの住所以外のコンポーネントを含むリクエストがあります。最初の 2 つの例のようなリクエストでは、地域、地域の制限、位置情報のバイアスなどの位置情報が設定されていない限り、結果が返されない可能性があります。

「10 High Street, UK」、「123 Main Street, US」 英国には複数の「High Street」があり、米国には複数の「Main Street」があります。位置情報の制限を設定しないと、クエリで望ましい結果が返されない。
「ニューヨークのチェーン店」 ニューヨークに複数の「チェーン レストラン」の所在地があるが、番地も通り名もない。
「10 High Street, Escher UK」または「123 Main Street, Pleasanton US」 英国の都市エッシャーには「High Street」が 1 つしかなく、米国の都市プレザントン CA には「Main Street」が 1 つしかありません。
「UniqueRestaurantName New York」 ニューヨークにこの名前の施設は 1 つしかないため、区別するために住所は必要ありません。
「ニューヨークのピザ レストラン」 このクエリには場所の制限が含まれており、「ピザレストラン」は明確に定義された場所のタイプです。複数の結果が返されます。
「+1 514-670-8700」

このクエリには電話番号が含まれています。その電話番号に関連付けられているビジネスの複数の結果が返されます。

テキスト検索で場所のリストを取得する

GMSPlacesClient searchByTextWithRequest: を呼び出してテキスト検索リクエストを行い、リクエスト パラメータとレスポンスを処理する GMSPlaceSearchByTextResultCallback 型のコールバック メソッドを定義する GMSPlaceSearchByTextRequest オブジェクトを渡します。

GMSPlaceSearchByTextRequest オブジェクトは、リクエストの必須パラメータと省略可能パラメータをすべて指定します。必須パラメータは次のとおりです。

  • GMSPlace オブジェクトで返されるフィールドのリスト。GMSPlaceProperty で定義されるフィールド マスクとも呼ばれます。フィールド リストで 1 つ以上のフィールドを指定しない場合、またはフィールド リストを省略した場合、呼び出しはエラーを返します。
  • テキスト クエリ

このテキスト検索リクエストの例では、検索結果の各 GMSPlace オブジェクトの地名とプレイス ID がレスポンスの GMSPlace オブジェクトに含まれるように指定しています。また、レスポンスをフィルタして、タイプが「restaurant」の場所のみを返します。

Places Swift SDK

let restriction = RectangularLocationRestriction(
      northEast: CLLocationCoordinate2D(latitude: 20, longitude: 30),
      southWest: CLLocationCoordinate2D(latitude: 40, longitude: 50)
)
let searchByTextRequest = SearchByTextRequest(
        textQuery: "pizza in New York",
        placeProperties: [ .name, .placeID ],
        locationRestriction: restriction,
        includedType: .restaurant,
        maxResultCount: 5,
        minRating: 3.5,
        priceLevels: [ .moderate, .inexpensive ],
        isStrictTypeFiltering: true
)
switch await placesClient.searchByText(with: searchByTextRequest) {
case .success(let places):
  // Handle places
case .failure(let placesError):
  // Handle error
}

Swift

// Create the GMSPlaceSearchByTextRequest object.
let myProperties = [GMSPlaceProperty.name, GMSPlaceProperty.placeID].map {$0.rawValue}
let request = GMSPlaceSearchByTextRequest(textQuery:"pizza in New York", placeProperties:myProperties)
request.isOpenNow = true
request.includedType = "restaurant"
request.maxResultCount = 5
request.minRating = 3.5
request.rankPreference = .distance
request.isStrictTypeFiltering = true
request.locationBias =  GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0)

// Array to hold the places in the response
var placeResults: [GMSPlace] = []

let callback: GMSPlaceSearchByTextResultCallback = { [weak self] results, error in
  guard let self, error == nil else {
    if let error {
      print(error.localizedDescription)
    }
    return
  }
  guard let results = results as? [GMSPlace] else {
    return
  }
  placeResults = results
}

GMSPlacesClient.shared().searchByText(with: request, callback: callback)

Objective-C

// Create the GMSPlaceSearchByTextRequest object.
GMSPlaceSearchByTextRequest *request =
    [[GMSPlaceSearchByTextRequest alloc] initWithTextQuery:@"pizza in New York" placeProperties:@[GMSPlacePropertyName, GMSPlacePropertyPlaceID]];
request.isOpenNow = YES;
request.includedType = @"restaurant";
request.maxResultCount = 5;
request.minRating = 3.5;
request.rankPreference = GMSPlaceSearchByTextRankPreferenceDistance;
request.isStrictTypeFiltering = YES;
request.priceLevels = @[ @(kGMSPlacesPriceLevelFree), @(kGMSPlacesPriceLevelCheap) ];
request.locationBias = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0);

// Array to hold the places in the response
_placeResults = [NSArray array];

// Create the GMSPlaceSearchByTextRequest object.
[_placesClient searchByTextWithRequest:request
    callback:^(NSArray<GMSPlace *> *_Nullable placeResults, NSError * _Nullable error) {
      if (error != nil) {
        NSLog(@"An error occurred %@", [error localizedDescription]);
        return;
      } else {
        if (placeResults.count > 0) {
          // Get list of places.
          _placeResults = placeResults;
      }
    }
  }
];

Text Search レスポンス

Text Search API は、一致する場所ごとに 1 つの GMSPlace オブジェクトを含む GMSPlace オブジェクトの形式で、一致する場所の配列を返します。

営業ステータスを取得する

GMSPlacesClient オブジェクトには、呼び出しで指定された時間に基づいて、現在地が営業中かどうかを示すレスポンスを返す isOpenWithRequest(Swift では isOpenRequest、GooglePlacesSwift では isPlaceOpenRequest)というメンバー関数が含まれています。

このメソッドは、次のものを含む GMSPlaceIsOpenWithRequest 型の単一の��数を取ります。

  • GMSPlace オブジェクト、またはプレイス ID を指定する文字列。必要なフィールドを含む Place オブジェクトの作成の詳細については、プレイスの詳細をご覧ください。
  • 確認する時間を指定するオプションの NSDate(Obj-C)または Date(Swift)オブジェクト。時間が指定されていない場合、デフォルトは現在時刻です。
  • レスポンスを処理する GMSPlaceOpenStatusResponseCallback メソッド。
  • >

GMSPlaceIsOpenWithRequest メソッドでは、GMSPlace オブジェクトに次のフィールドを設定する必要があります。

  • GMSPlacePropertyUTCOffsetMinutes
  • GMSPlacePropertyBusinessStatus
  • GMSPlacePropertyOpeningHours
  • GMSPlacePropertyCurrentOpeningHours
  • GMSPlacePropertySecondaryOpeningHours

これらのフィールドが Place オブジェクトで指定されていない場合、またはプレイス ID を渡した場合は、GMSPlacesClient GMSFetchPlaceRequest: を使用して取得します。

isOpenWithRequest レスポンス

isOpenWithRequest は、ビジネスが営業中か、閉店しているか、ステータスが不明かを示す status というブール値を含む GMSPlaceIsOpenResponse オブジェクトを返します。

言語 オープン時の値 閉店時の値 ステータスが不明な場合の値
Places Swift true false nil
Swift .open .closed .unknown
Objective-C GMSPlaceOpenStatusOpen GMSPlaceOpenStatusClosed GMSPlaceOpenStatusUnknown

isOpenWithRequest の請求

  • GMSPlacePropertyUTCOffsetMinutes フィールドと GMSPlacePropertyBusinessStatus フィールドは、Basic Data SKU の対象となります。残りの営業時間は Place Details Enterprise SKU に基づいて課金されます。
  • GMSPlace オブジェクトに以前のリクエストからのこれらのフィールドがすでに存在する場合、再度課金されることはありません。

例: GMSPlaceIsOpenWithRequest リクエストを作成する

次の例は、既存の GMSPlace オブジェクト内で GMSPlaceIsOpenWithRequest を初期化する方法を示しています。

Places Swift SDK

        let isOpenRequest = IsPlaceOpenRequest(place: place)
        switch await placesClient.isPlaceOpen(with: isOpenRequest) {
          case .success(let isOpenResponse):
            switch isOpenResponse.status {
              case true:
                // Handle open
              case false:
                // Handle closed
              case nil:
                // Handle unknown
          case .failure(let placesError):
            // Handle error
        }
        

Swift

    let isOpenRequest = GMSPlaceIsOpenRequest(place: place, date: nil)
      GMSPlacesClient.shared().isOpen(with: isOpenRequest) { response, error in
        if let error = error {
          // Handle Error
        }
        switch response.status {
          case .open:
            // Handle open
          case .closed:
            // Handle closed
          case .unknown:
            // Handle unknown
        }
      }
        

Objective-C

          GMSPlaceIsOpenRequest *isOpenRequest = [[GMSPlaceIsOpenRequest alloc] initWithPlace:place date:nil];

          [[GMSPlacesClient sharedClient] isOpenWithRequest:isOpenRequest callback:^(GMSPlaceIsOpenResponse response, NSError *_Nullable error) {
            if (error) {
              // Handle error
            }

            switch (response.status) {
              case GMSPlaceOpenStatusOpen:
                // Handle open
              case GMSPlaceOpenStatusClosed:
                // Handle closed
              case GMSPlaceOpenStatusUnknown:
                // Handle unknown
            }
          }];
          

必須パラメータ

GMSPlaceSearchByTextRequest オブジェクトを使用して、検索に必要なパラメータを指定します。

  • フィールド リスト

    返す場所データのプロパティを指定します。返すデータ フィールドを指定する GMSPlace プロパティのリストを渡します。フィールド マスクを省略すると、リクエストはエラーを返します。

    フィールド リストは、不要なデータをリクエストしないようにするための優れた設計手法です。これにより、不要な処理時間と課金を回避できます。

    次のフィールドを 1 つ以上指定します。

    • 次のフィールド���、Text Search Essentials ID Only SKU をトリガーします。

      GMSPlacePropertyPlaceID
    • 次のフィールドは、Text Search Pro SKU をトリガーします。

      GMSPlacePropertyAddressComponents
      GMSPlacePropertyBusinessStatus
      GMSPlacePropertyCoordinate
      GMSPlacePropertyFormattedAddress
      GMSPlacePropertyIconBackgroundColor
      GMSPlacePropertyIconImageURL
      GMSPlacePropertyName
      GMSPlacePropertyPhotos
      GMSPlacePropertyPlusCode
      GMSPlacePropertyTypes
      GMSPlacePropertyUTCOffsetMinutes
      GMSPlacePropertyViewport
      GMSPlacePropertyWheelchairAccessibleEntrance
    • 次のフィールドは Text Search Enterprise SKU をトリガーします。

      GMSPlacePropertyCurrentOpeningHours
      GMSPlacePropertySecondaryOpeningHours
      GMSPlacePropertyPhoneNumber
      GMSPlacePropertyPriceLevel
      GMSPlacePropertyRating
      GMSPlacePropertyOpeningHours
      GMSPlacePropertyUserRatingsTotal
      GMSPlacePropertyWebsite
    • 次のフィールドは Text Search Enterprise Plus SKU をトリガーします。

      GMSPlacePropertyCurbsidePickup
      GMSPlacePropertyDelivery
      GMSPlacePropertyDineIn
      GMSPlacePropertyEditorialSummary
      GMSPlacePropertyReservable
      GMSPlacePropertyReviews
      GMSPlacePropertyServesBeer
      GMSPlacePropertyServesBreakfast
      GMSPlacePropertyServesBrunch
      GMSPlacePropertyServesDinner
      GMSPlacePropertyServesLunch
      GMSPlacePropertyServesVegetarianFood
      GMSPlacePropertyServesWine
      GMSPlacePropertyTakeout
  • textQuery

    検索するテキスト文字列(「レストラン」、「123 番通り」、「サンフランシスコのおすすめスポット」など)。

オプション パラメータ

GMSPlaceSearchByTextRequest オブジェクトを使用して、検索の省略可能なパラメータを指定します。

  • includedType

    結果を、表 A で定義された指定したタイプに一致する場所に制限します。指定できるタイプは 1 つだけです。次に例を示します。

    • let request = SearchByTextRequest()
      request.includedType = "bar"
    • let request = SearchByTextRequest()
      request.includedType = "pharmacy"
  • isOpenNow

    true の場合、クエリが送信された時点で営業している場所のみを返します。false の場合、営業状況に関係なくすべてのビジネスを返します。このパラメータを false に設定すると、Google プレイスのデータベースに営業時間が登録されていない場所も返されます。

  • isStrictTypeFiltering

    includeType パラメータとともに使用されます。true に設定すると、includeType で指定されたタイプに一致する場所のみが返されます。false(デフォルト)の場合、レスポンスには指定されたタイプと一致��ない場所が含まれることがあります。

  • locationBias

    検索する領域を指定します。この位置はバイアスとして機能します。つまり、指定されたエリア外の結果を含め、指定された位置周辺の結果が返される可能性があります。

    locationRestriction または locationBias を指定できますが、両方は指定できません。locationRestriction は、結果がその範囲内にある必要があるリージョンを指定するもの、locationBias は、結果がその範囲の近くにある必要があるが、範囲外でもよいリージョンを指定するものと考えることができます。

    リージョンを長方形のビューポートまたは円として指定します。

    • 円は、中心点と半径(メートル単位)で定義されます。半径は 0.0 ~ 50000.0 の範囲で指定してください。デフォルトの半径は 0.0 です。次に例を示します。

      let request = SearchByTextRequest()
      request.locationBias =  GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0)
    • 長方形は緯度と経度のビューポートで、対角線上の 2 つの低点と高点として表されます。低点は長方形の南西の角を示し、高点は長方形の北東の角を示します。

      ビューポートは閉じた領域と見なされます。つまり、境界が含まれます。緯度の境界は -90 ~ 90 度(両端を含む)、経度の境界は -180 ~ 180 度(両端を含む)の範囲で指定する必要があります。

      • low = high の場合、ビューポートはその単一点で構成されます。
      • low.longitude > high.longitude の場合、経度範囲は反転します(ビューポートが経度 180 度の線を横切ります)。
      • low.longitude = -180 度、high.longitude = 180 度の場合、ビューポートにはすべての経度が含まれます。
      • low.longitude = 180 度、high.longitude = -180 度の場合、経度の範囲は空になります。
      • low.latitude > high.latitude の場合、緯度範囲は空になります。
  • locationRestriction

    検索する領域を指定します。指定した範囲外の結果は返されません。リージョンを長方形のビューポートとして指定します。ビューポートの定義については、locationBias の説明をご覧ください。

    locationRestriction または locationBias を指定できますが、両方は指定できません。locationRestriction は、結果がその範囲内にある必要があるリージョンを指定するもの、locationBias は、結果がその範囲の近くにある必要があるが、範囲外でもよいリージョンを指定するものと考えることができます。

  • maxResultCount

    返される場所の結果の最大数を指定します。1 ~ 20(デフォルト)の範囲で指定する必要があります。

  • minRating

    結果を、ユーザーの平均評価がこの上限以上のものに制限します。値は 0.0 ~ 5.0(指定した値を含む)の範囲で 0.5 刻みで指定する必要があります。たとえば、0、0.5、1.0、...、5.0(両端を含む)などです。値は 0.5 単位で切り上げられます。たとえば、値が 0.6 の場合、評価が 1.0 未満の結果はすべて除外されます。

  • priceLevels

    検索対象を特定の料金レベルでマークされている場所に制限します。デフォルトでは、すべての価格レベルが選択されています。

    PriceLevel で定義された 1 つ以上の値の配列を指定します。

    次に例を示します。

        let request = SearchByTextRequest()
        request.priceLevels = [GMSPlacesPriceLevel.moderate.rawValue, GMSPlacesPriceLevel.cheap.rawValue]
  • rankPreference

    クエリのタイプに基づいて、レスポンスで結果をランク付けする方法を指定します。

    • 「ニューヨーク市のレストラン」などのカテゴリ検索の場合、.relevance(検索の関連性で結果をランク付け)がデフォルトです。rankPreference.relevance または .distance(距離で結果をランク付け)に設定できます。
    • 「Mountain View, CA」などのカテゴリなしのクエリの場合は、rankPreference を設定しないままにしておくことをおすすめします。
  • regionCode

    レスポンスのフォーマットに使用される地域コード。 2 文字の CLDR コード値として指定します。このパラメータは、検索結果にバイアス効果をもたらすこともあります。デフォルト値はありません。

    レスポンスの住所フィールドの国名が地域コードと一致する場合、住所から国コードが省略されます。

    大半の CLDR コードは ISO 3166-1 コードと同一ですが、いくつか注意が必要な例外もあります。たとえば、英国の ccTLD は「uk」(.co.uk)ですが、ISO 3166-1 コードは「gb」(厳密には「グレートブリテンおよび北アイルランド連合王国」のエンティティ用)です。このパラメータは、適用される法律に基づいて結果に影響を与える可能性があります。

  • shouldIncludePureServiceAreaBusinesses

    true の場合、検索結果に純���なサービス エリア ビジネスを返します。非店舗型ビジネスは、客先に出向いてサービスを提供し、ビジネス拠点の住所では接客しないビジネスです。

    次に例を示します。

    Places Swift SDK

    let request = SearchByTextRequest()
    request.shouldIncludePureServiceAreaBusinesses = true

    Swift

    let request = SearchByTextRequest()
    request.shouldIncludePureServiceAreaBusinesses: true

    Objective-C

    GMSPlaceSearchByTextRequest *request =
        [[GMSPlaceSearchByTextRequest alloc] initWithTextQuery:@"pizza in New York" placeProperties:@[GMSPlacePropertyAll]];
    request.shouldIncludePureServiceAreaBusinesses = YES;

アプリに属性を表示する

アプリで GMSPlacesClient から取得した情報(写真やクチコミなど)を表示する場合、必要な帰属情報も表示する必要があります。

たとえば、GMSPlacesClient オブジェクトの reviews プロパティには、最大 5 個の GMSPlaceReview オブジェクトの配列が含まれます。各 GMSPlaceReview オブジェクトには、帰属情報と著者の帰属情報を含めることができます。アプリにレビューを表示する場合は、帰属情報または著作者の帰属情報も表示する必要があります。

詳細については、アトリビューションに関するドキュメントをご覧ください。