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

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

Запрос «Поиск поблизости (новый)» принимает в качестве входных данных область поиска, заданную в виде круга, определяемого координатами широты и долготы центра круга, а также радиусом в метрах. Запрос возвращает список соответствующих мест, каждое из которых представлено объектом 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

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

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

Выставление счетов за isOpenWithRequest

  • Поля GMSPlacePropertyUTCOffsetMinutes и GMSPlacePropertyBusinessStatus тарифицируются по артикулу Basic Data . Остальные поля Opening Hours тарифицируются по артикулу Place Details Enterprise.
  • Если ваш объект GMSPlace уже содержит эти поля из предыдущего запроса, с вас не будет взиматься повторная плата.

Пример: создание запроса 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 SKU :

      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];
            
  • МестоположениеОграничение

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

Необязательные параметры

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

  • ВключенныеТипы/ИсключенныеТипы, ВключенныеПервичныеТипы/ИсключенныеПервичныеТипы

    Позволяет указать список типов из таблицы 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" .

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

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

    исключенные типы

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

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

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

    включеныPrimaryTypes

    Список основных типов мест из Таблицы А для включения в поиск.

    исключенные основные типы

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

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

  • maxResultCount

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

  • rankPreference

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

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

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

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

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

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

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

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

Более подробную информацию см. в документации по атрибуции .