Автозаполнение места (новое)

Выберите платформу: Android iOS JavaScript Веб-сервис

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

Сервис автозаполнения (новый) — это API для iOS, который возвращает подсказки мест в ответ на запрос. В запросе укажите текстовую строку поиска и географические границы, определяющие область поиска.

Сервис автозаполнения (новый) может сопоставлять целые слова и подстроки входных данных, определяя названия мест, адреса и аббревиатуры . Таким образом, приложения могут отправлять запросы по мере ввода пользователем текста, предоставляя подсказки о местах в режиме реального времени.

В качестве вариантов поиска предлагаются места, такие как предприятия, адреса и достопримечательности, на основе указанной текстовой строки и области поиска.

Например, вы вызываете API, используя в качестве входных данных строку, содержащую часть пользовательского ввода, "Spagh", с областью поиска, ограниченной Нью-Йорком. В ответе вы получаете список предложений мест , соответствующих поисковой строке и области поиска, например, ресторан под названием "Cafe Spaghetti", а также подробную информацию о заведении.

Предложенные варианты мест предназначены для того, чтобы пользователь мог выбрать желаемое место. Вы можете отправить запрос « Подробная информация о месте (новое)» , чтобы получить более подробную информацию о любом из предложенных вариантов.

Вы можете интегрировать функцию автозаполнения (новую) в свое приложение двумя основными способами:

Получайте прогнозы местоположения программным способом

Автозаполнение (новое) запросов

Создайте запрос на автозаполнение, вызвав метод объекта GMSPlacesClient . Вы можете передавать параметры в объекте GMSAutocompleteRequest . В ответе будут представлены подсказки автозаполнения в объекте GMSAutocompletePlaceSuggestion .

Ключ API и параметры query являются обязательными. Вы также можете добавить GMSAutocompleteSessionToken для привязки запросов к платежной сессии и GMSAutocompleteFilter для применения к результатам.

Places Swift SDK версия

Создайте запрос на автозаполнение, вызвав метод объекта PlacesClient . Вы можете передавать параметры в объекте AutocompleteRequest . В ответе будут представлены подсказки автозаполнения в объекте AutocompletePlaceSuggestion .

Ключ API и параметры query являются обязательными. Вы также можете добавить AutocompleteSessionToken для привязки запросов к платежной сессии и AutocompleteFilter для применения к результатам.

Для получения более подробной информации об обязательных и необязательных параметрах см. раздел «Параметры» данного документа .

Places Swift SDK

let center = (37.3913916, -122.0879074)
let northEast = (37.388162, -122.088137)
let southWest = (37.395804, -122.077023)

let bias = RectangularCoordinateRegion(northEast: northEast, southWest: southWest)
let filter = AutocompleteFilter(types: [ .restaurant ], origin: center, coordinateRegionBias: bias)

let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", filter: filter)
switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let autocompleteSuggestions):
  // Handle suggestions.
case .failure(let placesError):
  // Handle error.
}

Быстрый

let token = GMSAutocompleteSessionToken()

let northWestBounds = CLLocationCoordinate2DMake(40.921628, -73.700051)
let southEastBounds = CLLocationCoordinate2DMake(40.477398, -74.259087)

let filter = GMSAutocompleteFilter()
filter.types = [kGMSPlaceTypeRestaurant]
filter.locationBias = GMSPlaceRectangularLocationOption(northWestBounds, southEastBounds)

let request = GMSAutocompleteRequest(query:"Spagh")
request.filter = filter
request.sessionToken = token

GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in
      if let error = error {
        print("Autocomplete error: \(error)")
        return
      }
      if let autocompleteResults = results {
        for result in autocompleteResults {
          print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))")
        }
      }
    })

Objective-C

CLLocationCoordinate2D northEast = CLLocationCoordinate2DMake(37.388162, -122.088137);
CLLocationCoordinate2D southWest = CLLocationCoordinate2DMake(37.395804, -122.077023);

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.types = @[ kGMSPlaceTypeRestaurant ];
filter.locationBias = GMSPlaceRectangularLocationOption(northEast, southWest);
GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"];
request.sessionToken = token;
request.filter = filter;

[[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){
  // Handle response
  for (GMSAutocompleteSuggestion *suggestion in results) {
    if (suggestion.placeSuggestion) {
      // Show place suggestion data.
    }
  }
}];

Автозаполнение (новое) ответов

Функция автозаполнения возвращает массив, содержащий до пяти экземпляров GMSAutocompleteSuggestion . Массив содержит:

  • placeID
  • types : Типы, применимые к этому месту.
  • distanceMeters : Расстояние от начальной точки.
  • attributedFullText : Полный, удобочитаемый текст предложения.
  • attributedPrimaryText : Удобочитаемый основной текст предложения.
  • attributedSecondaryText : Удобочитаемый дополнительный текст предложения.
  • structuredFormat : Конкретное название и уточняющий текст, например, город или регион.

Необходимые параметры

запрос

Текстовая строка, по которой будет производиться поиск. Укажите полные слова и подстроки, названия мест, адреса и аббревиатуры . Сервис автозаполнения (новый) возвращает варианты совпадений на основе этой строки и упорядочивает результаты в зависимости от их предполагаемой релевантности.

Дополнительные параметры

sessionToken

Токены сессии — это создаваемые пользователем строки, которые отслеживают вызовы функции автозаполнения (New) — как вызовы, совершаемые через виджет, так и программные вызовы — как «сессии». Функция автозаполнения (New) использует токены сессии для группировки этапов запроса и выбора в поиске автозаполнения пользователя в отдельную сессию для целей выставления счетов.

Вы можете использовать свой токен сессии Places Autocomplete для передачи его другим сервисам, не входящим в состав Places SDK для iOS, например, сервису проверки адресов :

Places Swift SDK

let token = AutocompleteSessionToken()
let filter = AutocompleteFilter(origin: CLLocationCoordinate2DMake(39.7, -94.5))
let request = AutocompleteRequest(query: "Piz", sessionToken: token, filter: filter)

PlacesClient.shared.fetchAutocompleteSuggestions(request: request) {
    case .success(let suggestions):
      ...
    case .failure(let placesError):
      print(placesError) 
}

// pass token's string format to use with a service that is not a part of iOS SDK.
print("token: \(token)")

Objective-C

GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Piz"];
GMSAutocompleteSessionToken *token = [[GMSAutocompleteSessionToken alloc] init];
request.sessionToken = token;

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.origin = [[CLLocation alloc] initWithLatitude:39.7 longitude:-94.5];
filter.locationBias = GMSPlaceRectangularLocationOption(topLocation, bottomLocation);

request.filter = filter;
 [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request
                     callback:^(NSArray<GMSAutocompleteSuggestion *> *_Nullable results,
                                NSError *_Nullable error) {
  ...
}];

// pass token's string format to use with a service that is not a part of iOS SDK.
NSLog(@"%@", token.description);

Дополнительную информацию см. в разделе «Токены сессии» .

Дополнительные параметры автозаполнения фильтра

типы

Для каждого заведения может быть связан только один основной тип из таблиц типов A или B. Например, основным типом может быть mexican_restaurant или steak_house .

По умолчанию API возвращает все места на основе input параметра, независимо от значения основного типа, связанного с местом. Ограничьте результаты определенным основным типом или типами, передав параметр types .

Этот параметр позволяет указать до пяти значений типа из таблицы A или таблицы B. Для включения в ответ место должно соответствовать одному из указанных основных значений типа.

Запрос отклоняется с ошибкой INVALID_REQUEST , если:

  • Указано более пяти типов.
  • Все нераспознанные типы указаны.

Например, чтобы ограничить результаты поиска магазинами спортивных товаров, укажите этот тип в вашем AutocompleteFilter :

Places Swift SDK

let filter = AutocompleteFilter(types: [ PlaceType(rawValue: "sporting_goods_store") ])
  

Быстрый

let filter = GMSAutocompleteFilter()
filter.types = ["sporting_goods_store"]
  

Objective-C

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.types = @[ "sporting_goods_store" ];

страны

Включать только результаты из списка указанных регионов, заданного в виде массива, содержащего до 15 двухсимвольных значений ccTLD («домен верхнего уровня») . Если этот параметр опущен, к ответу не применяются никакие ограничения. Например, чтобы ограничить регионы Германией и Францией:

Places Swift SDK

let filter = AutocompleteFilter(countries: ["DE", "FR"])
  

Быстрый

let filter = GMSAutocompleteFilter()
filter.countries = ["DE", "FR"]

Objective-C

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.countries = @[ @"DE", @"FR" ];

Если указать одновременно locationRestriction и countries , результаты будут расположены в области пересечения этих двух параметров.

inputOffset

Смещение символа Unicode, начинающееся с нуля и указывающее положение курсора во input . Положение курсора может влиять на возвращаемые результаты прогнозирования. Если поле пустое, по умолчанию используется длина input .

locationBias или locationRestriction

Для определения области поиска можно указать locationBias или locationRestriction , но не оба параметра одновременно. locationRestriction обозначает регион, в пределах которого должны находиться результаты, а locationBias — регион, вблизи которого результаты могут находиться, но за его пределами.

  • locationBias указывает область поиска. Это местоположение служит в качестве смещения, что означает, что могут быть возвращены результаты вокруг указанного местоположения, включая результаты за пределами указанной области.

  • locationRestriction указывает область поиска. Результаты за пределами указанной области не возвращаются.

Укажите область locationBias или locationRestriction в виде прямоугольной области просмотра или круга.

Окружность определяется центральной точкой и радиусом в метрах. Радиус должен быть в диапазоне от 0,0 до 50000,0 включительно. Значение по умолчанию — 0,0. Для locationRestriction необходимо установить радиус больше 0,0. В противном случае запрос не вернет результатов.

Например:

Places Swift SDK

let center = CLLocationCoordinate2DMake(40.477398, -74.259087)

let bias = CircularCoordinateRegion(center: center, radius: 1000.0)

let filter = AutocompleteFilter(coordinateRegionBias: bias)
  

Быстрый

let center = CLLocationCoordinate2DMake(40.730610, -73.935242)
let radius = 1000.0

filter.locationBias = GMSPlaceCircularLocationOption(center, radius)

Objective-C

CLLocationCoordinate2D center = CLLocationCoordinate2DMake(40.730610, -73.935242);
radius = 1000.0;

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.locationBias = GMSPlaceCircularLocationOption(center, radius);

Прямоугольник — это область просмотра, ограниченная широтой и долготой, представленная двумя расположенными по диагонали low и high точками. Область просмотра считается замкнутой областью, то есть включает в себя свои границы. Границы широты должны находиться в диапазоне от -90 до 90 градусов включительно, а границы долготы — в диапазоне от -180 до 180 градусов включительно.

  • Если low = high , то область просмотра состоит из этой единственной точки.
  • Если low.longitude > high.longitude , диапазон долготы инвертируется (область просмотра пересекает линию долготы в 180 градусов).
  • Если low.longitude = -180 градусов и high.longitude = 180 градусов, то область просмотра будет включать все долготы.
  • Если low.longitude = 180 градусов и high.longitude = -180 градусов, то диапазон долготы пуст.

Необходимо заполнить поля low и high , при этом отображаемый прямоугольник не может быть пустым. Пустой экран приводит к ошибке.

Например, этот иллюминатор полностью охватывает Нью-Йорк:

Places Swift SDK

let northEast = CLLocationCoordinate2DMake(40.477398, -74.259087)
let southWest = CLLocationCoordinate2DMake(40.921628, -73.700051)

let filter = AutocompleteFilter(coordinateRegionBias: bias)
  

Быстрый

let high = CLLocationCoordinate2DMake(40.921628, -73.700051)
let low = CLLocationCoordinate2DMake(40.477398, -74.259087)

let filter = GMSAutocompleteFilter()
filter.locationBias = GMSPlaceRectangularLocationOption(high, low)

Objective-C

CLLocationCoordinate2D high = CLLocationCoordinate2DMake(40.477398, -74.259087);
CLLocationCoordinate2D low = CLLocationCoordinate2DMake(440.921628, -73.700051);

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.locationBias = GMSPlaceRectangularLocationOption(high, low);

источник

Начальная точка, от которой рассчитывается расстояние по прямой до пункта назначения (возвращается значение distanceMeters ). Если это значение опущено, расстояние по прямой не будет возвращено. Должно быть указано в виде координат широты и долготы:

Places Swift SDK

let filter = AutocompleteFilter(origin: CLLocation(latitude: 37.395804, longitude: -122.077023))
  

Быстрый

let filter = GMSAutocompleteFilter()
filter.origin =  CLLocation(latitude: 37.395804, longitude: -122.077023)
 

Objective-C

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];

filter.origin = [[CLLocation alloc] initWithLatitude:37.395804 longitude: -122.077023];

regionCode

Региональный код, используемый для форматирования ответа, указывается в виде двухсимвольного значения ccTLD («домен верхнего уровня») . Большинство кодов ccTLD идентичны кодам ISO 3166-1, за некоторыми заметными исключениями. Например, ccTLD Соединенного Королевства — «uk» (.co.uk), а его код ISO 3166-1 — «gb» (технически обозначающий «Соединенное Королевство Великобритании и Северной Ирландии»).

Если вы укажете недопустимый код региона, API вернет ошибку INVALID_ARGUMENT . Параметр может влиять на результаты в соответствии с применимым законодательством.

следует включить предприятия, работающие исключительно в данной сфере.

Если true , в массиве ответа возвращаются предприятия, работающие исключительно в определенной зоне обслуживания. Предприятие, работающее исключительно в определенной зоне обслуживания, — это предприятие, которое посещает клиентов или доставляет им товары напрямую, но не обслуживает клиентов по их корпоративному адресу.

Например:

Places Swift SDK

let filter = AutocompleteFilter()
filter.shouldIncludePureServiceAreaBusinesses = true

Быстрый

let filter = AutocompleteFilter()
filter.shouldIncludePureServiceAreaBusinesses = true

Objective-C

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.shouldIncludePureServiceAreaBusinesses = YES;

Добавьте виджет автозаполнения «Разместить».

Для более удобного и единообразного автозаполнения мест вы можете добавить в свое приложение виджет «Автозаполнение мест». Виджет предоставляет специальный полноэкранный интерфейс, который обрабатывает ввод пользователя и отображает ему предполагаемые места, возвращая при этом в приложение объекты AutocompletePlaceSuggestion . Затем вы можете отправить запрос « Подробности о месте (Новое)» , чтобы получить дополнительную информацию о любом из предполагаемых мест.

Автозаполнение для этого места виджет

Как и при программном получении прогнозов местоположения , виджет Place Autocomplete позволяет использовать токены сессии для группировки запросов автозаполнения в рамках сессии в целях выставления счетов. Вы можете передать токен сессии, вызвав метод AutocompleteSessionToken() .

Если вы не предоставите токен сессии, виджет создаст для вас токен сессии автозаполнения, который затем можно получить из функции обратного вызова onSelection . Дополнительную информацию об использовании токенов сессии см. в разделе «О токенах сессии» .

Если параметр show binding value установлен в true , пользователь перейдет в полноэкранный режим, где сможет выбрать место. По мере ввода текста виджет будет выдавать подсказки, например, о компаниях, адресах и достопримечательностях. После выбора места виджет вызовет обработчик onSelection с выбранным местом и закроет полноэкранный режим.

Разместите параметры виджета автозаполнения

Помимо параметров, доступных программно , виджет «Автозаполнение места» также предлагает следующие параметры.

показывать

show определяет, отображается ли виджет.

onSelection

Закрытие, которое произойдет после выбора места.

onError

Замыкание, которое будет выполняться при возникновении ошибки. В случае ошибки будет передан PlacesError .

Настройка контента и темы

Параметры AutocompleteUICustomization определяют параметры настройки пользовательского интерфейса, которые будут применены к виджету. Доступные параметры настройки:

  • Параметр AutocompleteListDensity позволяет выбрать плотность списка подсказок: multiLine или twoLine .
  • Параметр AutocompleteUIIcon позволяет выбрать, отображать ли значок по умолчанию для каждого элемента списка.
  • theme . Этот параметр задает пользовательскую тему, которая переопределяет любые атрибуты стиля по умолчанию. Вы можете настроить цвета, типографику, отступы, границы и углы компонента «Автозаполнение мест». По умолчанию используется тема PlacesMaterialTheme . Любые атрибуты темы, которые не переопределены, используют стили по умолчанию.

См. полный пример кода .

Примеры автозаполнения (новые).

Используйте locationRestriction и locationBias.

Функция автозаполнения (новая) по умолчанию использует IP-смещение для управления областью поиска. При использовании IP-смещения API использует IP-адрес устройства для смещения результатов. Вы можете дополнительно использовать locationRestriction или locationBias , но не оба параметра одновременно, чтобы указать область поиска.

Ограничение по местоположению определяет область поиска. Результаты за пределами указанной области не возвращаются. В следующем примере ограничение по местоположению используется для ограничения запроса круговой областью радиусом 5000 метров с центром в Сан-Франциско:

Places Swift SDK

let center = (37.775061, -122.419400)
let radius = 5000.0
let restriction = CircularCoordinateRegion(center: center, radius: radius)
let filter = AutocompleteFilter(coordinateRegionRestriction: restriction)
let token = AutocompleteSessionToken()

let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", sessionToken: token, filter: filter)
switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let autocompleteSuggestions):
  for suggestion in autocompleteSuggestions {
    switch suggestion {
    case .place:
      // Show place suggestion data.
    }
  }
case .failure(let placesError):
  // Handle error.
}
  

Быстрый

let token = GMSAutocompleteSessionToken()

let center = CLLocationCoordinate2DMake(37.775061, -122.419400)
let radius = 5000.0

let filter = GMSAutocompleteFilter()
filter.locationRestriction = GMSPlaceCircularLocationOption(center, radius)

let request = GMSAutocompleteRequest(query:"Piz")
request.filter = filter
request.sessionToken = token

GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in
      if let error = error {
        print("Autocomplete error: \(error)")
        return
      }
      if let autocompleteResults = results {
        for result in autocompleteResults {
          print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))")
        }
      }
    })

Objective-C

CLLocationCoordinate2D center = CLLocationCoordinate2DMake(37.775061, -122.419400);
radius = 5000.0;

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.locationRestriction = GMSPlaceCircularLocationOption(center, radius);
GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"];
request.sessionToken = token;
request.filter = filter;

[[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){
  // Handle response
  for (GMSAutocompleteSuggestion *suggestion in results) {
    if (suggestion.placeSuggestion) {
      // Show place suggestion data.
    }
  }
}];

При использовании смещения по местоположению само местоположение выступает в качестве смещения, что означает, что могут быть возвращены результаты, относящиеся к указанному местоположению, включая результаты за пределами указанной области. В следующем примере предыдущий запрос изменяется для использования смещения по местоположению:

Places Swift SDK

let center = (37.775061, -122.419400)
let radius = 5000.0
let bias = CircularCoordinateRegion(center: center, radius: radius)
let filter = AutocompleteFilter(coordinateRegionBias: bias)
let token = AutocompleteSessionToken()

let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", sessionToken: token, filter: filter)
switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let autocompleteSuggestions):
  for suggestion in autocompleteSuggestions {
    switch suggestion {
    case .place:
      // Show place suggestion data.
    }
  }
case .failure(let placesError):
  // Handle error.
}
  

Быстрый

let token = GMSAutocompleteSessionToken()

let center = CLLocationCoordinate2DMake(37.775061, -122.419400)
let radius = 5000.0

let filter = GMSAutocompleteFilter()
filter.locationBias = GMSPlaceCircularLocationOption(center, radius)

let request = GMSAutocompleteRequest(query:"Piz")
request.filter = filter
request.sessionToken = token

GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in
      if let error = error {
        print("Autocomplete error: \(error)")
        return
      }
      if let autocompleteResults = results {
        for result in autocompleteResults {
          print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))")
        }
      }
    })

Objective-C

CLLocationCoordinate2D center = CLLocationCoordinate2DMake(37.775061, -122.419400);
radius = 5000.0;

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.locationBias = GMSPlaceCircularLocationOption(center, radius);
GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"];
request.sessionToken = token;
request.filter = filter;

[[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){
  // Handle response
  for (GMSAutocompleteSuggestion *suggestion in results) {
    if (suggestion.placeSuggestion) {
      // Show place suggestion data.
    }
  }
}];

Типы использования

Параметр types позволяет ограничить результаты запроса определенным типом данных, указанным в таблицах A и B. Вы можете указать массив, содержащий до пяти значений. Если параметр не указан, возвращаются все типы.

В следующем примере задается строка запроса "Футбол", а параметр types используется для ограничения результатов только заведениями типа "sporting_goods_store" :

Places Swift SDK

let filter = AutocompleteFilter(types: [ PlaceType(rawValue: "sporting_goods_store") ])
let token = AutocompleteSessionToken()

let autocompleteRequest = AutocompleteRequest(query: "Soccer", sessionToken: token, filter: filter)
switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let autocompleteSuggestions):
  for suggestion in autocompleteSuggestions {
    switch suggestion {
    case .place:
      // Show place suggestion data.
    }
  }
case .failure(let placesError):
  // Handle error.
}
    

Быстрый

let token = GMSAutocompleteSessionToken()

let filter = GMSAutocompleteFilter()
filter.types = ["sporting_goods_store"]

let request = GMSAutocompleteRequest(query:"Soccer")
request.filter = filter
request.sessionToken = token

GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in
      if let error = error {
        print("Autocomplete error: \(error)")
        return
      }
      if let autocompleteResults = results {
        for result in autocompleteResults {
          print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))")
        }
      }
    })

Objective-C

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.types = @[ "sporting_goods_store" ];
GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Soccer"];
request.sessionToken = token;
request.filter = filter;

[[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){
  // Handle response
  for (GMSAutocompleteSuggestion *suggestion in results) {
    if (suggestion.placeSuggestion) {
      // Show place suggestion data.
    }
  }
}];

Источник использования

Если в запросе указан параметр origin в виде координат широты и долготы, API включает в ответ расстояние по прямой от начальной точки до конечной точки. В ответе расстояние возвращается в виде distanceMeters .

В этом примере точка отсчета находится в центре Сан-Франциско:

Places Swift SDK

let filter = AutocompleteFilter(origin: CLLocation(latitude: 37.7749, longitude: -122.4194))
let token = AutocompleteSessionToken()

let autocompleteRequest = AutocompleteRequest(query: "Amoeba", sessionToken: token, filter: filter)
switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let autocompleteSuggestions):
  for suggestion in autocompleteSuggestions {
    switch suggestion {
    case .place:
      // Show place suggestion data.
    }
  }
case .failure(let placesError):
  // Handle error.
}
  

Быстрый

let token = GMSAutocompleteSessionToken()

let origin = CLLocation(latitude: 37.7749, longitude: -122.4194)

let filter = GMSAutocompleteFilter()

filter.origin =  origin

let request = GMSAutocompleteRequest(query:"Amoeba")
request.filter = filter
request.sessionToken = token

GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in
      if let error = error {
        print("Autocomplete error: \(error)")
        return
      }
      if let autocompleteResults = results {
        for result in autocompleteResults {
          print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText)) and distance: \(String(describing: result.placeSuggestion?.distanceMeters))")
        }
      }
    })

Objective-C

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.origin = [[CLLocation alloc] initWithLatitude:37.395804 longitude:-122.077023];
GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Amoeba"];
request.sessionToken = token;
request.filter = filter;

[[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){
  // Handle response
  for (GMSAutocompleteSuggestion *suggestion in results) {
    if (suggestion.placeSuggestion) {
      // Show place suggestion data.
      }
    }
}];

Настройте контент и тему оформления.

Быстрый

let uiCustomization = AutocompleteUICustomization(
    listDensity: .multiLine,
    listItemIcon: .noIcon,
    theme: PlacesMaterialTheme()
)

Добавьте виджет автозаполнения «Места» (полный код)

Places Swift SDK

struct PlaceAutocompleteDemoView: View {

  @State private var fetchedPlace: Place?
  @State private var placesError: PlacesError?
  @State private var showWidget = false

  public var body: some View {
    VStack {
      Button("Search for a place") {
        showWidget.toggle()
      }
      .placeAutocomplete(
        show: $showWidget,
        onSelection: { (autocompletePlaceSuggestion, autocompleteSessionToken) in
          Task {
            let placesClient = await PlacesClient.shared
            let fetchPlaceRequest = FetchPlaceRequest(
              placeID: autocompletePlaceSuggestion.placeID,
              placeProperties: [.displayName, .formattedAddress],
              sessionToken: autocompleteSessionToken
            )

            switch await placesClient.fetchPlace(with: fetchPlaceRequest) {
            case .success(let place):
              print("Fetched place: \(place)")
              self.fetchedPlace = place
            case .failure(let placesError):
              print("Failed to fetch place: \(placesError)")
              self.placesError = placesError
            }
          }
        },
        onError: { placesError in
          self.placesError = placesError
        }
      )
    }
  }
}

Оптимизация автозаполнения (новая функция)

В этом разделе описаны лучшие практики, которые помогут вам максимально эффективно использовать сервис автозаполнения (новый).

Вот несколько общих рекомендаций:

  • Самый быстрый способ разработать работающий пользовательский интерфейс — использовать виджет автозаполнения Maps JavaScript API (новый) , виджет автозаполнения Places SDK для Android (новый) или виджет автозаполнения Places SDK для iOS (новый) .
  • С самого начала разберитесь с основными полями автозаполнения (новыми).
  • Поля, указывающие на географическое смещение и ограничение местоположения, являются необязательными, но могут существенно повлиять на эффективность автозаполнения.
  • Используйте обработку ошибок, чтобы ваше приложение корректно работало, если API возвращает ошибку.
  • Убедитесь, что ваше приложение обрабатывает ситуацию, когда выбор отсутствует, и предлагает пользователям способ продолжить.

Передовые методы оптимизации затрат

Базовая оптимизация затрат

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

Расширенная оптимизация затрат

Рассмотрите возможность программной реализации автозаполнения (новая функция) для доступа к информации о ценах SKU: Autocomplete Request и запроса результатов геокодирования API для выбранного места вместо получения подробной информации о месте (новая функция). Ценообразование за запрос в сочетании с геокодированием API более экономически выгодно, чем ценообразование за сессию (на основе сессии), если выполняются оба следующих условия:

  • Если вам нужны только широта/долгота или адрес выбранного пользователем места, API геокодирования предоставит эту информацию дешевле, чем вызов функции «Подробная информация о месте (новая)».
  • Если пользователи выбирают вариант автозаполнения в среднем не более чем в четырех запросах на автозаполнение (новое), то ценообразование за запрос может оказаться более экономически выгодным, чем ценообразование за сессию.
Чтобы получить помощь в выборе подходящей вам реализации автозаполнения (новая версия), выберите вкладку, соответствующую вашему ответу на следующий вопрос.

Требует ли ваше приложение какой-либо дополнительной информации, помимо адреса и широты/долготы выбранного прогноза?

Да, требуется более подробная информация.

Используйте автозаполнение на основе сессий (новая функция) с подробными сведениями о месте (новая функция).
Поскольку вашему приложению требуются подробные сведения о месте (новые), такие как название места, статус предприятия или часы работы, ваша реализация автозаполнения (новая) должна использовать токен сессии (программно или встроенный в виджеты JavaScript , Android или iOS ) для каждой сессии, а также соответствующие SKU мест, в зависимости от того, какие поля данных о месте вы запрашиваете. 1

Реализация виджета
Управление сессиями автоматически встраивается в виджеты JavaScript , Android или iOS . Это включает в себя как запросы автозаполнения (новые), так и запросы добавления подробной информации (новые) для выбранного прогноза. Обязательно укажите параметр fields , чтобы гарантировать, что вы запрашиваете только необходимые поля данных для автозаполнения (новые).

Программная реализация
Используйте токен сессии в запросах автозаполнения (новые). При запросе подробной информации о выбранном прогнозе (новые) укажите следующие параметры:

  1. Идентификатор места из ответа автозаполнения (нового).
  2. Токен сессии, используемый в запросе автозаполнения (нового запроса).
  3. Параметр fields указывает необходимые поля данных для автозаполнения (создания новых данных).

Нет, достаточно указать адрес и местоположение.

API геокодирования может оказаться более экономически выгодным вариантом, чем функция «Подробная информация о месте» (новая функция), для вашего приложения, в зависимости от производительности функции автозаполнения (новая функция). Эффективность автозаполнения (новая функция) в каждом приложении варьируется в зависимости от того, что вводят пользователи, где используется приложение и были ли внедрены лучшие практики оптимизации производительности .

Чтобы ответить на следующий вопрос, проанализируйте, сколько символов пользователь в среднем вводит перед выбором варианта автозаполнения (нового) в вашем приложении.

В среднем, пользователи выбирают вариант автозаполнения (новый) в четырех или менее запросах?

Да

Реализуйте автозаполнение (новое) программным способом без использования токенов сессии и вызывайте API геокодирования для прогнозирования выбранного места.
API геокодирования предоставляет адреса и координаты широты/долготы. Выполнение четырех запросов автозаполнения плюс вызов API геокодирования для прогнозирования выбранного места обходится дешевле, чем стоимость автозаполнения (нового) за сессию. 1

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

Нет

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

Реализация виджета
Управление сессиями автоматически встраивается в виджеты JavaScript , Android или iOS . Это включает в себя как запросы автозаполнения (новые), так и запросы добавления подробностей (новые) для выбранного прогноза. Обязательно укажите параметр fields , чтобы гарантировать запрос только необходимых полей.

Программная реализация
Используйте токен сессии в запросах автозаполнения (новые). При запросе подробной информации о выбранном прогнозе (новые) укажите следующие параметры:

  1. Идентификатор места из ответа автозаполнения (нового).
  2. Токен сессии, используемый в запросе автозаполнения (нового запроса).
  3. Параметр fields задает такие поля, как адрес и геометрия.

Рассмотрите возможность отложить запросы автозаполнения (новые).
Вы можете использовать такие стратегии, как задержка запроса автозаполнения (нового варианта) до тех пор, пока пользователь не введёт первые три или четыре символа, чтобы ваше приложение выполняло меньше запросов. Например, если запросы автозаполнения (нового варианта) выполняются для каждого символа после того, как пользователь введёт третий символ, это означает, что если пользователь введёт семь символов, а затем выберет предсказание, для которого вы выполните один запрос к API геокодирования, общая стоимость составит 4 запроса автозаполнения (нового варианта) + геокодирование. 1

Если задержка запросов позволяет снизить среднее количество программных запросов до менее чем четырех, вы можете следовать рекомендациям по повышению производительности автозаполнения (новое) с использованием API геокодирования . Обратите внимание, что задержка запросов может восприниматься пользователем как задержка, поскольку он может ожидать увидеть подсказки при каждом новом нажатии клавиши.

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


  1. Информацию о стоимости можно найти в прайс-листах платформы Google Maps .

лучшие практики повышения производительности

В следующих рекомендациях описаны способы оптимизации работы функции автозаполнения (нового кода):

  • Добавьте в свою реализацию автозаполнения (новую) ограничения по странам, учет местоположения и (для программных реализаций) языковые предпочтения. Языковые предпочтения не требуются для виджетов, поскольку они получают языковые настройки из браузера или мобильного устройства пользователя.
  • Если функция автозаполнения (новая) сопровождается картой, вы можете задать местоположение в зависимости от области просмотра карты.
  • В ситуациях, когда пользователь не выбирает один из вариантов автозаполнения (новый), как правило, потому что ни один из этих вариантов не соответствует желаемому адресу, вы можете повторно использовать исходный ввод пользователя, чтобы попытаться получить более релевантные результаты:
    • Если вы ожидаете, что пользователь введёт только адресную информацию, используйте исходные данные, введённые пользователем, при вызове API геокодирования .
    • Если вы ожидаете, что пользователь будет вводить запросы для конкретного места по названию или адресу, используйте запрос «Подробная информация о месте (новый)». Если результаты ожидаются только в определенном регионе, используйте предвзятость по местоположению .
    Другие сценарии, когда лучше всего использовать API геокодирования, включают:
    • Пользователи вводят адреса подобъектов, например, адреса конкретных квартир или апартаментов в здании. Например, чешский адрес "Stroupežnického 3191/17, Praha" выдает частичное предсказание в функции автозаполнения (новая функция).
    • Пользователи вводят адреса с префиксами, обозначающими участки дорог, например, "23-30 29th St, Queens" в Нью-Йорке или "47-380 Kamehameha Hwy, Kaneohe" на острове Кауаи на Гавайях.

Смещение в сторону местоположения

Отображение результатов в заданной области осуществляется путем передачи параметра location и параметра radius . Это указывает функции автозаполнения (новая функция) отдавать предпочтение отображению результатов в пределах определенной области. Результаты за пределами заданной области также могут отображаться. Вы можете использовать параметр components для фильтрации результатов, чтобы отображать только те места, которые находятся в пределах указанной страны.

Ограничение местоположения

Ограничьте результаты указанной областью, передав параметр locationRestriction .

Вы также можете ограничить результаты областью, определенной параметром location и radius , добавив параметр locationRestriction . Это укажет функции автозаполнения (New) возвращать только результаты в пределах этой области.