Текстовый поиск возвращает информацию о наборе мест на основе строки. Например, «пицца в Нью-Йорке», «обувные магазины рядом с Оттавой» или «123 Main Street». Служба отвечает списком мест, соответствующих текстовой строке и любому заданному смещению местоположения.
Служба особенно полезна для создания неоднозначных адресных запросов в автоматизированной системе, и неадресные компоненты строки могут соответствовать как компаниям, так и адресам. Примерами неоднозначных адресных запросов являются плохо отформатированные адреса или запросы, которые включают неадресные компоненты, такие как названия компаний. Запросы, подобные первым двум примерам, могут возвращать нулевые результаты, если не задано местоположение (например, регион, ограничение местоположения или смещение местоположения).
«10 Хай-стрит, Великобритания» или «123 Мэйн-стрит, США» | Несколько "High Street" в Великобритании; несколько "Main Street" в США. Запрос не возвращает желаемых результатов, если не установлено ограничение местоположения. |
"Сетевой ресторан Нью-Йорк" | Несколько сетевых ресторанов в Нью-Йорке; нет почтового адреса или даже названия улицы. |
«10 High Street, Escher UK» или «123 Main Street, Pleasanton US» | Только одна «High Street» в британском городе Эшер; только одна «Main Street» в американском городе Плезантон, штат Калифорния. |
«Уникальное название ресторана Нью-Йорк» | Только одно заведение с таким названием находится в Нью-Йорке; для различения не требуется указывать почтовый адрес. |
"пиццерии в Нью-Йорке" | Этот запрос содержит ограничение по местоположению, а "пиццерии" — это четко определенный тип места. Он возвращает несколько результатов. |
"+1 514-670-8700" | Этот запрос содержит номер телефона. Он возвращает несколько результатов для мест, связанных с этим номером телефона. |
Получить список мест с помощью текстового поиска
Сделайте запрос на поиск текста, вызвав GMSPlacesClient searchByTextWithRequest:
, передав объект GMSPlaceSearchByTextRequest
, определяющий параметры запроса, и метод обратного вызова типа GMSPlaceSearchByTextResultCallback
для обработки ответа.
Объект GMSPlaceSearchByTextRequest
определяет все обязательные и необязательные параметры для запроса. Обязательные параметры включают:
- Список полей для возврата в объекте
GMSPlace
, также называемый маской поля , как определеноGMSPlaceProperty
. Если вы не укажете хотя бы одно поле в списке полей или пропустите список полей, то вызов вернет ошибку. - Текстовый запрос .
В этом примере текстового поискового запроса указано, что объекты ответа GMSPlace
содержат название места и идентификатор места для каждого объекта GMSPlace
в результатах поиска. Он также фильтрует ответ, чтобы возвращать только места типа «ресторан».
Место 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), указывающий время, которое вы хотите проверить. Если время не указано, по умолчанию используется now. - Метод
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
тарифицируются по базовому артикулу данных . Остальные часы работы тарифицируются по корпоративному артикулу сведений о месте. - Если ваш объект
GMSPlace
уже содержит эти поля из предыдущего запроса, с вас не будет взиматься дополнительная плата.
Пример: сделайте запрос GMSPlaceIsOpenWithRequest
В следующем примере показано, как инициализировать GMSPlaceIsOpenWithRequest
в существующем объекте GMSPlace
. Место 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 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. Можно указать только один тип. Например:
-
request.includedType = "bar"
-
request.includedType = "pharmacy"
-
isOpenNow
Если
true
, возвращаются только те места, которые открыты для бизнеса на момент отправки запроса. Еслиfalse
, возвращаются все предприятия независимо от статуса открытия. Места, для которых не указаны часы работы в базе данных Google Places, возвращаются, если вы устанавливаете этот параметр вfalse
.isStrictTypeФильтрация
Используется с параметром
includeType
. Если установлено значениеtrue
, возвращаются только места, соответствующие указанным типам, указаннымincludeType
. Если установлено значение false (по умолчанию), ответ может содержать места, не соответствующие указанным типам.местоположениеПредвзятость
Указывает область для поиска. Это местоположение служит смещением, что означает, что могут быть возвращены результаты вокруг указанного местоположения, включая результаты за пределами указанной области.
Вы можете указать
locationRestriction
илиlocationBias
, но не оба. Думайте оlocationRestriction
как об указании региона, в котором должны быть результаты, аlocationBias
как об указании региона, вблизи которого должны быть результаты, но могут быть и за его пределами.Укажите область в виде прямоугольной области просмотра или в виде круга.
Окружность определяется точкой центра и радиусом в метрах. Радиус должен быть между 0,0 и 50000,0 включительно. Радиус по умолчанию равен 0,0. Например:
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.
priceLevels
Ограничить поиск местами, отмеченными определенными уровнями цен. По умолчанию выбираются все уровни цен.
Укажите массив из одного или нескольких значений, определенных
PriceLevel
.Например:
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» (технически для субъекта «Соединенное Королевство Великобритании и Северной Ирландии»). Параметр может влиять на результаты в зависимости от применимого законодательства.
Отображение атрибуции в вашем приложении
Когда ваше приложение отображает информацию, полученную от GMSPlacesClient
, например фотографии и отзывы, приложение также должно отображать требуемые атрибуции.
Например, свойство reviews
объекта GMSPlacesClient
содержит массив из пяти объектов GMSPlaceReview
. Каждый объект GMSPlaceReview
может содержать атрибуции и авторские атрибуции. Если вы отображаете обзор в своем приложении, то вы также должны отображать любую атрибуцию или авторскую атрибуцию.
Более подробную информацию см. в документации по атрибуции .