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