テキスト検索は、�����������基づいてプレイスのセットに関する情報を返します。たとえば、「渋谷 ピザショップ」「表参道 靴店」「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
オブジェクトには、帰属情報と著者の帰属情報を含めることができます。アプリにレビューを表示する場合は、帰属情報または著作者の帰属情報も表示する必要があります。
詳細については、アトリビューションに関するドキュメントをご覧ください。