Wyszukiwanie tekstowe (nowe) zwraca informacje o zbiorze miejsc na podstawie ciągu znaków (np. „pizza w Nowym Jorku”, „sklepy obuwnicze w pobliżu Ottawy” lub „123 Main Street”). Usługa odpowiada listą miejsc pasujących do ciągu tekstowego i wszelkich ustawionych odchyleń lokalizacji.
Oprócz parametrów wymaganych usługa Text Search (New) umożliwia doprecyzowanie zapytań za pomocą parametrów opcjonalnych, aby uzyskać lepsze wyniki.
Wyświetlanie listy miejsc na podstawie wyszukiwania tekstowego
Wyślij żądanie wyszukiwania tekstowego, wywołując GMSPlacesClient
searchByTextWithRequest:
i przekazując obiekt GMSPlaceSearchByTextRequest
, który definiuje parametry żądania, oraz metodę wywołania zwrotnego typu GMSPlaceSearchByTextResultCallback
do obsługi odpowiedzi.
Obiekt GMSPlaceSearchByTextRequest
określa wszystkie wymagane i opcjonalne parametry żądania. Wymagane parametry to:
- Lista pól do zwrócenia w obiekcie
GMSPlace
, nazywana też maską pola, zgodnie z definicjąGMSPlaceProperty
. Jeśli nie określisz co najmniej jednego pola na liście pól lub pominiesz listę pól, wywołanie zwróci błąd. - Zapytanie tekstowe.
To przykładowe żądanie wyszukiwania tekstu określa, że obiekty odpowiedzi GMSPlace
mają zawierać nazwę i identyfikator miejsca dla każdego obiektu GMSPlace
w wynikach wyszukiwania. Filtruje też odpowiedź, aby zwracać tylko miejsca typu „restauracja”.
Pakiet SDK Miejsc w 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; } } } ];
Odpowiedzi wyszukiwania tekstowego
Interfejs Text Search API zwraca tablicę wyników w postaci obiektów GMSPlace
, przy czym każdy obiekt GMSPlace
odpowiada jednemu pasującemu miejscu.
Pobieranie stanu otwarcia
Obiekt GMSPlacesClient
zawiera funkcję składową o nazwie isOpenWithRequest
(isOpenRequest
w Swift i isPlaceOpenRequest
w GooglePlacesSwift), która zwraca odpowiedź wskazującą, czy miejsce jest obecnie otwarte, na podstawie czasu określonego w wywołaniu.
Ta metoda przyjmuje jeden argument typu GMSPlaceIsOpenWithRequest
, który zawiera:
GMSPlace
Obiekt lub ciąg znaków określający identyfikator miejsca. Więcej informacji o tworzeniu obiektu Place z wymaganymi polami znajdziesz w sekcji Szczegóły miejsca.
- Opcjonalny obiekt
NSDate
(Obj-C) lubDate
(Swift) określający czas, który chcesz sprawdzić. Jeśli nie podasz czasu, zostanie użyta wartość domyślna „teraz”. - Metoda
GMSPlaceOpenStatusResponseCallback
do obsługi odpowiedzi. >
Metoda GMSPlaceIsOpenWithRequest
wymaga ustawienia w obiekcie GMSPlace
tych pól:
GMSPlacePropertyUTCOffsetMinutes
GMSPlacePropertyBusinessStatus
GMSPlacePropertyOpeningHours
GMSPlacePropertyCurrentOpeningHours
GMSPlacePropertySecondaryOpeningHours
Jeśli te pola nie są podane w obiekcie Place lub jeśli przekażesz identyfikator miejsca, metoda użyje funkcji GMSPlacesClient GMSFetchPlaceRequest:
, aby je pobrać.
isOpenWithRequest
odpowiedź
isOpenWithRequest
zwraca obiekt GMSPlaceIsOpenResponse
zawierający wartość logiczną o nazwie status
, która wskazuje, czy firma jest otwarta, zamknięta lub czy jej stan jest nieznany.
Język | Wartość, jeśli jest otwarty | Wartość, jeśli firma jest zamknięta | Wartość, jeśli stan jest nieznany |
---|---|---|---|
Places Swift | true |
false |
nil |
Swift | .open |
.closed |
.unknown |
Objective-C | GMSPlaceOpenStatusOpen |
GMSPlaceOpenStatusClosed |
GMSPlaceOpenStatusUnknown |
Płatności za konto isOpenWithRequest
- Pola
GMSPlacePropertyUTCOffsetMinutes
iGMSPlacePropertyBusinessStatus
są rozliczane w ramach podstawowego SKU danych. Za pozostałe godziny otwarcia pobierana jest opłata zgodnie z kodem SKU szczegółów miejsca w wersji Enterprise. - Jeśli Twój
GMSPlace
obiekt ma już te pola z poprzedniego żądania, nie naliczymy opłaty ponownie.
Przykład: wysyłanie prośby GMSPlaceIsOpenWithRequest
Poniższy przykład pokazuje, jak zainicjować GMSPlaceIsOpenWithRequest
w ramach istniejącego obiektu GMSPlace
.
Pakiet SDK Miejsc w 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 } }];
Wymagane parametry
Użyj obiektu GMSPlaceSearchByTextRequest
, aby określić wymagane parametry wyszukiwania.
-
Lista pól
Określ, które właściwości danych o miejscu mają być zwracane. Przekaż listę właściwości
GMSPlace
określających pola danych, które mają zostać zwrócone. Jeśli pominiesz maskę pola, żądanie zwróci błąd.Listy pól to dobra praktyka projektowania, która pozwala uniknąć żądania niepotrzebnych danych, co z kolei pomaga uniknąć niepotrzebnego czasu przetwarzania i opłat.
Określ co najmniej jedno z tych pól:
Te pola wywołują Text Search Essentials ID Only SKU:
GMSPlacePropertyPlaceID
Te pola wywołują jednostkę SKU Text Search Pro:
GMSPlacePropertyAddressComponents
GMSPlacePropertyBusinessStatus
GMSPlacePropertyCoordinate
GMSPlacePropertyFormattedAddress
GMSPlacePropertyIconBackgroundColor
GMSPlacePropertyIconImageURL
GMSPlacePropertyName
GMSPlacePropertyPhotos
GMSPlacePropertyPlusCode
GMSPlacePropertyTypes
GMSPlacePropertyUTCOffsetMinutes
GMSPlacePropertyViewport
GMSPlacePropertyWheelchairAccessibleEntrance
Te pola wywołują kod SKU Text Search Enterprise:
GMSPlacePropertyCurrentOpeningHours
GMSPlacePropertySecondaryOpeningHours
GMSPlacePropertyPhoneNumber
GMSPlacePropertyPriceLevel
GMSPlacePropertyRating
GMSPlacePropertyOpeningHours
GMSPlacePropertyUserRatingsTotal
GMSPlacePropertyWebsite
Te pola wywołują jednostkę SKU Text Search Enterprise Plus:
GMSPlacePropertyCurbsidePickup
GMSPlacePropertyDelivery
GMSPlacePropertyDineIn
GMSPlacePropertyEditorialSummary
GMSPlacePropertyReservable
GMSPlacePropertyReviews
GMSPlacePropertyServesBeer
GMSPlacePropertyServesBreakfast
GMSPlacePropertyServesBrunch
GMSPlacePropertyServesDinner
GMSPlacePropertyServesLunch
GMSPlacePropertyServesVegetarianFood
GMSPlacePropertyServesWine
GMSPlacePropertyTakeout
-
textQuery
Ciąg tekstowy, według którego ma być prowadzone wyszukiwanie, np. „restauracja”, „ul. Główna 123” lub „najlepsze miejsce do odwiedzenia w San Francisco”.
Parametry opcjonalne
Użyj obiektu GMSPlaceSearchByTextRequest
, aby określić opcjonalne parametry wyszukiwania.
includedType
Ogranicza wyniki do miejsc pasujących do określonego typu zdefiniowanego w tabeli A. Możesz określić tylko 1 typ. Na przykład:
let request = SearchByTextRequest()
request.includedType = "bar"let request = SearchByTextRequest()
request.includedType = "pharmacy"
isOpenNow
Jeśli
true
, zwracaj tylko te miejsca, które są otwarte w momencie wysłania zapytania. Jeślifalse
, zwróć wszystkie firmy niezależnie od stanu otwarcia. Miejsca, które nie mają określonych godzin otwarcia w bazie danych Miejsc Google, są zwracane, jeśli ustawisz ten parametr nafalse
.isStrictTypeFiltering
Używany z parametrem
includeType
. Jeśli wartość tego parametru totrue
, zwracane są tylko miejsca pasujące do typów określonych przez parametrincludeType
. Gdy wartość jest fałszywa (domyślnie), odpowiedź może zawierać miejsca, które nie pasują do określonych typów.locationBias
Określa obszar wyszukiwania. Ta lokalizacja służy jako punkt odniesienia, co oznacza, że mogą być zwracane wyniki z okolic określonej lokalizacji, w tym wyniki spoza określonego obszaru.
Możesz określić
locationRestriction
lublocationBias
, ale nie oba te warunki jednocześnie.locationRestriction
określa region, w którym muszą się znajdować wyniki, alocationBias
określa region, w pobliżu którego muszą się znajdować wyniki, ale mogą być poza tym obszarem.Określ region jako prostokątny widoczny obszar lub jako okrąg.
Okrąg jest definiowany przez punkt środkowy i promień w metrach. Promień musi mieścić się w zakresie od 0,0 do 50 000,0 (włącznie). Domyślny promień to 0,0. Na przykład:
let request = SearchByTextRequest() request.locationBias = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0)
Prostokąt to widoczny obszar określony przez szerokość i długość geograficzną, reprezentowany przez 2 przeciwległe punkty: dolny i górny. Punkt dolny oznacza południowo-zachodni róg prostokąta, a punkt górny – północno-wschodni róg prostokąta.
Widoczny obszar jest uważany za zamknięty region, co oznacza, że obejmuje swoje granice. Zakres szerokości geograficznej musi się mieścić w przedziale od -90 do 90 stopni włącznie, a zakres długości geograficznej musi się mieścić w przedziale od -180 do 180 stopni włącznie:
- Jeśli
low
=high
, widoczny obszar składa się z tego pojedynczego punktu. - Jeśli
low.longitude
>high.longitude
, zakres długości geograficznej jest odwrócony (widoczny obszar przekracza linię długości geograficznej 180 stopni). - Jeśli
low.longitude
= -180 stopni, ahigh.longitude
= 180 stopni, widoczny obszar obejmuje wszystkie długości geograficzne. - Jeśli
low.longitude
= 180 stopni, ahigh.longitude
= -180 stopni, zakres długości geograficznej jest pusty. - Jeśli
low.latitude
>high.latitude
, zakres szerokości geograficznej jest pusty.
- Jeśli
locationRestriction
Określa obszar wyszukiwania. Wyniki spoza określonego obszaru nie są zwracane. Określ region jako prostokątny widoczny obszar. Informacje o definiowaniu widocznego obszaru znajdziesz w opisie
locationBias
.Możesz określić
locationRestriction
lublocationBias
, ale nie oba te warunki jednocześnie.locationRestriction
określa region, w którym muszą się znajdować wyniki, alocationBias
określa region, w pobliżu którego muszą się znajdować wyniki, ale mogą być poza tym obszarem.-
maxResultCount
Określa maksymalną liczbę wyników dotyczących miejsc do zwrócenia. Musi mieścić się w przedziale od 1 do 20 (wartość domyślna) włącznie.
minRating
Ogranicza wyniki tylko do tych, których średnia ocena użytkowników jest większa lub równa temu limitowi. Wartości muszą mieścić się w zakresie od 0,0 do 5,0 (włącznie) i być wielokrotnością 0,5. Na przykład: 0, 0,5, 1,0, ..., 5,0 włącznie. Wartości są zaokrąglane w górę do najbliższej liczby z końcówką 0,5. Na przykład wartość 0,6 eliminuje wszystkie wyniki z oceną mniejszą niż 1,0.
-
priceLevels
Ogranicz wyszukiwanie do miejsc o określonym poziomie cen. Domyślnie wybrane są wszystkie poziomy cenowe.
Podaj tablicę zawierającą co najmniej 1 wartość zdefiniowaną przez
PriceLevel
.Na przykład:
let request = SearchByTextRequest() request.priceLevels = [GMSPlacesPriceLevel.moderate.rawValue, GMSPlacesPriceLevel.cheap.rawValue]
rankPreference
Określa, w jaki sposób wyniki są klasyfikowane w odpowiedzi na podstawie typu zapytania:
- W przypadku zapytania kategorycznego, np. „Restauracje w Nowym Jorku”, domyślnie używana jest funkcja
.relevance
(sortowanie wyników według trafności wyszukiwania). Możesz ustawić wartośćrankPreference
na.relevance
lub.distance
(sortowanie wyników według odległości). - W przypadku zapytania niekategorycznego, np. „Mountain View, CA”, zalecamy pozostawienie parametru
rankPreference
bez ustawionej wartości.
- W przypadku zapytania kategorycznego, np. „Restauracje w Nowym Jorku”, domyślnie używana jest funkcja
regionCode
Kod regionu używany do formatowania odpowiedzi, podany jako dwuznakowy kod CLDR. Ten parametr może też wpływać na wyniki wyszukiwania. Nie ma wartości domyślnej.
Jeśli nazwa kraju w polu adresu w odpowiedzi jest zgodna z kodem regionu, kod kraju jest pomijany w adresie.
Większość kodów CLDR jest identyczna z kodami ISO 3166-1, z kilkoma istotnymi wyjątkami. Na przykład krajowa domena najwyższego poziomu Zjednoczonego Królestwa to „uk” (.co.uk), a kod ISO 3166-1 to „gb” (technicznie dla podmiotu „Zjednoczone Królestwo Wielkiej Brytanii i Irlandii Północnej”). W zależności od obowiązujących przepisów parametr może wpływać na wyniki.
shouldIncludePureServiceAreaBusinesses
Jeśli
true
, zwraca w wynikach wyszukiwania firmy działające w czystym obszarze usług. Firma działająca tylko na określonym obszarze to firma, która świadczy usługi na miejscu u klienta lub samodzielnie dostarcza produkty odbiorcom, ale nie obsługuje klientów pod swoim adresem.Na przykład:
Pakiet SDK Miejsc w 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;
Wyświetlanie atrybucji w aplikacji
Gdy aplikacja wyświetla informacje uzyskane z GMSPlacesClient
, np. zdjęcia i opinie, musi też wyświetlać wymagane atrybucje.
Na przykład właściwość reviews
obiektu GMSPlacesClient
zawiera tablicę maksymalnie 5 obiektów GMSPlaceReview
. Każdy obiekt GMSPlaceReview
może zawierać atrybucje i atrybucje autora.
Jeśli wyświetlasz opinię w aplikacji, musisz też wyświetlać informacje o autorze lub atrybucję.
Więcej informacji znajdziesz w dokumentacji dotyczącej atrybucji.