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

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

Разработчики Европейской экономической зоны (ЕЭЗ)

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

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