Żądanie wyszukiwania w pobliżu (nowego) przyjmuje jako dane wejściowe region, w którym ma się odbyć wyszukiwanie. Jest on określony jako okrąg zdefiniowany przez współrzędne geograficzne środka okręgu oraz promień w metrach. Żądanie zwraca listę pasujących miejsc, z których każde jest reprezentowane przez obiekt
GMSPlace, w określonym obszarze wyszukiwania.
Domyślnie odpowiedź zawiera miejsca wszystkich typów w obszarze wyszukiwania. Opcjonalnie możesz filtrować odpowiedź, określając listę typów miejsc, które mają być wyraźnie uwzględnione lub wykluczone z odpowiedzi. Możesz na przykład określić, że w odpowiedzi mają się znajdować tylko miejsca typu „restauracja”, „piekarnia” i „kawiarnia”, lub wykluczyć wszystkie miejsca typu „szkoła”.
Żądania wyszukiwania w pobliżu (nowego)
Aby wysłać żądanie wyszukiwania w pobliżu, wywołaj metodę
GMSPlacesClient searchNearbyWithRequest:,
przekazując obiekt
GMSPlaceSearchNearbyRequest
, który określa parametry żądania, oraz metodę wywołania zwrotnego typu
GMSPlaceSearchNearbyResultCallback,
która będzie obsługiwać odpowiedź.
Obiekt GMSPlaceSearchNearbyRequest określa wszystkie
wymagane i opcjonalne
parametry żądania. Wymagane parametry to:
- Lista pól, które mają być zwracane w obiekcie
GMSPlace, nazywana też maską pola, zgodnie z definicjąGMSPlaceProperty. Jeśli nie określisz co najmniej 1 pola na liście pól lub pominiesz listę pól, wywołanie zwróci błąd. - Ograniczenie lokalizacji, czyli okrąg określający obszar wyszukiwania.
Ten przykład żądania wyszukiwania w pobliżu określa, że obiekty GMSPlace w odpowiedzi
mają zawierać nazwę miejsca (GMSPlacePropertyName) i współrzędne miejsca
(GMSPlacePropertyCoordinate) dla każdego obiektu GMSPlace w wynikach
wyszukiwania. Filtruje też odpowiedź, aby zwracać tylko miejsca typu „restauracja” i „kawiarnia”.
Pakiet SDK Miejsc na Swift
let restriction = CircularCoordinateRegion(center: CLLocationCoordinate2DMake(37.7937, -122.3965), radius: 500) let searchNearbyRequest = SearchNearbyRequest( locationRestriction: restriction, placeProperties: [ .name, .coordinate], includedTypes: [ .restaurant, .cafe ], ) switch await placesClient.searchNearby(with: searchNearbyRequest) { case .success(let places): // Handle places case .failure(let placesError): // Handle error }
Swift
// Array to hold the places in the response var placeResults: [GMSPlace] = [] // Define the search area as a 500 meter diameter circle in San Francisco, CA. let circularLocationRestriction = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(37.7937, -122.3965), 500) // Specify the fields to return in the GMSPlace object for each place in the response. let placeProperties = [GMSPlaceProperty.name, GMSPlaceProperty.coordinate].map {$0.rawValue} // Create the GMSPlaceSearchNearbyRequest, specifying the search area and GMSPlace fields to return. var request = GMSPlaceSearchNearbyRequest(locationRestriction: circularLocationRestriction, placeProperties: placeProperties) let includedTypes = ["restaurant", "cafe"] request.includedTypes = includedTypes let callback: GMSPlaceSearchNearbyResultCallback = { [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().searchNearby(with: request, callback: callback)
Objective-C
// Array to hold the places in the response _placeResults = [NSArray array]; // Define the search area as a 500 meter diameter circle in San Francisco, CA. id<GMSPlaceLocationRestriction> circularLocation = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(37.7937, -122.3965), 500); // Create the GMSPlaceSearchNearbyRequest, specifying the search area and GMSPlace fields to return. GMSPlaceSearchNearbyRequest *request = [[GMSPlaceSearchNearbyRequest alloc] initWithLocationRestriction:circularLocation placeProperties:@[ GMSPlacePropertyName, GMSPlacePropertyCoordinate ]]; // Set the place types to filter on. NSArray<NSString *> *includedTypes = @[ @"restaurant", @"cafe" ]; request.includedTypes = [[NSMutableArray alloc] initWithArray:includedTypes]; [_placesClient searchNearbyWithRequest:request callback:^(NSArray<GMSPlace *> *_Nullable places, NSError *_Nullable error) { if (error != nil) { NSLog(@"An error occurred %@", [error localizedDescription]); return; } else { // Get list of places. _placeResults = places; } } ];
Odpowiedzi wyszukiwania w pobliżu
Interfejs Nearby Search API zwraca tablicę dopasowań w postaciGMSPlace
obiektów, przy czym każdy pasujący 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 1 argument typu GMSPlaceIsOpenWithRequest, który zawiera:
- Obiekt
GMSPlacelub ciąg znaków określający identyfikator miejsca. Więcej informacji o tworzeniu obiektu Place z wymaganymi polami znajdziesz w artykule Szczegóły miejsca.
- Opcjonalny
NSDate(Obj-C) lubDate(Swift) obiekt określający czas, który chcesz sprawdzić. Jeśli nie określisz czasu, domyślnie zostanie użyty bieżący czas. - Metoda
GMSPlaceOpenStatusResponseCallbackdo obsługi odpowiedzi. >
Metoda GMSPlaceIsOpenWithRequest wymaga ustawienia tych pól w obiekcie GMSPlace:
GMSPlacePropertyUTCOffsetMinutesGMSPlacePropertyBusinessStatusGMSPlacePropertyOpeningHoursGMSPlacePropertyCurrentOpeningHoursGMSPlacePropertySecondaryOpeningHours
Jeśli te pola nie są podane w obiekcie Place lub jeśli przekażesz identyfikator miejsca, metoda użyje GMSPlacesClient GMSFetchPlaceRequest: do ich pobrania.
Odpowiedź isOpenWithRequest
isOpenWithRequest zwraca obiekt GMSPlaceIsOpenResponse zawierający wartość logiczną o nazwie status, która wskazuje, czy firma jest otwarta, zamknięta, czy też stan jest nieznany.
| Język | Wartość, jeśli miejsce jest otwarte | Wartość, jeśli miejsce jest zamknięte | Wartość, jeśli stan jest nieznany |
|---|---|---|---|
| Places Swift | true |
false |
nil |
| Swift | .open |
.closed |
.unknown |
| Objective-C | GMSPlaceOpenStatusOpen |
GMSPlaceOpenStatusClosed |
GMSPlaceOpenStatusUnknown |
Płatności za isOpenWithRequest
- Pola
GMSPlacePropertyUTCOffsetMinutesiGMSPlacePropertyBusinessStatussą rozliczane w ramach jednostki SKU Dane podstawowe. Pozostałe godziny otwarcia są rozliczane w ramach jednostki SKU Szczegóły miejsca – wersja Enterprise. - Jeśli obiekt
GMSPlacejuż zawiera te pola z poprzedniego żądania, nie zostaną naliczone dodatkowe opłaty.
Przykład: wysyłanie żądania GMSPlaceIsOpenWithRequest
Ten przykład pokazuje, jak zainicjować GMSPlaceIsOpenWithRequest w istniejącym obiekcie GMSPlace.
Pakiet SDK Miejsc na 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
Aby określić wymagane parametry wyszukiwania, użyj obiektu GMSPlaceSearchNearbyRequest.
-
Lista pól
Gdy prosisz o szczegóły miejsca, musisz określić dane, które mają być zwracane w obiekcie
GMSPlacedla tego miejsca, jako maskę pola. Aby zdefiniować maskę pola, przekaż tablicę wartości zGMSPlacePropertydo obiektuGMSPlaceSearchNearbyRequest. Maskowanie pól to dobra praktyka projektowania, która pozwala uniknąć żądania niepotrzebnych danych, co pomaga uniknąć niepotrzebnego czasu przetwarzania i opłat.Określ co najmniej 1 z tych pól:
Te pola aktywują jednostkę SKU Wyszukiwanie w pobliżu – wersja Pro:
GMSPlacePropertyAddressComponents
GMSPlacePropertyBusinessStatus
GMSPlacePropertyCoordinate
GMSPlacePropertyFormattedAddress
GMSPlacePropertyName
GMSPlacePropertyIconBackgroundColor
GMSPlacePropertyIconImageURL
GMSPlacePropertyPhotos
GMSPlacePropertyPlaceID
GMSPlacePropertyPlusCode
GMSPlacePropertyTypes
GMSPlacePropertyUTCOffsetMinutes
GMSPlacePropertyViewport
GMSPlacePropertyWheelchairAccessibleEntrancePełną listę pól i powiązanych z nimi jednostek SKU znajdziesz w artykule Pola danych o miejscach (nowe).
Te pola aktywują jednostkę SKU Wyszukiwanie w pobliżu – wersja Enterprise:
GMSPlacePropertyCurrentOpeningHours
GMSPlacePropertySecondaryOpeningHours
GMSPlacePropertyPhoneNumber
GMSPlacePropertyPriceLevel
GMSPlacePropertyRating
GMSPlacePropertyOpeningHours
GMSPlacePropertyUserRatingsTotal
GMSPlacePropertyWebsitePełną listę pól i powiązanych z nimi jednostek SKU znajdziesz w artykule Pola danych o miejscach (nowe).
Te pola aktywują jednostkę SKU Wyszukiwanie w pobliżu – wersja Enterprise Plus:
GMSPlacePropertyCurbsidePickup
GMSPlacePropertyDelivery
GMSPlacePropertyDineIn
GMSPlacePropertyEditorialSummary
GMSPlacePropertyReservable
GMSPlacePropertyReviews
GMSPlacePropertyServesBeer
GMSPlacePropertyServesBreakfast
GMSPlacePropertyServesBrunch
GMSPlacePropertyServesDinner
GMSPlacePropertyServesLunch
GMSPlacePropertyServesVegetarianFood
GMSPlacePropertyServesWine
GMSPlacePropertyTakeoutPełną listę pól i powiązanych z nimi jednostek SKU znajdziesz w artykule Pola danych o miejscach (nowe).
Ten przykład przekazuje listę 2 wartości pól aby określić, że obiekt
GMSPlacezwracany przez żądanie ma zawierać polanameiplaceID:Pakiet SDK Miejsc na Swift
// Specify the place data types to return. let fields: [PlaceProperty] = [.placeID, .displayName]
Swift
// Specify the place data types to return. let fields: [GMSPlaceProperty] = [.placeID, .name]
Objective-C
// Specify the place data types to return. NSArray<GMSPlaceProperty *> *fields = @[GMSPlacePropertyPlaceID, GMSPlacePropertyName];
-
locationRestriction
Obiekt
GMSPlaceLocationRestrictionokreślający region, w którym ma się odbyć wyszukiwanie. Jest on zdefiniowany jako okrąg zdefiniowany przez środek i promień w metrach. Promień musi mieścić się w zakresie od 0,0 do 50000,0 włącznie. Domyślny promień to 0,0. W żądaniu musisz ustawić wartość większą niż 0,0.
Parametry opcjonalne
Aby określić opcjonalne parametry wyszukiwania, użyj obiektu GMSPlaceSearchNearbyRequest.
-
includedTypes/excludedTypes, includedPrimaryTypes/excludedPrimaryTypes
Pozwala określić listę typów z tabeli A, które mają być używane do filtrowania wyników wyszukiwania. W każdej kategorii ograniczeń typu można określić maksymalnie 50 typów.
Miejsce może mieć powiązany tylko 1 typ podstawowy z tabeli A. Typ podstawowy może być np.
"mexican_restaurant"lub"steak_house". UżyjincludedPrimaryTypesiexcludedPrimaryTypes, aby filtrować wyniki według typu podstawowego miejsca.Miejsce może też mieć powiązanych wiele wartości typu z typów tabeli A. Restauracja może mieć na przykład te typy:
"seafood_restaurant","restaurant","food","point_of_interest","establishment". UżyjincludedTypesiexcludedTypes, aby filtrować wyniki według listy typów powiązanych z miejscem.Jeśli określisz ogólny typ podstawowy, np.
"restaurant"lub"hotel", odpowiedź może zawierać miejsca z bardziej szczegółowym typem podstawowym niż ten, który został określony. Na przykład określisz, że ma być uwzględniony typ podstawowy"restaurant". Odpowiedź może wtedy zawierać miejsca z typem podstawowym"restaurant", ale może też zawierać miejsca z bardziej szczegółowym typem podstawowym, np."chinese_restaurant"lub"seafood_restaurant".Jeśli wyszukiwanie jest określone z kilkoma ograniczeniami typu, zwracane są tylko miejsca które spełniają wszystkie ograniczenia. Jeśli na przykład określisz
{"includedTypes": ["restaurant"], "excludedPrimaryTypes": ["steak_house"]}, zwrócone miejsca będą świadczyć usługi związane z"restaurant", ale nie będą działać głównie jako"steak_house".includedTypes
Lista typów miejsc z tabeli A, które mają być wyszukiwane. Jeśli ten parametr zostanie pominięty, zwracane są miejsca wszystkich typów.
excludedTypes
Lista typów miejsc z tabeli A, które mają być wykluczone z wyszukiwania.
Jeśli w żądaniu określisz zarówno
includedTypes(np."school"), jak iexcludedTypes(np."primary_school"), odpowiedź będzie zawierać miejsca, które są sklasyfikowane jako"school"ale nie jako"primary_school". Odpowiedź będzie zawierać miejsca, które pasują do co najmniej 1 zincludedTypesi żadnego zexcludedTypes.Jeśli występują sprzeczne typy, np. typ pojawia się zarówno w
includedTypesiexcludedTypes, zwracany jest błądINVALID_REQUEST.includedPrimaryTypes
Lista podstawowych typów miejsc z tabeli A, które mają być uwzględnione w wyszukiwaniu.
excludedPrimaryTypes
Lista podstawowych typów miejsc z tabeli A, które mają być wykluczone z wyszukiwania.
Jeśli występują sprzeczne typy podstawowe, np. typ pojawia się zarówno w
includedPrimaryTypesiexcludedPrimaryTypes, zwracany jest błądINVALID_ARGUMENT. -
maxResultCount
Określa maksymalną liczbę wyników wyszukiwania miejsc, które mają być zwracane. Musi mieścić się w zakresie od 1 do 20 (domyślnie) włącznie.
-
rankPreference
Typ rankingu, którego należy użyć. Jeśli ten parametr zostanie pominięty, wyniki są sortowane według popularności. Może mieć jedną z tych wartości:
.popularity(domyślnie) – sortuje wyniki według popularności..distance– sortuje wyniki w kolejności rosnącej według odległości od określonej lokalizacji.
-
regionCode
Kod regionu używany do formatowania odpowiedzi, określony jako dwuznakowa wartość kodu CLDR. Nie ma wartości domyślnej.
Jeśli nazwa kraju w polu
formattedAddressw odpowiedzi pasuje doregionCode, kod kraju jest pomijany wformattedAddress. Ten parametr nie ma wpływu naadrFormatAddress, które zawsze zawiera nazwę kraju, ani nashortFormattedAddress, które nigdy jej nie zawiera.Większość kodów CLDR jest identyczna z kodami ISO 3166-1, z kilkoma istotnymi wyjątkami. Na przykład ccTLD Wielkiej Brytanii to „uk” (.co.uk), a jej kod ISO 3166-1 to „gb” (technicznie dla podmiotu „Zjednoczone Królestwo Wielkiej Brytanii i Irlandii Północnej”). Parametr może wpływać na wyniki na podstawie obowiązującego prawa.
Wyświetlanie atrybucji w aplikacji
Gdy aplikacja wyświetla informacje uzyskane z
GMSPlacesClient,
takie jak zdjęcia i opinie, musi też wyświetlać wymagane atrybucje.
Na przykład właściwość reviews obiektu GMSPlacesClient
zawiera tablicę maksymalnie 5
GMSPlaceReview
obiektów. Każdy obiekt GMSPlaceReview może zawierać atrybucje i atrybucje autora.
Jeśli wyświetlasz opinię w aplikacji, musisz też wyświetlić atrybucję lub atrybucję autora.
Więcej informacji znajdziesz w dokumentacji na temat atrybucji.