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

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

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

Текстовый поиск (новый) возвращает информацию о наборе мест по заданной строке (например, «пицца в Нью-Йорке», «обувные магазины рядом с Оттавой» или «123 Мэйн-стрит»). Сервис возвращает список мест, соответствующих текстовой строке, с учётом заданного смещения местоположения.

Помимо обязательных параметров , текстовый поиск (новый) поддерживает уточнение запросов с использованием необязательных параметров для получения лучших результатов.

Получить список мест с помощью текстового поиска

Сделайте запрос на текстовый поиск, вызвав GMSPlacesClient searchByTextWithRequest: , передав объект GMSPlaceSearchByTextRequest , который определяет параметры запроса, и метод обратного вызова типа GMSPlaceSearchByTextResultCallback для обработки ответа.

Объект GMSPlaceSearchByTextRequest определяет все обязательные и необязательные параметры запроса. Обязательные параметры включают:

  • Список полей, возвращаемых в объекте GMSPlace , также называемый маской полей , как определено в GMSPlaceProperty . Если вы не укажете хотя бы одно поле в списке полей или пропустите список полей, вызов вернет ошибку.
  • Текстовый запрос .

В этом примере текстового поискового запроса указано, что объекты GMSPlace ответа содержат название и идентификатор места для каждого объекта GMSPlace в результатах поиска. Он также фильтрует ответ, возвращая только места типа «ресторан».

Places Swift SDK

let restriction = GMSPlaceRectangularLocationOption(
      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 может содержать информацию об авторстве и авторстве. Если вы отображаете отзыв в своём приложении, необходимо также отображать информацию об авторстве и авторстве.

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