Идентификаторы мест

Выберите платформу: Android iOS JavaScript Веб-сервисы
Разработчики из Европейской экономической зоны (ЕЭЗ)

Введение

Идентификатор места однозначно идентифицирует его в базе данных Google Places и на Google Картах. Его можно использовать в следующих запросах к API Google Карт:

  • Получение адреса по идентификатору места в Geocoding API и сервисе Geocoding (Maps JavaScript API).
  • Указание пунктов отправления, назначения и промежуточных путевых точек в веб-сервисах Routes API и Directions API (устаревшая версия) и сервисе Directions (устаревшая версия Maps JavaScript API).
  • Указание пунктов отправления и назначения в веб-сервисах Routes API и Distance Matrix API (устаревшая версия) и сервисе Distance Matrix (устаревшая версия) (Maps JavaScript API).
  • Получение информации о месте в новом Places API, новом Places SDK для Android, новом Places SDK для iOS и библиотеке Places.
  • Использование параметров идентификатора места в Maps Embed API.
  • Извлечение поисковых запросов из URL Карт.
  • Показ ограничений скорости в Roads API.
  • Поиск и настройка стиля многоугольников, обозначающих административные границы, с помощью стилей на основе данных.

Как найти идентификатор места

Если вам нужно узнать идентификатор интересующего вас места, воспользуйтесь приведенной ниже строкой поиска.

Вы также можете ознакомиться со средством поиска идентификаторов мест и его программным кодом в документации по Maps JavaScript API.

Обзор

Идентификатор места – это уникальный текстовый идентификатор. Длина идентификатора может быть разной (максимальная длина идентификаторов мест не ограничена). Примеры:

  • ChIJgUbEo8cfqokR5lP9_Wh_DaM
  • GhIJQWDl0CIeQUARxks3icF8U8A
  • EicxMyBNYXJrZXQgU3QsIFdpbG1pbmd0b24sIE5DIDI4NDAxLCBVU0EiGhIYChQKEgnRTo6ixx-qiRHo_bbmkCm7ZRAN
  • EicxMyBNYXJrZXQgU3QsIFdpbG1pbmd0b24sIE5DIDI4NDAxLCBVU0E
  • IhoSGAoUChIJ0U6OoscfqokR6P225pApu2UQDQ

Идентификаторы мест есть у большинства объектов на карте, в том числе компаний, ориентиров, парков и перекрестков. Одному местоположению могут соответствовать несколько идентификаторов мест, а сами идентификаторы могут меняться со временем.

Один и тот же идентификатор места можно использовать и с Places API, и с другими API платформы Google Карт. Places API, и с рядом других API платформы Google Карт, например Maps JavaScript API, Geocoding API, Maps Embed API и Roads API.

Как получить данные о месте по идентификатору

Чаще всего идентификаторы мест ищут с помощью Places API или библиотеки Places в Maps JavaScript API. Затем используйте полученный идентификатор места, чтобы получить информацию о нем. чтобы запрашивать и получать данные о месте в будущем. Подробнее о том, как сохранить идентификаторы мест для последующего использования…

Пример использования Places SDK для Android (новая версия)

В Places SDK для Android (новая версия) идентификатор места можно получить, вызвав метод Place.getId(). Сервис автозаполнение мест (устаревшая версия) также возвращает идентификатор места для каждого места, соответствующего предоставленному поисковому запросу и фильтру. Используйте идентификатор места, чтобы позже снова получить объект Place.

Чтобы получить место по идентификатору, вызовите метод PlacesClient.fetchPlace(), передав ему FetchPlaceRequest.

API возвращает объект FetchPlaceResponse в объекте Task. FetchPlaceResponse содержит объект Place, соответствующий указанному идентификатору места.

В примере ниже показан вызов fetchPlace() для получения сведений об указанном месте.

Kotlin

// Define a Place ID.
val placeId = PlaceIdProvider.getRandomPlaceId()

// Specify the fields to return.
val placeFields = listOf(
    Place.Field.ID,
    Place.Field.DISPLAY_NAME,
    Place.Field.FORMATTED_ADDRESS,
    Place.Field.LOCATION
)

// Construct a request object, passing the place ID and fields array.
val request = FetchPlaceRequest.newInstance(placeId, placeFields)

placesClient.fetchPlace(request)
    .addOnSuccessListener { response: FetchPlaceResponse ->
        val place = response.place

        val name = place.displayName
        val address = place.formattedAddress
        val location = place.location

        binding.placeName.text = name
        binding.placeAddress.text = address
        if (location != null) {
            binding.placeLocation.text = getString(
                R.string.place_location, location.latitude, location.longitude
            )
        } else {
            binding.placeLocation.text = null
        }
        Log.i(TAG, "Place found: ${place.displayName}")
    }.addOnFailureListener { exception: Exception ->
        if (exception is ApiException) {
            val message = getString(R.string.place_not_found, exception.message)
            binding.placeName.text = message
            Log.e(TAG, "Place not found: ${exception.message}")
            val statusCode = exception.statusCode
            TODO("Handle error with given status code")
        }
    }

      

Java

// Define a Place ID.
final String placeId = PlaceIdProvider.getRandomPlaceId();

// Specify the fields to return.
final List<Place.Field> placeFields =
        Arrays.asList(
                Place.Field.ID,
                Place.Field.DISPLAY_NAME,
                Place.Field.FORMATTED_ADDRESS,
                Place.Field.LOCATION
        );

// Construct a request object, passing the place ID and fields array.
final FetchPlaceRequest request = FetchPlaceRequest.newInstance(placeId, placeFields);

placesClient.fetchPlace(request).addOnSuccessListener((response) -> {
    Place place = response.getPlace();

    final CharSequence name = place.getDisplayName();
    final CharSequence address = place.getFormattedAddress();
    final LatLng location = place.getLocation();

    binding.placeName.setText(name);
    binding.placeAddress.setText(address);
    if (location != null) {
        binding.placeLocation.setText(
                getString(R.string.place_location, location.latitude, location.longitude)
        );
    } else {
        binding.placeLocation.setText(null);
    }

    Log.i(TAG, "Place found: " + place.getDisplayName());
}).addOnFailureListener((exception) -> {
    if (exception instanceof ApiException apiException) {
        final String message = getString(R.string.place_not_found, apiException.getMessage());
        binding.placeName.setText(message);
        Log.e(TAG, "Place not found: " + exception.getMessage());
        final int statusCode = apiException.getStatusCode();
        // TODO: Handle error with given status code.
    }
});

      

Как сохранять идентификаторы мест для последующего использования

На идентификаторы мест не распространяются ограничения по кешированию, указанные в пункте 3.2.3(b) Условий использования платформы Google Карт. Поэтому их можно хранить для последующего использования.

Обновление сохраненных идентификаторов мест

Поскольку идентификаторы мест могут меняться из-за обновлений в базе данных Google Карт, Google рекомендует обновлять идентификаторы мест, если они хранятся более 12 месяцев. Вы можете обновить идентификаторы мест бесплатно, отправив запрос информации о местах и указав только поле Place.Field.ID в параметре fields.

Этот вызов активирует SKU информация о местах – ID Refresh.

Коды ошибок при использовании идентификаторов мест

INVALID_REQUEST

Код статуса INVALID_REQUEST означает, что указанный идентификатор места недействителен. Вы можете получить код INVALID_REQUEST, если идентификатор места был обрезан или изменен другим способом и его значение стало недействительным.

NOT_FOUND

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

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

Некоторые идентификаторы мест при запросах к API могут возвращать ответ NOT_FOUND или другой идентификатор. К таким относятся:

  • Почтовые адреса, для которых нет точных совпадений в базе данных Google Карт и которые выводятся по аналогии со схожими адресами.
  • Отрезки длинного маршрута, в запросе которого указан город или другой населенный пункт.
  • Перекрестки.
  • Места с компонентом адреса типа subpremise.

Такие идентификаторы часто принимают форму длинной строки (длина идентификатора места не ограничена). Пример:

EpID4LC14LC_4LCo4LCv4LGN4LCo4LCX4LCw4LGNIC0g4LC44LGI4LCm4LGN4LCs4LC-4LCm4LGNIOCwsOCxi-CwoeCxjeCwoeCxgSAmIOCwteCwv-CwqOCwr-CxjSDgsKjgsJfgsLDgsY0g4LCu4LGG4LCv4LC_4LCo4LGNIOCwsOCxi-CwoeCxjeCwoeCxgSwg4LC14LC_4LCo4LCv4LGNIOCwqOCwl-CwsOCxjSDgsJXgsL7gsLLgsKjgsYAsIOCwsuCwleCxjeCwt-CxjeCwruCwv-CwqOCwl-CwsOCxjSDgsJXgsL7gsLLgsKjgsYAsIOCwuOCwsOCxguCwsOCxjSDgsKjgsJfgsLDgsY0g4LC14LGG4LC44LGN4LCf4LGNLCDgsLjgsK_gsYDgsKbgsL7gsKzgsL7gsKbgsY0sIOCwueCxiOCwpuCwsOCwvuCwrOCwvuCwpuCxjSwg4LCk4LGG4LCy4LCC4LCX4LC-4LCjIDUwMDA1OSwg4LCt4LC-4LCw4LCk4LCm4LGH4LC24LCCImYiZAoUChIJ31l5uGWYyzsR9zY2qk9lDiASFAoSCd9ZebhlmMs7Efc2NqpPZQ4gGhQKEglDz61OZpjLOxHgDJCFY-o1qBoUChIJi37TW2-YyzsRr_uv50r7tdEiCg1MwFcKFS_dyy4