Как обновить приложение с Maps JavaScript API с версии 2 до версии 3

Maps JavaScript API версии 2 не используется с 26 мая 2021 года. Если на вашем сайте есть карты, которые используют эту версию, они перестанут работать и будут возвращать ошибки JavaScript. Чтобы продолжить пользоваться этими картами, перейдите на Maps JavaScript API версии 3. Это руководство поможет вам выполнить необходимые действия.

Обзор

Процесс переноса для каждого приложения будет немного отличаться, однако есть несколько шагов, общих для всех проектов:

  1. Приобретите новый ключ. Теперь для управления ключами Maps JavaScript API используется консоль Google Cloud. Если вы все ещё используете ключ версии 2, обязательно получите новый ключ API, прежде чем начинать перенос.
  2. Обновите начальную загрузку API. В большинстве приложений Maps JavaScript API версии 3 загружается с помощью следующего кода:
    <script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
  3. Обновите код. Объем необходимых изменений будет во многом зависеть от вашего приложения. Вот некоторые из них:
    • Всегда ссылайтесь на пространство имен google.maps. В версии 3 весь код Maps JavaScript API хранится в пространстве имен google.maps.*, а не в глобальном пространстве имен. В рамках этого процесса большинство объектов также было переименовано. Например, вместо GMap2 теперь будет загружаться google.maps.Map.
    • Удалите все ссылки на устаревшие методы. Удален ряд служебных методов общего назначения, таких как GDownloadURL и GLog. Замените эту функцию сторонними служебными библиотеками или удалите эти ссылки из кода.
    • Добавьте библиотеки в код(необязательно). Многие функции были вынесены в библиотеки утилит, чтобы каждое приложение загружало только те части API, которые будут использоваться.
    • (Необязательно.) Настройте проект для использования внешних файлов v3. Внешние файлы версии 3 можно использовать для проверки кода с помощью Closure Compiler или для активации автозаполнения в IDE. Подробнее о расширенной компиляции и внешних файлах…
  4. Тестируйте и повторяйте. На этом этапе вам ещё предстоит кое-что сделать, но хорошая новость заключается в том, что вы уже будете на пути к новому приложению с картами v3.

Изменения в Maps JavaScript API версии 3

Прежде чем планировать переход, ознакомьтесь с различиями между Maps JavaScript API v2 и Maps JavaScript API v3. Новейшая версия Maps JavaScript API была написана с нуля с акцентом на современные методы программирования на JavaScript, более широкое использование библиотек и упрощенный API. В API добавлено много новых функций, а некоторые из уже существующих были изменены или удалены. В этом разделе описаны некоторые ключевые различия между двумя выпусками.

Ниже приведены некоторые из изменений в API v3.

  • Оптимизированная базовая библиотека. Многие дополнительные функции были перенесены в библиотеки, что позволило сократить время загрузки и синтаксического анализа Core API. Благодаря этому карты быстро загружаются на любых устройствах.
  • Улучшена производительность некоторых функций, таких как отрисовка многоугольников и размещение маркеров.
  • Новый подход к клиентским лимитам на использование, который лучше подходит для общих адресов, используемых мобильными прокси-серверами и корпоративными брандмауэрами.
  • Добавлена поддержка нескольких современных браузеров и мобильных браузеров. Поддержка Internet Explorer 6 прекращена.
  • Удалены многие вспомогательные классы общего назначения ( GLog или GDownloadUrl). Сегодня существует множество отличных библиотек JavaScript, которые предоставляют аналогичные функции, например Closure или jQuery.
  • Просмотр улиц в HTML5 с возможностью загрузки на любом мобильном устройстве.
  • Пользовательские панорамы в Просмотре улиц, созданные на основе ваших фотографий. С их помощью можно показывать горнолыжные склоны, дома, выставленные на продажу, и другие интересные места.
  • Стилизованные карты позволяют изменять внешний вид элементов на базовой карте в соответствии с вашим уникальным визуальным стилем.
  • Поддержка нескольких новых сервисов, таких как ElevationService и Distance Matrix.
  • Улучшенный сервис построения маршрутов предлагает альтернативные маршруты, оптимизацию маршрутов (приблизительные решения задачи коммивояжера), велосипедные маршруты (со слоем велосипедных дорожек), маршруты на общественном транспорте и перетаскиваемые маршруты.
  • Обновленный формат геокодирования, который предоставляет более точную информацию о типе, чем значение accuracy из Geocoding API версии 2.
  • Поддержка нескольких информационных окон на одной карте.

Обновите приложение

Новый ключ

В Maps JavaScript API версии 3 используется новая система ключей, отличная от версии 2. Если вы уже используете ключ версии 3, ничего менять не нужно. Чтобы проверить это, посмотрите, есть ли в URL, по которому вы загружаете Maps JavaScript API, параметр key. Если значение ключа начинается с ABQIAA, вы используете ключ версии 2. Если у вас ключ версии 2, вам нужно перейти на версию 3. Это позволит:

Ключ передается при загрузке Maps JavaScript API v3. Подробнее о том, как создавать ключи API…

Если вы являетесь клиентом Google Maps APIs for Work, то можете использовать идентификатор клиента с параметром client вместо параметра key. Идентификаторы клиентов по-прежнему поддерживаются в Maps JavaScript API v3, и их не нужно обновлять.

Загрузка API

Первое изменение, которое вам нужно будет внести в код, касается способа загрузки API. В версии 2 Maps JavaScript API загружается с помощью запроса к http://maps.google.com/maps. Если вы загружаете Maps JavaScript API версии 3, вам нужно будет внести следующие изменения:

  1. Загрузите API из //maps.googleapis.com/maps/api/js
  2. Удалите параметр file.
  3. Обновите параметр key, указав новый ключ v3. Клиенты Google Maps APIs for Work должны использовать параметр client.
  4. (Только для тарифного плана Premium платформы Google Карт.) Убедитесь, что параметр client указан в соответствии с инструкциями в руководстве для разработчиков.
  5. Удалите параметр v, чтобы запросить последнюю конечную версию, или измените его значение в соответствии со схемой управления версиями v3.
  6. (Необязательно.) Замените параметр hl на language, сохранив его значение.
  7. (Необязательно.) Добавьте параметр libraries, чтобы загрузить дополнительные библиотеки.

В простейшем случае начальная загрузка версии 3 будет содержать только параметр ключа API:

<script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>

В примере ниже запрашивается последняя версия Maps JavaScript API v2 на немецком языке:

<script src="//maps.google.com/maps?file=api&v=2.x&key=YOUR_API_KEY&hl=de"></script>

В примере ниже показан эквивалентный запрос для v3.

<script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&language=de"></script>

Пространство имен google.maps

Пожалуй, самым заметным изменением в Maps JavaScript API v3 является введение пространства имен google.maps. В API версии 2 все объекты по умолчанию помещаются в глобальное пространство имен, что может привести к конфликтам имен. В версии 3 все объекты находятся в пространстве имен google.maps.

При переносе приложения в версию 3 вам нужно будет изменить код, чтобы использовать новое пространство имен. К сожалению, простой поиск по букве G и замена на google.maps. не сработает, но это хорошее правило, которое можно применять при проверке кода. Ниже приведены примеры эквивалентных классов в версиях 2 и 3.

Версия 2 Версия 3
GMap2 google.maps.Map
GLatLng google.maps.LatLng
GInfoWindow google.maps.InfoWindow
GMapOptions google.map.MapOptions
G_API_VERSION google.maps.version
GPolyStyleOptions google.maps.PolygonOptions
or google.maps.PolylineOptions

Удалите устаревший код

В Maps JavaScript API версии 3 есть аналоги для большинства функций версии 2, однако некоторые классы больше не поддерживаются. В рамках перехода вам следует либо заменить эти классы сторонними служебными библиотеками, либо удалить эти ссылки из своего кода. Существует множество отличных библиотек JavaScript, которые предоставляют аналогичные функции, например Closure или jQuery.

У следующих классов нет аналогов в Maps JavaScript API версии 3:

GBoundsGLanguage
GBrowserIsCompatibleGLayer
GControlGLog
GControlAnchorGMercatorProjection
GControlImplGNavLabelControl
GControlPositionGObliqueMercator
GCopyrightGOverlay
GCopyrightCollectionGPhotoSpec
GDownloadUrlGPolyEditingOptions
GDraggableObjectGScreenOverlay
GDraggableObjectOptionsGStreetviewFeatures
GFactualGeocodeCacheGStreetviewLocation
GGeoAddressAccuracyGStreetviewOverlay
GGeocodeCacheGStreetviewUserPhotosOptions
GGoogleBarGTileLayerOptions
GGoogleBarAdsOptionsGTileLayerOverlayOptions
GGoogleBarLinkTargetGTrafficOverlayOptions
GGoogleBarListingTypesGUnload
GGoogleBarOptionsGXml
GGoogleBarResultListGXmlHttp
GInfoWindowTabGXslt
GKeyboardHandler

Сравнить код

Ниже приведено сравнение двух приложений, написанных с использованием API версий 2 и 3.

<!DOCTYPE html>
<html>
  <head>
    <script src="//maps.google.com/maps?file=api&v=2&key=YOUR_API_KEY"></script>
    <style>
      html, body, #map { height: 100%; margin: 0; }
    </style>
    <script>
    function initialize() {
      if (GBrowserIsCompatible()) {
        var map = new GMap2(
            document.getElementById('map'));
        map.setCenter(new GLatLng(37.4419, -122.1419), 13);
        map.setUIToDefault();

        map.addOverlay(new GMarker(new GLatLng(37.4419, -122.1419)));

      }
    }
    </script>
  </head>
  <body onload="initialize()" onunload="GUnload()">
    <div id="map"></div>
  </body>
</html>
    
<!DOCTYPE html>
<html>
  <head>
    <script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
    <style>
      html, body, #map { height: 100%; margin: 0; }
    </style>
    <script>
    function initialize() {
      var map = new google.maps.Map(
        document.getElementById('map'), {
          center: new google.maps.LatLng(37.4419, -122.1419),
          zoom: 13,
          mapTypeId: google.maps.MapTypeId.ROADMAP
      });

      var marker = new google.maps.Marker({
            position: new google.maps.LatLng(37.4419, -122.1419),
            map: map
      });

    }
    google.maps.event.addDomListener(window, 'load', initialize);
    </script>
  </head>
  <body>
    <div id="map"></div>
  </body>
</html>
    

Как видите, между этими двумя приложениями есть несколько различий. Некоторые заметные изменения:

  • Изменился адрес загрузки API.
  • Методы GBrowserIsCompatible() и GUnload() больше не требуются в версии 3 и были удалены из API.
  • Объект GMap2 заменен на google.maps.Map в качестве центрального объекта в API.
  • Свойства теперь загружаются через классы Options. В примере выше мы задали три свойства, необходимых для загрузки карты (center, zoom и mapTypeId), с помощью встроенного объекта MapOptions.
  • Пользовательский интерфейс по умолчанию включен в версии v3. Чтобы отключить эту функцию, задайте для свойства disableDefaultUI значение true в объекте MapOptions.

Сводка

Теперь вы знаете, как перейти с версии 2 на версию 3 Maps JavaScript API. В зависимости от вашего приложения вам может потребоваться дополнительная информация. В следующих разделах приведены инструкции по переносу для конкретных случаев, с которыми вы можете столкнуться. Кроме того, в процессе обновления вам могут пригодиться следующие ресурсы:

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

Подробные сведения

В этом разделе подробно сравниваются наиболее популярные функции Maps JavaScript API версий 2 и 3. Каждый раздел справочника предназначен для чтения по отдельности. Мы рекомендуем не читать это руководство целиком, а использовать его как справочный материал по мере необходимости.

  • События – регистрация и обработка событий.
  • Элементы управления – управление элементами навигации, которые появляются на карте.
  • Наложения – добавление и редактирование объектов на карте.
  • Типы карт – фрагменты, которые составляют базовую карту.
  • Слои – добавление и редактирование контента в виде группы, например слоев KML или слоев трафика.
  • Сервисы. Работа с сервисами геокодирования, маршрутов и Просмотра улиц.

События

Модель событий Maps JavaScript API версии 3 похожа на модель версии 2, хотя в ней многое изменилось.

Элементы управления

Maps JavaScript API показывает элементы управления пользовательского интерфейса, позволяющие пользователям взаимодействовать с картой. Вы можете настроить внешний вид элементов управления с помощью API.

Наложения

Наложения представляют собой объекты, которые вы добавляете на карту, чтобы обозначить точки, линии, области или наборы объектов.

Типы карт

Типы карт, доступные в версиях 2 и 3, немного различаются, но все основные типы карт доступны в обеих версиях API. По умолчанию в версии 2 используются стандартные фрагменты дорожной карты. Однако в версии 3 при создании объекта google.maps.Map необходимо указать определенный тип карты.

Слои

Слои – это объекты на карте, состоящие из одного или нескольких наложений. Ими можно управлять как единым целым. Обычно они представляют собой наборы объектов.

Службы