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

Выберите платформу: Android iOS JavaScript Web Service

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

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

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

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

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

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

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

Место 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), указывающий время, которое вы хотите проверить. Если время не указано, по умолчанию используется now.
  • Метод 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 тарифицируются по базовому артикулу данных . Остальные часы работы тарифицируются по корпоративному артикулу сведений о месте.
  • Если ваш объект GMSPlace уже содержит эти поля из предыдущего запроса, с вас не будет взиматься дополнительная плата.

Пример: сделайте запрос GMSPlaceIsOpenWithRequest

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

Место 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 :

    Место 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 .

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

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

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

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

    Если имеются конфликтующие первичные типы, например, тип присутствует как в 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 может содержать атрибуции и авторские атрибуции. Если вы отображаете обзор в своем приложении, то вы также должны отображать любую атрибуцию или авторскую атрибуцию.

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