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

Выберите платформу: Android iOS Веб-служба JavaScript

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

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

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

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

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

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

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

Быстрый

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

Цель-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;
    }
  }
];

Places Swift SDK для iOS (предварительная версия)

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
}

Ответы на поиск поблизости

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 , которое указывает, открыто ли предприятие, закрыто или статус неизвестен.

Язык Значение, если открыто Значение, если закрыто Значение, если статус неизвестен
Быстрый .open .closed .unknown
Цель-C GMSPlaceOpenStatusOpen GMSPlaceOpenStatusClosed GMSPlaceOpenStatusUnknown
GooglePlacesSwift (предварительная версия) true false nil

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

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

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

Быстрый

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

Цель-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
          }
          

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

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

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

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

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

    • Следующие поля активируют SKU «Поиск поблизости (базовый)» :

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

    • Следующие поля активируют SKU «Поиск поблизости (расширенный)» :

      GMSPlacePropertyCurrentOpeningHours , GMSPlacePropertySecondaryOpeningHours , GMSPlacePropertyPhoneNumber , GMSPlacePropertyPriceLevel , GMSPlacePropertyRating , gmsplacepropertyopeninghours, GMSPlacePropertyOpeningHours , GMSPlacePropertyUserRatingsTotal , GMSPlacePropertyWebsite

    • Следующие поля активируют SKU «Поиск поблизости (предпочтительный)» :

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

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

    Быстрый

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

    Цель-C

    // Specify the place data types to return.
    NSArray<GMSPlaceProperty *> *fields = @[GMSPlacePropertyPlaceID, GMSPlacePropertyName];
            

    Places Swift SDK для iOS (предварительная версия)

    // Specify the place data types to return.
    let fields: [PlaceProperty] = [.placeID, .displayName]
            
  • МестоположениеОграничение

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

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

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

  • includeTypes/excludedTypes, includePrimaryTypes/excludedPrimaryTypes

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

    Место может иметь только один основной тип из таблицы типов, связанных с ним. Например, основным типом может быть "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" .

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

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

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

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

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

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

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

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

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

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

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

  • МаксРезультатКаунт

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

  • рангПредпочтение

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

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

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

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

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

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

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

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

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