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