Wyszukiwanie w pobliżu (nowość)

W prośbie o wyszukiwanie w pobliżu (nowa) jako argument wejściowy podajesz region do przeszukania określony jako okrąg zdefiniowany przez współrzędne szerokości i długości geograficznej punktu środkowego 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 przefiltrować odpowiedź, podając listę typów miejsc, które mają być uwzględnione lub wykluczone z odpowiedzi. Możesz na przykład określić, aby w odpowiedzi uwzględnić tylko miejsca typu „restauracja”, „piekarnia” i „kawiarnia” lub wykluczyć wszystkie miejsca typu „szkoła”.

Wyszukiwanie w pobliżu (nowe)

Prześlij żądanie wyszukiwania w pobliżu, wywołując funkcję GMSPlacesClient searchNearbyWithRequest:, przekazując obiekt GMSPlaceSearchNearbyRequest, który definiuje parametry żądania i metodę wywołania zwrotnego typu GMSPlaceSearchNearbyResultCallback, aby obsłużyć odpowiedź.

Obiekt GMSPlaceSearchNearbyRequest określa wszystkie wymaganeopcjonalne parametry żądania. Wymagane parametry:

  • Lista pól do zwrócenia w obiekcie GMSPlace, zwana też maską pola, zdefiniowana przez parametr GMSPlaceProperty. Jeśli na liście pól nie określisz co najmniej 1 pola lub pominiesz listę pól, wywołanie zwróci błąd.
  • Ograniczenie dotyczące lokalizacji, czyli koło określające obszar wyszukiwania.

W tym przykładzie zapytania o wyszukiwanie w pobliżu określono, że obiekty odpowiedzi GMSPlace zawierają nazwę miejsca (GMSPlacePropertyName) i współrzędne miejsca (GMSPlacePropertyCoordinate) dla każdego obiektu GMSPlace w wynikach wyszukiwania. Filtruje ona też odpowiedź, aby zwracać tylko miejsca typu „restauracja” i „kawiarnia”.

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;
    }
  }
];

Pakiet SDK Miejsca Swift na iOS (wersja podglądowa)

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
}

Odpowiedzi na wyszukiwanie w pobliżu

Interfejs Nearby Search API zwraca tablicę dopasowań w postaci obiektów GMSPlace, z jednym obiektem GMSPlace na każde pasujące miejsce.

Pobieranie stanu otwartości

Obiekt GMSPlacesClient zawiera funkcję członkowską o nazwie isOpenWithRequest (isOpenRequest w Swift i isPlaceOpenRequest w GooglePlacesSwift), która zwraca odpowiedź wskazującą, czy dane miejsce jest obecnie otwarte, na podstawie czasu określonego w wywołaniu.

Ta metoda przyjmuje jeden argument typu GMSPlaceIsOpenWithRequest, który zawiera:

  • Obiekt GMSPlace lub ciąg znaków określający identyfikator miejsca. Więcej informacji o tworzeniu obiektu Miejsce z wymaganymi polami znajdziesz w sekcji Szczegóły miejsca.
  • Opcjonalny obiekt NSDate (Obj-C) lub Date (Swift), który określa czas, jaki chcesz sprawdzić. Jeśli nie podasz czasu, domyślnie zostanie ustawiona bieżąca chwila.
  • 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ą dostępne w obiekcie Miejsce lub jeśli przekazujesz identyfikator miejsca, metoda używa do ich pobierania GMSPlacesClient GMSFetchPlaceRequest:.

isOpenWithRequest odpowiedź

isOpenWithRequest zwraca obiekt GMSPlaceIsOpenResponse zawierający wartość logiczną o nazwie status, która wskazuje, czy firma jest otwarta, zamknięta czy jej stan jest nieznany.

Język Wartość, jeśli jest otwarta Wartość, jeśli jest zamknięta Wartość, jeśli stan jest nieznany
Swift .open .closed .unknown
Objective-C GMSPlaceOpenStatusOpen GMSPlaceOpenStatusClosed GMSPlaceOpenStatusUnknown
GooglePlacesSwift (wersja testowa) true false nil

Płatności za konto isOpenWithRequest

Przykład: wysłanie prośby GMSPlaceIsOpenWithRequest

Poniższy przykład pokazuje, jak zainicjować GMSPlaceIsOpenWithRequest w obiekcie GMSPlace.

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
            }
          }];
          

GooglePlacesSwift

          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
          }
          

Wymagane parametry

Aby określić wymagane parametry wyszukiwania, użyj obiektu GMSPlaceSearchNearbyRequest.

  • Lista pól

    Gdy żądasz szczegółów miejsca, musisz określić dane, które mają zostać zwrócone w obiekcie GMSPlace dla miejsca jako maska pola. Aby zdefiniować maskę pola, prześlij tablicę wartości z GMSPlaceProperty do obiektu GMSPlaceSearchNearbyRequest. Maskowanie pól to dobra praktyka projektowania, która pozwala uniknąć żądania niepotrzebnych danych, co pomaga uniknąć niepotrzebnego czasu przetwarzania i opłat.

    Podaj co najmniej 1 z tych pól:

    • Te pola powodują użycie kodu SKU Nearby Search Pro:

      GMSPlacePropertyAddressComponents
      GMSPlacePropertyBusinessStatus
      GMSPlacePropertyCoordinate
      GMSPlacePropertyFormattedAddress
      GMSPlacePropertyName
      GMSPlacePropertyIconBackgroundColor
      GMSPlacePropertyIconImageURL
      GMSPlacePropertyPhotos
      GMSPlacePropertyPlaceID
      GMSPlacePropertyPlusCode
      GMSPlacePropertyTypes
      GMSPlacePropertyUTCOffsetMinutes
      GMSPlacePropertyViewport
      GMSPlacePropertyWheelchairAccessibleEntrance

    • Te pola powodują uruchomienie kodu SKU wyszukiwania w pobliżu w Enterprise:

      GMSPlacePropertyCurrentOpeningHours
      GMSPlacePropertySecondaryOpeningHours
      GMSPlacePropertyPhoneNumber
      GMSPlacePropertyPriceLevel
      GMSPlacePropertyRating
      GMSPlacePropertyOpeningHours
      GMSPlacePropertyUserRatingsTotal
      GMSPlacePropertyWebsite

    • Te pola powodują uruchomienie poziomu Enterprise Plus usługi wyszukiwania w pobliżu:

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

    W tym przykładzie przekazywana jest lista 2 wartości pól, aby określić, że obiekt GMSPlace zwracany przez żądanie zawiera pola nameplaceID:

    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];
            

    Pakiet SDK Miejsca Swift na iOS (wersja podglądowa)

    // Specify the place data types to return.
    let fields: [PlaceProperty] = [.placeID, .displayName]
            
  • locationRestriction

    Obiekt GMSPlaceLocationRestrictionokreślający region wyszukiwania określony jako okrąg z punktami środkowymi i promieniem w metrach. Promień musi się mieścić w przedziale od 0,0 do 50 000,0 (włącznie). Domyślny promień to 0,0. W żądaniu musisz ustawić wartość większą niż 0,0.

Parametry opcjonalne

Użyj obiektu GMSPlaceSearchNearbyRequest, aby określić opcjonalne parametry wyszukiwania.

  • includedTypes/excludedTypes, includedPrimaryTypes/excludedPrimaryTypes

    Umożliwia określenie listy typów z tabel tabeli A, których można użyć do filtrowania wyników wyszukiwania. W każdej kategorii ograniczeń typu możesz określić maksymalnie 50 typów.

    Miejsce może mieć tylko jeden podstawowy typ z typów wymienionych w tabeli A. Na przykład typ podstawowy może być "mexican_restaurant" lub "steak_house". Użyj właściwości includedPrimaryTypesexcludedPrimaryTypes, aby filtrować wyniki według głównego typu miejsca.

    Miejsce może też mieć wiele wartości typu z typów wymienionych w tabeli A powiązanych z tym miejscem. Na przykład restauracja może mieć te typy:"seafood_restaurant", "restaurant", "food","point_of_interest", "establishment". Użyj znaków includedTypes i excludedTypes, aby filtrować wyniki na liście typów powiązanych z miejscem.

    Jeśli określisz ogólny podstawowy typ, np. "restaurant" lub "hotel", odpowiedź może zawierać miejsca o bardziej szczegółowym podstawowym typie niż podany. Możesz na przykład określić, że chcesz uwzględnić główny typ: "restaurant". Odpowiedź może zawierać miejsca o podstawowym typie "restaurant", ale może też zawierać miejsca o bardziej szczegółowym typie podstawowym, np. "chinese_restaurant" lub "seafood_restaurant".

    Jeśli wyszukiwanie jest określone z wieloma ograniczeniami typu, zwracane są tylko miejsca, które spełniają wszystkie ograniczenia. Jeśli np. podasz wartość {"includedTypes": ["restaurant"], "excludedPrimaryTypes": ["steak_house"]}, miejsca zwrócone przez wyszukiwanie 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órych szukać. Jeśli ten parametr zostanie pominięty, zwrócone zostaną miejsca wszystkich typów.

    excludedTypes

    Lista typów miejsc z tabeli A do wykluczenia z wyszukiwania.

    Jeśli w żądaniu podasz zarówno parametr includedTypes (np. "school"), jak i excludedTypes (np. "primary_school"), odpowiedź będzie zawierać miejsca zakwalifikowane jako "school", ale nie jako "primary_school". Odpowiedź zawiera miejsca, które pasują do co najmniej jednegoincludedTypesżadnegoexcludedTypes.

    Jeśli występują jakieś sprzeczne typy, np. typ występujący zarówno w opcji includedTypes, jak i excludedTypes, zwracany jest błąd INVALID_REQUEST.

    includedPrimaryTypes

    Lista podstawowych typów miejsc z tabeli A do uwzględnienia w wyszukiwaniu.

    excludedPrimaryTypes

    Lista głównych typów miejsc z tabeli A do wykluczenia z wyszukiwania.

    Jeśli występują jakieś sprzeczne typy podstawowe, np. typ występujący zarówno w includedPrimaryTypes, jak i excludedPrimaryTypes, zwracany jest błąd INVALID_ARGUMENT.

  • maxResultCount

    Określa maksymalną liczbę wyników wyszukiwania miejsc do zwrócenia. Musi mieścić się w zakresie od 1 do 20 (domyślnie).

  • rankPreference

    Typ rankingu do użycia. Jeśli ten parametr zostanie pominięty, wyniki zostaną posortowane według popularności. Może być jedną z tych wartości:

    • .popularity (ustawienie domyślne) – sortuje wyniki według ich popularności.
    • .distance Sortuje wyniki w kolejności rosnącej według odległości od wybranej lokalizacji.
  • regionCode

    Kod regionu użyty do sformatowania odpowiedzi, podany jako 2-znakowy kod CLDR. Nie ma wartości domyślnej.

    Jeśli nazwa kraju w polu formattedAddress w odpowiedzi pasuje do wartości w polu regionCode, kod kraju jest pomijany w polu formattedAddress. Ten parametr nie ma wpływu na adrFormatAddress, który zawsze zawiera nazwę kraju, ani na shortFormattedAddress, która nigdy nie zawiera nazwy kraju.

    Większość kodów CLDR jest identyczna z kodami ISO 3166-1, z niektórymi 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 w zależności od obowiązujących przepisów.

Wyświetlanie informacji o pochodzeniu danych w aplikacji

Jeśli aplikacja wyświetla informacje uzyskane z GMSPlacesClient, takie jak zdjęcia i opinie, musi też wyświetlać wymagane informacje o źródle.

Na przykład właściwość reviews obiektu GMSPlacesClient zawiera tablicę zawierającą do 5 obiektów GMSPlaceReview. Każdy obiekt GMSPlaceReview może zawierać informacje o źródłach i autorach. Jeśli wyświetlasz opinię w aplikacji, musisz też wyświetlić wszelkie informacje o źródle lub autora.

Więcej informacji znajdziesz w dokumentacji dotyczącej przypisywania zasług.