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