Places SDK для iOS предоставляет вашему приложению подробную информацию о местах, включая название и адрес места, географическое положение, указанное в виде координат широты и долготы, тип места (например, ночной клуб, зоомагазин, музей) и многое другое. Чтобы получить доступ к этой информации о конкретном месте, вы можете использовать идентификатор места — стабильный уникальный идентификатор.
Подробности места
Класс GMSPlace
предоставляет информацию о конкретном месте. Вы можете получить объект GMSPlace
следующими способами:
- Вызовите
GMSPlacesClient findPlaceLikelihoodsFromUserLocationWithPlaceFields:
. См. руководство по получению текущего места . - Вызовите
GMSPlacesClient fetchPlaceFromPlaceID:
, передавGMSPlaceField
, идентификатор места и метод обратного вызова. Если в запросе Place Details не указано хотя бы одно поле или параметрfields
пропущен, будут возвращены ВСЕ возможные поля, и с вас будет взиматься плата за них. См. руководство по получению места по идентификатору .
При запросе местоположения необходимо указать, какие типы данных о месте нужно вернуть. Для этого передайте поле GMSPlaceField
с указанием типов возвращаемых данных. Это важный фактор, поскольку он влияет на стоимость каждого запроса.
Поскольку результаты поиска данных о месте не могут быть пустыми, возвращаются только результаты поиска мест с данными (например, если у запрошенного места нет фотографий, поле photos
не будет присутствовать в результате).
В следующем примере передается список из двух значений полей для указания данных, возвращаемых запросом:
Быстрый
// A hotel in Saigon with an attribution. let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" // Specify the place data types to return. let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) | UInt(GMSPlaceField.placeID.rawValue))
Objective-C
// A hotel in Saigon with an attribution. NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs"; // Specify the place data types to return. GMSPlaceField fields = (GMSPlaceFieldName | GMSPlaceFieldPlaceID);
Подробнее о полях мест . Подробнее о выставлении счетов за запросы данных мест см. в разделе «Использование и выставление счетов» .
Класс GMSPlace
может содержать следующие данные о месте:
-
name
– Название места. -
editorialSummary
– Содержит описание места. -
placeID
– текстовый идентификатор места. Подробнее об идентификаторах мест читайте далее на этой странице. -
coordinate
– географическое положение места, указанное в виде координат широты и долготы. -
phoneNumber
– номер телефона места в международном формате. -
formattedAddress
– человекочитаемый адрес этого местоположения.Часто этот адрес совпадает с почтовым адресом. Обратите внимание, что в некоторых странах, например, в Великобритании, распространение настоящих почтовых адресов запрещено из-за лицензионных ограничений.
Форматированный адрес логически состоит из одного или нескольких компонентов адреса . Например, адрес «111 8th Avenue, New York, NY» состоит из следующих компонентов: «111» (номер дома), «8th Avenue» (маршрут), «New York» (город) и «NY» (штат США).
Не анализируйте отформатированный адрес программно. Вместо этого используйте отдельные компоненты адреса, которые API-ответ включает в себя в дополнение к полю отформатированного адреса.
-
openingHours
– часы работы места (представленныеGMSOpeningHours
). ВызовитеGMSOpeningHours.weekdayText
, чтобы получить список локализованных строк с часами работы на этой неделе. ВызовитеGMSOpeningHours.Periods
, чтобы вернуть списокGMSPeriod
с более подробной информацией, эквивалентной данным, предоставляемымweekdayText
. Примечание: если место всегда открыто, временной период представляется как воскресенье, полночь, аcloseEvent
равен null. -
currentOpeningHours
иsecondaryOpeningHours
— поля, в которых учитываются праздничные и временные изменения в расписании работы места. addressComponents
– массив объектовGMSAddressComponent
, представляющих компоненты адреса места. Эти компоненты предназначены для извлечения структурированной информации об адресе места, например, для определения города, в котором оно находится. Не используйте эти компоненты для форматирования адреса; вместо этого используйте свойствоformattedAddress
, которое предоставляет локализованный форматированный адрес.Обратите внимание на следующие факты о массиве
addressComponents
:- Массив компонентов адреса может содержать больше компонентов, чем
formattedAddress
. - Массив не обязательно включает все политические образования, содержащие адрес, за исключением тех, которые включены в
formattedAddress
. - Формат ответа не гарантирует неизменности между запросами. В частности, количество
addressComponents
зависит от запрошенного адреса и может меняться со временем для одного и того же адреса. Компонент может менять положение в массиве. Тип компонента может меняться. В последующем ответе может отсутствовать определённый компонент.
- Массив компонентов адреса может содержать больше компонентов, чем
-
userRatingsTotal
– показывает, сколько отзывов составляют рейтинг места.
Класс GMSPlace
содержит следующие функции-члены:
-
isOpen
вычисляет, открыто ли место в указанное время, на основеopeningHours
иUTCOffsetMinutes
, а также текущей даты и времени. -
isOpenAtDate
вычисляет, открыто ли место в указанную дату, на основеopeningHours
иUTCOffsetMinutes
, а также текущей даты и времени.
При использовании этих функций для получения времени и/или дат открытия, исходный запрос fetchPlaceFromPlaceID:
или findPlaceLikelihoodsFromUserLocationWithPlaceFields:
должен содержать ОБА поля: GMSPlaceFieldOpeningHours
и GMSPlaceFieldUTCOffsetMinutes
. Если любое из этих полей отсутствует, результирующий объект GMSPlace
не будет содержать времени и даты открытия, а вызов вернет GMSPlaceOpenStatusUnknown
. Для получения точных результатов запросите поля GMSPlaceFieldBusinessStatus
и GMSPlaceFieldUTCOffsetMinutes
в исходном запросе места. Если поля не указаны, предполагается, что компания работает.
isOpen
с данными о месте см. в видеоролике «Как узнать часы работы» .Получите исключительные часы работы
В то время как обычные часы работы определяются черезopeningHours
, currentOpeningHours
и secondaryOpeningHours
поддерживают праздничные и временные изменения в расписании. Исключительные часы работы для таких особых дней можно отфильтровать и отобразить, если они доступны. Быстрый
func examineOpeningHours(place: GMSPlace) { // Check if the current opening hours contains a special day that has exceptional hours guard let currentOpeningHours = place.currentOpeningHours else { return } if let specialDays = currentOpeningHours.specialDays { guard !specialDays.isEmpty else { return } if let specialDay = specialDays.filter { $0.isExceptional }.first { // Indicate exceptional hours } } // Check if current opening hours contains a truncated time period let periods = currentOpeningHours.periods if !periods.isEmpty { for period in periods { let open = period.open let close = period.close if let open = open { let date = open.date if open.isTruncated { // Indicate truncated time period } } } } // Check if the place's secondary opening hours indicate when delivery is available let secondaryOpeningHours = place.secondaryOpeningHours guard let hoursType = secondaryOpeningHours.first?.hoursType else { return } if (hoursType == GMSPlaceHoursTypeDelivery) { // Indicate hours where delivery is available } }
Objective-C
- (void)examineOpeningHours:(GMSPlace *) place { // Check if the current opening hours contains a special day that has exceptional hours GMSOpeningHours *currentOpeningHours = place.currentOpeningHours; if (currentOpeningHours != nil) { NSArray<GMSPlaceSpecialDay *> *specialDays = currentOpeningHours.specialDays; if ([specialDays count] != 0) { for (GMSPlaceSpecialDay *specialDay in specialDays) { NSDate *date = specialDay.date; if ([specialDay isExceptional]) { // Indicate exceptional hours } } } } // Check if current opening hours contains a truncated time period NSArray <GMSPeriod *> * periods = currentOpeningHours.periods; if ([periods count] != 0) { for (GMSPeriod * period in periods) { GMSTimeOfWeek *open = period.open; GMSTimeOfWeek *close = period.close; if (open) { if ([open isTruncated]) { // Indicate truncated time period } } } } // Check if the place's secondary opening hours indicate when delivery is available GMSOpeningHours *secondaryOpeningHours = place.secondaryOpeningHours; GMSPlaceHoursType hoursType = secondaryOpeningHours.getHoursType; if (hoursType == GMSPlaceHoursTypeDelivery) { // Indicate hours where delivery is available } }
Получить место по ID
Идентификатор места — это текстовый идентификатор, однозначно определяющий место. В Places SDK для iOS идентификатор места можно получить из объекта GMSPlace
. Вы можете сохранить идентификатор места и использовать его для последующего получения объекта GMSPlace
.
Чтобы получить место по идентификатору, вызовите GMSPlacesClient fetchPlaceFromPlaceID:
, передав следующие параметры:
- Строка, содержащая идентификатор места.
- Один или несколько полей
GMSPlaceField
, указывающих типы данных, которые необходимо вернуть. - Токен сеанса, если вызов выполняется для завершения запроса автодополнения. В противном случае передайте nil.
-
GMSPlaceResultCallback
для обработки результата.
API вызывает указанный метод обратного вызова, передавая объект GMSPlace
. Если место не найдено, объект места равен нулю.
Places Swift SDK для iOS
// Initialize Places Swift Client. let placesClient = PlacesClient.shared // A hotel in Saigon with an attribution let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" // Fetch Place Request. let fetchPlaceRequest = FetchPlaceRequest( placeID: placeID, placeProperties: [.displayName] ) Task { switch await placesClient.fetchPlace(with: fetchPlaceRequest) { case .success(let place): print("The selected place is: \(place.displayName): \(String(describing: place.description))") case .failure(let placesError): print("Place not found: \(placeID); \(placesError)") } }
Быстрый
// A hotel in Saigon with an attribution. let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" // Specify the place data types to return. let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) | UInt(GMSPlaceField.placeID.rawValue))! placesClient?.fetchPlace(fromPlaceID: placeID, placeFields: fields, sessionToken: nil, callback: { (place: GMSPlace?, error: Error?) in if let error = error { print("An error occurred: \(error.localizedDescription)") return } if let place = place { self.lblName?.text = place.name print("The selected place is: \(place.name)") } })
Objective-C
// A hotel in Saigon with an attribution. NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs"; // Specify the place data types to return. GMSPlaceField fields = (GMSPlaceFieldName | GMSPlaceFieldPlaceID); [_placesClient fetchPlaceFromPlaceID:placeID placeFields:fields sessionToken:nil callback:^(GMSPlace * _Nullable place, NSError * _Nullable error) { if (error != nil) { NSLog(@"An error occurred %@", [error localizedDescription]); return; } if (place != nil) { NSLog(@"The selected place is: %@", [place name]); } }];
Отображение атрибуции в вашем приложении
Когда ваше приложение отображает информацию, полученную от GMSPlacesClient lookUpPlaceID:callback:
, оно также должно отображать данные об атрибуции. См. документацию по атрибуции .
Подробнее об идентификаторах мест
Идентификатор места, используемый в Places SDK для iOS, — это тот же идентификатор, который используется в Places API, Places SDK для Android и других API Google .
Каждый идентификатор места может относиться только к одному месту, но одно место может иметь более одного идентификатора места.
Существуют обстоятельства, при которых место может получить новый идентификатор. Например, это может произойти, если компания переезжает на новое место.
Запрашивая место, указывая его идентификатор, вы можете быть уверены, что в ответе всегда будет указано одно и то же место (если оно всё ещё существует). Однако обратите внимание, что в ответе может содержаться идентификатор места, отличный от указанного в вашем запросе.
Более подробную информацию см. в обзоре идентификаторов мест .