Bei Verwendung von „Text Search (New)“ werden Informationen zu verschiedenen Orten auf Grundlage eines Textstrings zurückgegeben, z. B. „Pizza in München“, „Schuhgeschäfte in der Nähe von Hamburg“ oder „Hauptstraße 123“. Der Dienst gibt eine Liste mit Orten zurück, die dem Textstring und ggf. der festgelegten Standortgewichtung entsprechen.
Neben den erforderlichen Parametern unterstützt „Text Search (New)“ die Verfeinerung von Abfragen mit optionalen Parametern, um bessere Ergebnisse zu erzielen.
Liste von Orten per Textsuche abrufen
Stellen Sie eine „Text Search“-Anfrage, indem Sie GMSPlacesClient
searchByTextWithRequest: aufrufen und ein GMSPlaceSearchByTextRequest Objekt übergeben, das die Anfrageparameter und eine Callback-Methode vom Typ GMSPlaceSearchByTextResultCallback definiert, um die Antwort zu verarbeiten.
Das -Objekt gibt alle
erforderlichen und optionalen Parameter
für die Anfrage an.GMSPlaceSearchByTextRequest Zu den erforderlichen Parametern gehören:
- Die Liste der Felder, die im
GMSPlace-Objekt zurückgegeben werden sollen, auch Feldmaske genannt, wie durchGMSPlacePropertydefiniert. Wenn Sie in der Feldliste nicht mindestens ein Feld angeben oder die Feldliste weglassen gibt der Aufruf einen Fehler zurück. - Die Textabfrage.
Diese Beispielanfrage für die Textsuche gibt an, dass die GMSPlace-Objekte in der Antwort den Ortsnamen und die Orts-ID für jedes GMSPlace-Objekt in den Suchergebnissen enthalten sollen. Außerdem wird die Antwort so gefiltert, dass nur Orte vom Typ „Restaurant“ zurückgegeben werden.
Places SDK for Swift
let restriction = GMSPlaceRectangularLocationOption( 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“-Antworten
Die Text Search API gibt ein Array von Übereinstimmungen in
Form von
GMSPlace
Objekten zurück, wobei jedes GMSPlace Objekt einem übereinstimmenden Ort entspricht.
Status „Geöffnet“ abrufen
Das GMSPlacesClient-Objekt enthält eine Member-Funktion namens isOpenWithRequest (isOpenRequest in Swift und isPlaceOpenRequest in GooglePlacesSwift), die eine Antwort zurückgibt, die angibt, ob der Ort derzeit geöffnet ist. Die Angabe basiert auf der im Aufruf angegebenen Zeit.
Für diese Methode wird ein einzelnes Argument vom Typ GMSPlaceIsOpenWithRequest verwendet, das Folgendes enthält:
- Ein
GMSPlaceObjekt oder ein String, der eine Orts-ID angibt. Weitere Informationen zum Erstellen des Place-Objekts mit den erforderlichen Feldern finden Sie unter Ortsdetails.
- Ein optionales
NSDate(Obj-C) oderDate(Swift)-Objekt, das die Zeit angibt, die Sie prüfen möchten. Wenn keine Zeit angegeben ist, wird die aktuelle Zeit verwendet. - Eine
GMSPlaceOpenStatusResponseCallback-Methode zur Verarbeitung der Antwort. >
Für die GMSPlaceIsOpenWithRequest-Methode müssen die folgenden Felder im GMSPlace-Objekt festgelegt sein:
GMSPlacePropertyUTCOffsetMinutesGMSPlacePropertyBusinessStatusGMSPlacePropertyOpeningHoursGMSPlacePropertyCurrentOpeningHoursGMSPlacePropertySecondaryOpeningHours
Wenn diese Felder nicht im Place-Objekt angegeben sind oder Sie eine Orts-ID übergeben, werden sie mit GMSPlacesClient GMSFetchPlaceRequest: abgerufen.
Antwort von isOpenWithRequest
isOpenWithRequest gibt ein GMSPlaceIsOpenResponse-Objekt zurück, das einen booleschen Wert namens status enthält, der angibt, ob das Unternehmen geöffnet oder geschlossen ist oder ob der Status unbekannt ist.
| Sprache | Wert, wenn geöffnet | Wert, wenn geschlossen | Wert, wenn Status unbekannt |
|---|---|---|---|
| Places Swift | true |
false |
nil |
| Swift | .open |
.closed |
.unknown |
| Objective-C | GMSPlaceOpenStatusOpen |
GMSPlaceOpenStatusClosed |
GMSPlaceOpenStatusUnknown |
Abrechnung für isOpenWithRequest
- Die Felder
GMSPlacePropertyUTCOffsetMinutesundGMSPlacePropertyBusinessStatuswerden unter der Basic Data SKU abgerechnet. Die restlichen Öffnungszeiten werden unter der SKU „Place Details Enterprise“ abgerechnet. - Wenn Ihr
GMSPlace-Objekt diese Felder bereits aus einer vorherigen Anfrage enthält, werden sie nicht noch einmal in Rechnung gestellt.
Beispiel: GMSPlaceIsOpenWithRequest-Anfrage stellen
Im folgenden Beispiel wird gezeigt, wie ein GMSPlaceIsOpenWithRequest-Objekt in einem vorhandenen GMSPlace-Objekt initialisiert wird.
Places SDK for Swift
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 } }];
Seitenumbruch
Die Textsuche bietet ein Paginierungsobjekt, den
hasNextPage booleschen Wert, der in der ersten Antwort auf einen „Text Search“-Aufruf zurückgegeben wird. Wenn eine nächste Seite verfügbar ist, können Sie sie mit der fetchNextPage() Funktion laden.
Im folgenden Beispiel wird gezeigt, wie Sie prüfen, ob eine nächste Seite verfügbar ist, und sie dann laden.
Swift
public struct PlaceSearchPagination { public var pageSize: Int public var hasNextPage: Bool public func fetchNextPage() async -> SearchByTextResponse } public struct SearchByTextResponse { public var pagination: PlaceSearchPagination? public var places: [Place]? public var error: PlaceError? } PlacesClient.swift public func searchByText(with request: SearchByTextRequest) async -> SearchByTextResponse let searchByTextRequest = SearchByTextRequest(textQuery: "restaurants", placeProperties: [PlaceProperty.displayName], locationBias: CircularCoordinateRegion(center: CLLocationCoordinate2D(latitude: 0, longitude: 0), radius: 100)) searchByTextRequest.maxResultCount = 10 var searchByTextResponse = await PlacesClient.shared.searchByText(with: searchByTextRequest) print("Found \(searchByTextResponse.places.count) places") searchByTextResponse.pagination.pageSize = 20 // Continue making requests until no more results are found in pagination object while searchByTextResponse.pagination.hasNextPage { searchByTextResponse = await searchByTextResponse.pagination.fetchNextPage() print("Found \(searchByTextResponse.places.count) places") }
Objective-C
GMSPlaceSearchByTextRequest *searchByTextRequest = [[GMSPlaceSearchByTextRequest alloc] initWithTextQuery: @"restaurants" placeProperties: @[GMSPlacePropertyAll]]; searchByTextRequest.maxResultCount = 10; __block void (^recursiveCallback)(GMSPlaceSearchByTextResponse *, NSError *); recursiveCallback = ^(GMSPlaceSearchByTextResponse * response, NSError* error) { NSLog(@"Found %d places", response.places.count); if (response.pagination.hasNextPage) { [response.pagination fetchNextPageWithCompletion:recursiveCallback]; } }; [GMSPlacesClient.sharedClient searchByTextWithRequest:searchByTextRequest completion:recursiveCallback];
Erforderliche Parameter
Mit dem GMSPlaceSearchByTextRequest-Objekt können Sie die erforderlichen Parameter für die Suche angeben.
-
Feldliste
Geben Sie an, welche Eigenschaften der Ortsdaten zurückgegeben werden sollen. Übergeben Sie eine Liste von
GMSPlaceEigenschaften, die die zurückzugebenden Datenfelder angeben. Wenn Sie die Feld maske weglassen, gibt die Anfrage einen Fehler zurück.Feldlisten sind eine gute Design-Best Practice, um zu verhindern, dass unnötige Daten angefordert werden. So lassen sich unnötige Verarbeitungszeiten und Gebühren vermeiden.
Geben Sie eines oder mehrere der folgenden Felder an:
Die folgenden Felder lösen die SKU „Text Search Essentials (ID Only)“ aus:
GMSPlacePropertyPlaceIDDie folgenden Felder lösen die SKU „Text Search Pro“ aus:
GMSPlacePropertyAddressComponents
GMSPlacePropertyBusinessStatus
GMSPlacePropertyCoordinate
GMSPlacePropertyFormattedAddress
GMSPlacePropertyIconBackgroundColor
GMSPlacePropertyIconImageURL
GMSPlacePropertyName
GMSPlacePropertyPhotos
GMSPlacePropertyPlusCode
GMSPlacePropertyTypes
GMSPlacePropertyUTCOffsetMinutes
GMSPlacePropertyViewport
GMSPlacePropertyWheelchairAccessibleEntranceDie folgenden Felder lösen die SKU „Text Search Enterprise“ aus:
GMSPlacePropertyCurrentOpeningHours
GMSPlacePropertySecondaryOpeningHours
GMSPlacePropertyPhoneNumber
GMSPlacePropertyPriceLevel
GMSPlacePropertyRating
GMSPlacePropertyOpeningHours
GMSPlacePropertyUserRatingsTotal
GMSPlacePropertyWebsiteDie folgenden Felder lösen die SKU „Text Search Enterprise Plus“ aus:
GMSPlacePropertyCurbsidePickup
GMSPlacePropertyDelivery
GMSPlacePropertyDineIn
GMSPlacePropertyEditorialSummary
GMSPlacePropertyReservable
GMSPlacePropertyReviews
GMSPlacePropertyServesBeer
GMSPlacePropertyServesBreakfast
GMSPlacePropertyServesBrunch
GMSPlacePropertyServesDinner
GMSPlacePropertyServesLunch
GMSPlacePropertyServesVegetarianFood
GMSPlacePropertyServesWine
GMSPlacePropertyTakeout
-
textQuery
Der Textstring, nach dem gesucht werden soll, z. B. „Restaurant“, „Hauptstraße 60 “ oder „Bester Ort in San Francisco“.
Optionale Parameter
Mit dem GMSPlaceSearchByTextRequest-Objekt können Sie die optionalen Parameter für die Suche angeben.
includedType
Beschränkt die Ergebnisse auf Orte, die dem in Tabelle A angegebenen Typ entsprechen. Es kann nur ein Typ angegeben werden. Beispiel:
let request = SearchByTextRequest()
request.includedType = "bar"let request = SearchByTextRequest()
request.includedType = "pharmacy"
isOpenNow
Wenn
true, werden nur Orte zurückgegeben, die beim Senden der Anfrage geöffnet haben. Wennfalse, werden alle Unternehmen unabhängig vom Status „Geöffnet“ zurückgegeben. Orte, für die in der Google Places-Datenbank keine Öffnungszeiten angegeben sind, werden zurückgegeben, wenn Sie diesen Parameter auffalsesetzen.isStrictTypeFiltering
Wird mit dem Parameter
includeTypeverwendet. Wenn auftruegesetzt, werden nur Orte zurückgegeben, die den inincludeTypeangegebenen Typen entsprechen. Wenn „false“ (Standardeinstellung), kann die Antwort Orte enthalten, die nicht den angegebenen Typen entsprechen.locationBias
Gibt einen Bereich für die Suche an. Dieser Standort dient als Gewichtung. Das bedeutet, dass Ergebnisse in der Nähe des angegebenen Standorts zurückgegeben werden können, einschließlich Ergebnissen außerhalb des angegebenen Bereichs.
Sie können
locationRestrictionoderlocationBias, aber nicht beide angeben.locationRestrictiongibt den Bereich an, in dem sich die Ergebnisse befinden müssen, undlocationBiasgibt den Bereich an, in dessen Nähe sich die Ergebnisse befinden müssen, aber außerhalb des Bereichs liegen können.Geben Sie die Region als rechteckigen Darstellungsbereich oder als Kreis an.
Ein Kreis wird durch einen Mittelpunkt und einen Radius in Metern definiert. Der Radius muss zwischen 0,0 und 50.000,0 liegen (einschließlich). Der Standardradius ist 0,0. Beispiel:
let request = SearchByTextRequest() request.locationBias = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0)
Ein Rechteck ist ein Darstellungsbereich mit Breiten- und Längengrad, der durch zwei diagonal gegenüberliegende Tief- und Hochpunkte dargestellt wird. Der Tiefpunkt markiert die südwestliche Ecke des Rechtecks und der Hochpunkt die nordöstliche Ecke.
Ein Darstellungsbereich gilt als geschlossene Region, d. h., er umfasst auch seine Grenze. Die Breitengradgrenzen müssen zwischen -90 und 90 Grad liegen (einschließlich) und die Längengradgrenzen müssen zwischen -180 und 180 Grad liegen (einschließlich):
- Wenn
low=high, besteht der Darstellungsbereich aus diesem einzelnen Punkt. - Wenn
low.longitude>high.longitude, wird der Längengradbereich umgekehrt (der Darstellungsbereich überschreitet die 180-Grad-Linie). - Wenn
low.longitude= -180 Grad undhigh.longitude= 180 Grad, umfasst der Darstellungsbereich alle Längengrade. - Wenn
low.longitude= 180 Grad undhigh.longitude= -180 Grad, ist der Längengradbereich leer. - Wenn
low.latitude>high.latitude, ist der Breitengradbereich leer.
- Wenn
locationRestriction
Gibt einen Bereich für die Suche an. Ergebnisse außerhalb des angegebenen Bereichs werden nicht zurückgegeben. Geben Sie die Region als rechteckigen Darstellungsbereich an. Informationen zum Definieren des Darstellungsbereichs finden Sie in der Beschreibung von
locationBias.Sie können
locationRestrictionoderlocationBias, aber nicht beide angeben.locationRestrictiongibt den Bereich an, in dem sich die Ergebnisse befinden müssen, undlocationBiasgibt den Bereich an, in dessen Nähe sich die Ergebnisse befinden müssen, aber außerhalb des Bereichs liegen können.-
maxResultCount
Gibt die maximale Anzahl der zurückzugebenden Orts-Ergebnisse an. Muss zwischen 1 und 20 (Standardwert) liegen (einschließlich).
minRating
Beschränkt die Ergebnisse auf Orte, deren durchschnittliche Nutzerbewertung größer oder gleich diesem Grenzwert ist. Die Werte müssen zwischen 0,0 und 5,0 liegen (einschließlich) und in Schritten von 0,5 angegeben werden. Beispiel: 0, 0,5, 1,0, ..., 5,0 (einschließlich). Die Werte werden auf die nächste 0,5 aufgerundet. Ein Wert von 0,6 schließt beispielsweise alle Ergebnisse mit einer Bewertung unter 1,0 aus.
-
priceLevels
Beschränken Sie die Suche auf Orte, die mit bestimmten Preisklassen gekennzeichnet sind. Standardmäßig sind alle Preisklassen ausgewählt.
Geben Sie ein Array mit einem oder mehreren Werten an, die durch
PriceLeveldefiniert sind.Beispiel:
let request = SearchByTextRequest() request.priceLevels = [GMSPlacesPriceLevel.moderate.rawValue, GMSPlacesPriceLevel.cheap.rawValue]
rankPreference
Gibt an, wie die Ergebnisse in der Antwort basierend auf dem Typ der Anfrage sortiert werden:
- Bei einer kategorialen Anfrage wie "Restaurants in München" ist
.relevance(Ergebnisse nach Suchrelevanz sortieren) die Standardeinstellung. Sie könnenrankPreferenceauf.relevanceoder.distance(Ergebnisse nach Entfernung sortieren) setzen. - Bei einer nicht kategorialen Anfrage wie "Mountain View, CA" empfehlen wir
,
rankPreferencenicht festzulegen.
- Bei einer kategorialen Anfrage wie "Restaurants in München" ist
regionCode
Der Regionscode, der zum Formatieren der Antwort verwendet wird, angegeben als zweistelliger CLDR-Code. Dieser Parameter kann auch die Suchergebnisse beeinflussen. Es gibt keinen Standardwert.
Wenn der Ländername des Adressfelds in der Antwort mit dem Regionscode übereinstimmt, wird der Ländercode aus der Adresse entfernt.
Die meisten CLDR-Codes sind mit den ISO 3166-1-Codes identisch. Es gibt jedoch einige Ausnahmen. So lautet beispielsweise die ccTLD des Vereinigten Königreichs ist „uk“ (.co.uk) und der ISO 3166-1-Code „gb“ (technisch für die Einheit „Vereinigtes Königreich Großbritannien und Nordirland“). Der Parameter kann sich aufgrund geltenden Rechts auf die Ergebnisse auswirken.
shouldIncludePureServiceAreaBusinesses
Wenn
true, werden Unternehmen ohne festen Standort in einem Einzugsgebiet in den Suchergebnissen zurückgegeben. Unternehmen ohne festen Standort in einem Einzugsgebiet sind Unternehmen, die Kunden vor Ort besuchen oder direkt beliefern, aber an ihrer Geschäftsadresse keine Kunden empfangen.Beispiel:
Places SDK for Swift
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;
Zuordnungen in der App anzeigen
Wenn in Ihrer App Informationen angezeigt werden, die von
GMSPlacesClient,
abgerufen wurden, z. B. Fotos und Rezensionen, müssen auch die erforderlichen Zuordnungen angezeigt werden.
Die Eigenschaft reviews des Objekts GMSPlacesClient
enthält beispielsweise ein Array mit bis zu fünf
GMSPlaceReview
Objekten. Jedes GMSPlaceReview-Objekt kann Zuordnungen und Autorenangaben enthalten.
Wenn Sie die Rezension in Ihrer App anzeigen, müssen Sie auch alle Zuordnungen oder Autorenangaben anzeigen.
Weitere Informationen finden Sie in der Dokumentation zu Zuordnungen.