Текстовый поиск возвращает информацию о наборе мест по заданной строке. Например, «пицца в Нью-Йорке», «обувные магазины рядом с Оттавой» или «123 Мэйн-стрит». Сервис возвращает список мест, соответствующих текстовой строке, с учётом заданного смещения местоположения.
Этот сервис особенно полезен для создания неоднозначных адресных запросов в автоматизированной системе, поскольку неадресные компоненты строки могут соответствовать как компаниям, так и адресам. Примерами неоднозначных адресных запросов являются неправильно отформатированные адреса или запросы, содержащие неадресные компоненты, например, названия компаний. Запросы, подобные первым двум примерам, могут возвращать нулевые результаты, если не указано местоположение (например, регион, ограничение местоположения или смещение местоположения).
«10 Хай-стрит, Великобритания» или «123 Мэйн-стрит, США» | Несколько главных улиц в Великобритании; несколько главных улиц в США. Запрос не возвращает желаемые результаты, если не установлено ограничение по местоположению. |
«Сетевой ресторан Нью-Йорк» | Несколько сетевых ресторанов в Нью-Йорке; нет адреса или даже названия улицы. |
«10 Хай-стрит, Эшер, Великобритания» или «123 Мэйн-стрит, Плезантон, США» | Только одна «High Street» в британском городе Эшер; только одна «Main Street» в американском городе Плезантон, штат Калифорния. |
«Уникальное название ресторана в Нью-Йорке» | Только одно заведение с таким названием находится в Нью-Йорке; для различения не требуется указывать адрес. |
"пиццерии в Нью-Йорке" | Этот запрос содержит ограничение по местоположению, а «пиццерии» — это чётко определённый тип места. Он возвращает несколько результатов. |
"+1 514-670-8700" | Этот запрос содержит номер телефона. Он возвращает несколько результатов для мест, связанных с этим номером телефона. |
Получить список мест с помощью текстового поиска
Сделайте запрос на текстовый поиск, вызвав GMSPlacesClient searchByTextWithRequest:
, передав объект GMSPlaceSearchByTextRequest
, который определяет параметры запроса, и метод обратного вызова типа GMSPlaceSearchByTextResultCallback
для обработки ответа.
Объект GMSPlaceSearchByTextRequest
определяет все обязательные и необязательные параметры запроса. Обязательные параметры включают:
- Список полей, возвращаемых в объекте
GMSPlace
, также называемый маской полей , как определено вGMSPlaceProperty
. Если вы не укажете хотя бы одно поле в списке полей или пропустите список полей, вызов вернет ошибку. - Текстовый запрос .
В этом примере текстового поискового запроса указано, что объекты GMSPlace
ответа содержат название и идентификатор места для каждого объекта GMSPlace
в результатах поиска. Он также фильтрует ответ, возвращая только места типа «ресторан».
Places Swift SDK
let restriction = RectangularLocationRestriction( northEast: CLLocationCoordinate2D(latitude: 20, longitude: 30), southWest: CLLocationCoordinate2D(latitude: 40, longitude: 50) ) let searchByTextRequest = SearchByTextRequest( textQuery: "pizza in New York", placeProperties: [ .name, .placeID ], locationRestriction: restriction, includedType: .restaurant, maxResultCount: 5, minRating: 3.5, priceLevels: [ .moderate, .inexpensive ], isStrictTypeFiltering: true ) switch await placesClient.searchByText(with: searchByTextRequest) { case .success(let places): // Handle places case .failure(let placesError): // Handle error }
Быстрый
// Create the GMSPlaceSearchByTextRequest object. let myProperties = [GMSPlaceProperty.name, GMSPlaceProperty.placeID].map {$0.rawValue} let request = GMSPlaceSearchByTextRequest(textQuery:"pizza in New York", placeProperties:myProperties) request.isOpenNow = true request.includedType = "restaurant" request.maxResultCount = 5 request.minRating = 3.5 request.rankPreference = .distance request.isStrictTypeFiltering = true request.locationBias = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0) // Array to hold the places in the response var placeResults: [GMSPlace] = [] let callback: GMSPlaceSearchByTextResultCallback = { [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().searchByText(with: request, callback: callback)
Objective-C
// Create the GMSPlaceSearchByTextRequest object. GMSPlaceSearchByTextRequest *request = [[GMSPlaceSearchByTextRequest alloc] initWithTextQuery:@"pizza in New York" placeProperties:@[GMSPlacePropertyName, GMSPlacePropertyPlaceID]]; request.isOpenNow = YES; request.includedType = @"restaurant"; request.maxResultCount = 5; request.minRating = 3.5; request.rankPreference = GMSPlaceSearchByTextRankPreferenceDistance; request.isStrictTypeFiltering = YES; request.priceLevels = @[ @(kGMSPlacesPriceLevelFree), @(kGMSPlacesPriceLevelCheap) ]; request.locationBias = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0); // Array to hold the places in the response _placeResults = [NSArray array]; // Create the GMSPlaceSearchByTextRequest object. [_placesClient searchByTextWithRequest:request callback:^(NSArray<GMSPlace *> *_Nullable placeResults, NSError * _Nullable error) { if (error != nil) { NSLog(@"An error occurred %@", [error localizedDescription]); return; } else { if (placeResults.count > 0) { // Get list of places. _placeResults = placeResults; } } } ];
Ответы текстового поиска
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 } }];
Обязательные параметры
Используйте объект GMSPlaceSearchByTextRequest
, чтобы указать необходимые параметры поиска.
Список полей
Укажите, какие свойства данных о месте нужно вернуть. Передайте список свойств
GMSPlace
с указанием полей данных, которые нужно вернуть. Если маска поля не указана, запрос вернёт ошибку.Списки полей — это хорошая практика проектирования, которая гарантирует, что вы не запрашиваете ненужные данные, что помогает избежать ненужного времени обработки и расходов на выставление счетов.
Укажите одно или несколько из следующих полей:
Следующие поля активируют идентификатор Text Search Essentials Only SKU :
GMSPlacePropertyPlaceID
Следующие поля активируют Text Search Pro SKU :
GMSPlacePropertyAddressComponents
GMSPlacePropertyBusinessStatus
GMSPlacePropertyCoordinate
GMSPlacePropertyFormattedAddress
GMSPlacePropertyIconBackgroundColor
GMSPlacePropertyIconImageURL
GMSPlacePropertyName
GMSPlacePropertyPhotos
GMSPlacePropertyPlusCode
GMSPlacePropertyTypes
GMSPlacePropertyUTCOffsetMinutes
GMSPlacePropertyViewport
GMSPlacePropertyWheelchairAccessibleEntrance
Следующие поля активируют Text Search Enterprise SKU :
GMSPlacePropertyCurrentOpeningHours
GMSPlacePropertySecondaryOpeningHours
GMSPlacePropertyPhoneNumber
GMSPlacePropertyPriceLevel
GMSPlacePropertyRating
GMSPlacePropertyOpeningHours
GMSPlacePropertyUserRatingsTotal
GMSPlacePropertyWebsite
Следующие поля активируют Text Search Enterprise Plus SKU :
GMSPlacePropertyCurbsidePickup
GMSPlacePropertyDelivery
GMSPlacePropertyDineIn
GMSPlacePropertyEditorialSummary
GMSPlacePropertyReservable
GMSPlacePropertyReviews
GMSPlacePropertyServesBeer
GMSPlacePropertyServesBreakfast
GMSPlacePropertyServesBrunch
GMSPlacePropertyServesDinner
GMSPlacePropertyServesLunch
GMSPlacePropertyServesVegetarianFood
GMSPlacePropertyServesWine
GMSPlacePropertyTakeout
текстовый запрос
Текстовая строка, по которой следует выполнять поиск, например: «ресторан», «123 Main Street» или «лучшее место для посещения в Сан-Франциско».
Необязательные параметры
Используйте объект GMSPlaceSearchByTextRequest
, чтобы указать необязательные параметры поиска.
включенныйТип
Ограничивает результаты местами, соответствующими указанному типу, заданному в Таблице A. Можно указать только один тип. Например:
-
let request = SearchByTextRequest()
request.includedType = "bar" -
let request = SearchByTextRequest()
request.includedType = "pharmacy"
-
isOpenNow
Если
true
, возвращаются только те организации, которые открыты на момент отправки запроса. Еслиfalse
, возвращаются все организации независимо от их статуса. Если этому параметру задано значениеfalse
, возвращаются места, для которых не указаны часы работы в базе данных Google Адресов.isStrictTypeFiltering
Используется с параметром
includeType
. Если задано значениеtrue
, возвращаются только места, соответствующие указанным типам, заданным параметромincludeType
. Если задано значение false (значение по умолчанию), ответ может содержать места, не соответствующие указанным типам.locationBias
Указывает область поиска. Это местоположение служит смещением, что означает, что могут быть возвращены результаты, близкие к указанному местоположению, включая результаты за пределами указанной области.
Можно указать
locationRestriction
илиlocationBias
, но не оба одновременно.locationRestriction
можно рассматривать как указание региона, в пределах которого должны находиться результаты, аlocationBias
как указание региона, вблизи которого должны находиться результаты, но который может находиться за его пределами.Укажите область как прямоугольную область просмотра или как круг.
Окружность определяется точкой центра и радиусом в метрах. Радиус должен быть в диапазоне от 0,0 до 50000,0 включительно. Радиус по умолчанию равен 0,0. Например:
let request = SearchByTextRequest() request.locationBias = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0)
Прямоугольник — это область просмотра, представленная в виде двух диагонально противоположных точек: самой низкой и самой высокой. Самая низкая точка соответствует юго-западному углу прямоугольника, а самая высокая — северо-восточному.
Область просмотра считается замкнутой областью, то есть включает её границу. Диапазон широты должен быть от -90 до 90 градусов включительно, а диапазон долготы — от -180 до 180 градусов включительно.
- Если
low
=high
, то область просмотра состоит из этой единственной точки. - Если
low.longitude
>high.longitude
, диапазон долготы инвертируется (область просмотра пересекает линию долготы 180 градусов). - Если
low.longitude
= -180 градусов иhigh.longitude
= 180 градусов, область просмотра включает все долготы. - Если
low.longitude
= 180 градусов, аhigh.longitude
= -180 градусов, диапазон долготы пуст. - Если
low.latitude
>high.latitude
, диапазон широт пуст.
- Если
МестоположениеОграничение
Указывает область поиска. Результаты за пределами указанной области не возвращаются. Укажите область как прямоугольную область просмотра. Информацию об определении области просмотра см. в описании
locationBias
.Можно указать
locationRestriction
илиlocationBias
, но не оба одновременно.locationRestriction
можно рассматривать как указание региона, в пределах которого должны находиться результаты, аlocationBias
как указание региона, вблизи которого должны находиться результаты, но который может находиться за его пределами.maxResultCount
Указывает максимальное количество возвращаемых результатов поиска по месту. Должно быть от 1 до 20 (по умолчанию) включительно.
минРейтинг
Ограничивает результаты только теми, чей средний рейтинг пользователей больше или равен этому пределу. Значения должны быть в диапазоне от 0,0 до 5,0 (включительно) с шагом 0,5. Например: 0, 0,5, 1,0, ... , 5,0 включительно. Значения округляются до ближайшего 0,5. Например, значение 0,6 исключает все результаты с рейтингом меньше 1,0.
уровни цен
Ограничьте поиск местами, отмеченными определёнными ценовыми уровнями. По умолчанию выбираются все ценовые уровни.
Укажите массив из одного или нескольких значений, определенных
PriceLevel
.Например:
let request = SearchByTextRequest() request.priceLevels = [GMSPlacesPriceLevel.moderate.rawValue, GMSPlacesPriceLevel.cheap.rawValue]
rankPreference
Указывает, как ранжируются результаты в ответе на основе типа запроса:
- Для категориального запроса, например «Рестораны в Нью-Йорке», значение по умолчанию
.relevance
(ранжирование результатов по релевантности поиска). Вы можете установить дляrankPreference
.relevance
или.distance
(ранжирование результатов по расстоянию). - Для некатегориального запроса, например «Маунтин-Вью, Калифорния», мы рекомендуем не задавать
rankPreference
.
- Для категориального запроса, например «Рестораны в Нью-Йорке», значение по умолчанию
Код региона
Код региона, используемый для форматирования ответа, указывается как двухсимвольное значение кода CLDR . Этот параметр также может влиять на смещение результатов поиска. Значение по умолчанию отсутствует.
Если название страны в поле адреса в ответе совпадает с кодом региона, код страны из адреса исключается.
Большинство кодов CLDR идентичны кодам ISO 3166-1, за некоторыми заметными исключениями. Например, ccTLD Великобритании — «uk» (.co.uk), а код ISO 3166-1 — «gb» (технически обозначает «Соединённое Королевство Великобритании и Северной Ирландии»). Этот параметр может влиять на результаты в зависимости от применимого законодательства.
shouldIncludePureServiceAreaBusinesses
Если
true
, в результатах поиска отображаются компании, обслуживающие только территорию обслуживания. Компания, обслуживающая только территорию обслуживания, — это компания, которая посещает клиентов или доставляет им товары напрямую, но не обслуживает их по адресу.Например:
Places Swift SDK
let request = SearchByTextRequest() request.shouldIncludePureServiceAreaBusinesses = true
Быстрый
let request = SearchByTextRequest() request.shouldIncludePureServiceAreaBusinesses: true
Objective-C
GMSPlaceSearchByTextRequest *request = [[GMSPlaceSearchByTextRequest alloc] initWithTextQuery:@"pizza in New York" placeProperties:@[GMSPlacePropertyAll]]; request.shouldIncludePureServiceAreaBusinesses = YES;
Отображение атрибуции в вашем приложении
Когда ваше приложение отображает информацию, полученную от GMSPlacesClient
, например фотографии и отзывы, приложение также должно отображать требуемые атрибуции.
Например, свойство reviews
объекта GMSPlacesClient
содержит массив, содержащий до пяти объектов GMSPlaceReview
. Каждый объект GMSPlaceReview
может содержать информацию об авторстве и авторстве. Если вы отображаете отзыв в своём приложении, необходимо также отображать информацию об авторстве и авторстве.
Более подробную информацию см. в документации по атрибуции .