Поиск поблизости (новинка)

Выберите платформу: Android iOS JavaScript Веб-сервис
Разработчики из Европейской экономической зоны (ЕЭЗ)

Запрос «Поиск поблизости (новый)» принимает на вход область поиска, заданную в виде круга, определяемого координатами широты и долготы центра круга и радиусом в метрах. Запрос возвращает список подходящих мест, каждое из которых представлено объектом GMSPlace , в пределах указанной области поиска.

По умолчанию ответ содержит места всех типов в пределах области поиска. При желании вы можете отфильтровать ответ, указав список типов мест, которые следует явно включить или исключить из ответа. Например, вы можете указать, чтобы в ответ были включены только те места, которые относятся к типам «ресторан», «пекарня» и «кафе», или исключить все места типа «школа».

Поиск поблизости (новый) запросы

Выполните запрос на поиск поблизости, вызвав GMSPlacesClient searchNearbyWithRequest: передав объект GMSPlaceSearchNearbyRequest , определяющий параметры запроса, и метод обратного вызова типа GMSPlaceSearchNearbyResultCallback для обработки ответа.

Объект GMSPlaceSearchNearbyRequest определяет все обязательные и необязательные параметры запроса. К обязательным параметрам относятся:

  • Список полей, которые должны быть возвращены в объекте GMSPlace , также называемый маской полей , определяется свойством GMSPlaceProperty . Если вы не укажете хотя бы одно поле в списке полей или если вы его опустите, вызов вернет ошибку.
  • Ограничение по местоположению , то есть круг, определяющий область поиска.

В этом примере запроса на поиск поблизости указано, что объекты GMSPlace в ответе должны содержать название места ( GMSPlacePropertyName ) и координаты места ( GMSPlacePropertyCoordinate ) для каждого объекта GMSPlace в результатах поиска. Он также фильтрует ответ, чтобы возвращать только места типа «ресторан» и «кафе».

Places Swift SDK

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
}

Быстрый

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

Результаты поиска поблизости

API поиска поблизости возвращает массив совпадений в виде объектов GMSPlace , причем для каждого соответствующего места используется один объект GMSPlace .

Получить статус "Открыто"

Объект GMSPlacesClient содержит функцию-член с именем isOpenWithRequest ( isOpenRequest в Swift и isPlaceOpenRequest в GooglePlacesSwift), которая возвращает ответ, указывающий, открыто ли место в данный момент, исходя из времени, указанного в вызове.

Этот метод принимает один аргумент типа GMSPlaceIsOpenWithRequest , содержащий:

  • Объект GMSPlace или строка, указывающая идентификатор места. Дополнительную информацию о создании объекта Place с необходимыми полями см. в разделе «Подробности о месте» .
  • Необязательный объект NSDate (Obj-C) или Date (Swift), указывающий время, которое вы хотите проверить. Если время не указано, используется текущее время.
  • Метод GMSPlaceOpenStatusResponseCallback для обработки ответа.
  • >

Для работы метода GMSPlaceIsOpenWithRequest необходимо задать следующие поля в объекте GMSPlace :

  • GMSPlacePropertyUTCOffsetMinutes
  • GMSPlacePropertyBusinessStatus
  • GMSPlacePropertyOpeningHours
  • GMSPlacePropertyCurrentOpeningHours
  • GMSPlacePropertySecondaryOpeningHours

Если эти поля не указаны в объекте Place или если вы передаете идентификатор места, метод использует GMSPlacesClient GMSFetchPlaceRequest: для их получения.

isOpenWithRequest response

isOpenWithRequest возвращает объект GMSPlaceIsOpenResponse , содержащий логическое значение с именем status , указывающее, открыто ли предприятие, закрыто или его статус неизвестен.

Язык Значение при открытии Стоимость при закрытии Значение, если статус неизвестен
Места Свифт true false nil
Быстрый .open .closed .unknown
Objective-C GMSPlaceOpenStatusOpen GMSPlaceOpenStatusClosed GMSPlaceOpenStatusUnknown

Оплата за isOpenWithRequest

Пример: Выполните запрос GMSPlaceIsOpenWithRequest

В следующем примере показано, как инициализировать объект GMSPlaceIsOpenWithRequest внутри существующего объекта GMSPlace .

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
        }
        

Быстрый

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

Необходимые параметры

Используйте объект GMSPlaceSearchNearbyRequest для указания необходимых параметров поиска.

  • Список полей

    При запросе сведений о месте необходимо указать данные, которые должны быть возвращены в объекте GMSPlace в виде маски поля. Для определения маски поля передайте массив значений из GMSPlaceProperty в объект GMSPlaceSearchNearbyRequest . Использование маски поля — это хорошая практика проектирования, позволяющая избежать запроса лишних данных, что помогает избежать ненужного времени обработки и дополнительных расходов.

    Укажите одно или несколько из следующих полей:

    • Следующие поля активируют артикул Nearby Search Pro :

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

      Полный список полей и соответствующих им артикулов см. в разделе «Размещение полей данных (новое)» .

    • Следующие поля запускают функцию Nearby Search Enterprise SKU :

      GMSPlacePropertyCurrentOpeningHours
      GMSPlacePropertySecondaryOpeningHours
      GMSPlacePropertyPhoneNumber
      GMSPlacePropertyPriceLevel
      GMSPlacePropertyRating
      GMSPlacePropertyOpeningHours
      GMSPlacePropertyUserRatingsTotal
      GMSPlacePropertyWebsite

      Полный список полей и соответствующих им артикулов см. в разделе «Размещение полей данных (новое)» .

    • Следующие поля активируют функцию Nearby Search Enterprise Plus SKU :

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

      Полный список полей и соответствующих им артикулов см. в разделе «Размещение полей данных (новое)» .

    В следующем примере передается список из двух значений полей , чтобы указать, что объект GMSPlace , возвращаемый запросом, должен содержать поля name и placeID :

    Places Swift SDK

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

    Быстрый

    // 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

    Объект GMSPlaceLocationRestriction определяет область поиска в виде круга, заданного центральной точкой и радиусом в метрах. Радиус должен находиться в диапазоне от 0,0 до 50000,0 включительно. Радиус по умолчанию равен 0,0. В запросе необходимо установить значение больше 0,0.

Дополнительные параметры

Используйте объект GMSPlaceSearchNearbyRequest для указания необязательных параметров поиска.

  • includedTypes/excludedTypes, includedPrimaryTypes/excludedPrimaryTypes

    Позволяет указать список типов из таблицы типов A, используемых для фильтрации результатов поиска. В каждой категории ограничения типов можно указать до 50 типов.

    Для каждого заведения может быть только один основной тип из таблицы типов A. Например, основным типом может быть "mexican_restaurant" или "steak_house" . Используйте includedPrimaryTypes и excludedPrimaryTypes для фильтрации результатов по основному типу заведения.

    Место также может иметь несколько значений типа из таблицы типов A , связанных с ним. Например, ресторан может иметь следующие типы: "seafood_restaurant" , "restaurant" , "food" , "point_of_interest" , "establishment" . Используйте includedTypes и excludedTypes для фильтрации результатов в списке типов, связанных с местом.

    Если вы указываете общий основной тип, например, "restaurant" или "hotel" , ответ может содержать заведения с более специфическим основным типом, чем указанный. Например, вы указываете основной тип "restaurant" . В этом случае ответ может содержать заведения с основным типом "restaurant" , но также может содержать заведения с более специфическим основным типом, например, "chinese_restaurant" или "seafood_restaurant" .

    Если в поиске указаны ограничения по нескольким типам, возвращаются только те места, которые удовлетворяют всем ограничениям. Например, если вы укажете {"includedTypes": ["restaurant"], "excludedPrimaryTypes": ["steak_house"]} , то возвращаемые места предоставляют услуги, связанные с "restaurant" , но не работают преимущественно как "steak_house" .

    включенныеТипы

    Список типов мест из таблицы А для поиска. Если этот параметр опущен, возвращаются места всех типов.

    excludedTypes

    Список типов мест из таблицы А , которые следует исключить из поиска.

    Если в запросе указаны как includedTypes (например, "school" ), так и excludedTypes типы (например, "primary_school" ), то ответ будет включать места, которые классифицируются как "school" , но не как "primary_school" . Ответ будет включать места, которые соответствуют хотя бы одному из includedTypes и ни одному из excludedTypes .

    Если возникают конфликтующие типы, например, тип присутствует как в includedTypes , так и excludedTypes , возвращается ошибка INVALID_REQUEST .

    включенные первичные типы

    Список основных типов мест из таблицы А, которые следует включить в поиск.

    excludedPrimaryTypes

    Список основных типов мест из таблицы А , которые следует исключить из поиска.

    Если существуют конфликтующие первичные типы, например, тип присутствует как в includedPrimaryTypes , так и excludedPrimaryTypes , возвращается ошибка INVALID_ARGUMENT .

  • maxResultCount

    Указывает максимальное количество результатов поиска мест, которые необходимо вернуть. Должно быть от 1 до 20 (по умолчанию) включительно.

  • rankPreference

    Тип используемого ранжирования. Если этот параметр опущен, результаты ранжируются по популярности. Может принимать одно из следующих значений:

    • .popularity (по умолчанию) Сортирует результаты на основе их популярности.
    • Функция .distance сортирует результаты в порядке возрастания расстояния от указанного местоположения.
  • regionCode

    Региональный код, используемый для форматирования ответа, указывается в виде двухсимвольного кода CLDR . Значение по умолчанию отсутствует.

    Если название страны в поле formattedAddress в ответе совпадает с regionCode , код страны опускается в formattedAddress . Этот параметр не влияет на adrFormatAddress , который всегда включает название страны, или на shortFormattedAddress , который никогда его не включает.

    Большинство кодов CLDR идентичны кодам ISO 3166-1, за некоторыми заметными исключениями. Например, национальный домен верхнего уровня Соединенного Королевства — «uk» (.co.uk), а его код ISO 3166-1 — «gb» (технически обозначающий «Соединенное Королевство Великобритании и Северной Ирландии»). Параметр может влиять на результаты в зависимости от применимого законодательства.

Отображайте атрибуцию в своем приложении

Когда ваше приложение отображает информацию, полученную от GMSPlacesClient , такую ​​как фотографии и отзывы, оно также должно отображать необходимые атрибуты.

Например, свойство reviews объекта GMSPlacesClient содержит массив, содержащий до пяти объектов GMSPlaceReview . Каждый объект GMSPlaceReview может содержать информацию об авторстве и его авторстве. Если вы отображаете отзыв в своем приложении, то вы также должны отображать любую информацию об авторстве или его авторстве.

Для получения более подробной информации см. документацию по атрибуции .