Новая версия текстового поиска

Выберите платформу: Android iOS JavaScript Web Service

Текстовый поиск возвращает информацию о наборе мест на основе строки. Например, «пицца в Нью-Йорке», «обувные магазины рядом с Оттавой» или «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 может содержать атрибуции и авторские атрибуции. Если вы отображаете обзор в своем приложении, то вы также должны отображать любую атрибуцию или авторскую атрибуцию.

Более подробную информацию см. в документации по атрибуции .