Actualiza tu aplicación de la API de Maps JavaScript de la versión 2 a la 3

La versión 2 de la API de Maps JavaScript dejó de estar disponible el 26 de mayo de 2021. Como resultado, los mapas v2 de tu sitio dejarán de funcionar y mostrarán errores de JavaScript. Para seguir usando mapas en tu sitio, migra a la versión 3 de la API de Maps JavaScript. Esta guía te ayudará a realizar el proceso.

Descripción general

Cada aplicación tendrá un proceso de migración ligeramente diferente. Sin embargo, hay algunos pasos que son comunes a todos los proyectos:

  1. Obtén una clave nueva. La API de Maps JavaScript ahora usa la consola de Google Cloud para administrar las claves. Si aún usas una clave de la versión 2, asegúrate de obtener tu clave de API nueva antes de comenzar la migración.
  2. Actualiza el bootstrap de tu API. La mayoría de las aplicaciones cargarán la versión 3 de la API de Maps JavaScript con el siguiente código:
    <script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
  3. Actualiza tu código. La cantidad de cambios necesarios dependerá mucho de tu aplicación. Entre los cambios comunes, se incluyen los siguientes:
    • Siempre haz referencia al espacio de nombres google.maps. En la versión 3, todo el código de la API de Maps JavaScript se almacena en el espacio de nombres google.maps.* en lugar del espacio de nombres global. La mayoría de los objetos también cambiaron de nombre como parte de este proceso. Por ejemplo, en lugar de GMap2, ahora cargarás google.maps.Map.
    • Quita las referencias a métodos obsoletos. Se quitaron varios métodos de utilidad general, como GDownloadURL y GLog. Reemplaza esta funcionalidad con bibliotecas de utilidades de terceros o quita estas referencias de tu código.
    • (Opcional) Agrega bibliotecas a tu código. Muchas funciones se externalizaron en bibliotecas de utilidad para que cada app solo tenga que cargar las partes de la API que se usarán.
    • (Opcional) Configura tu proyecto para usar los objetos externos de la versión 3. Los elementos externos de v3 se pueden usar para validar tu código con el compilador de Closure o para activar el autocompletado en tu IDE. Obtén más información sobre la compilación avanzada y los objetos externos.
  4. Prueba y itera. En este punto, aún tendrás trabajo por hacer, pero la buena noticia es que estarás bien encaminado hacia tu nueva aplicación de mapas de la versión 3.

Cambios en la versión 3 de la API de Maps JavaScript

Antes de planificar tu migración, debes tomarte el tiempo para comprender las diferencias entre la API de Maps JavaScript v2 y la API de Maps JavaScript v3. La versión más reciente de la API de Maps JavaScript se escribió desde cero, con un enfoque en las técnicas de programación modernas de JavaScript, un mayor uso de bibliotecas y una API simplificada. Se agregaron muchas funciones nuevas a la API, y se cambiaron o incluso quitaron varias funciones conocidas. En esta sección, se destacan algunas de las diferencias clave entre las dos versiones.

Entre algunos de los cambios en la API v3 se incluyen los siguientes:

  • Una biblioteca central simplificada. Muchas de las funciones complementarias se movieron a bibliotecas, lo que ayuda a reducir los tiempos de carga y análisis de la API de Core, lo que permite que tu mapa se cargue rápidamente en cualquier dispositivo.
  • Se mejoró el rendimiento de varias funciones, como la renderización de polígonos y la ubicación de marcadores.
  • Un nuevo enfoque de los límites de uso del cliente para adaptarse mejor a las direcciones compartidas que usan los proxies móviles y los firewalls corporativos.
  • Se agregó compatibilidad con varios navegadores modernos y navegadores para dispositivos móviles. Se quitó la compatibilidad con Internet Explorer 6.
  • Se quitaron muchas de las clases de ayuda de uso general ( GLog o GDownloadUrl). Actualmente, existen muchas bibliotecas de JavaScript excelentes que proporcionan funciones similares, como Closure o jQuery.
  • Una implementación de Street View HTML5 que se carga en cualquier dispositivo móvil.
  • Panorámicas personalizadas de Street View con tus propias fotos, que te permiten compartir panorámicas de pistas de esquí, casas en venta y otros lugares interesantes.
  • Personalizaciones de mapas con diseños que te permiten cambiar la visualización de los elementos del mapa base para que coincidan con tu estilo visual único.
  • Compatibilidad con varios servicios nuevos, como ElevationService y Distance Matrix.
  • Un servicio de instrucciones mejoradas proporciona rutas alternativas, optimización de rutas (soluciones aproximadas al problema del viajante), instrucciones para ir en bicicleta (con capa de ciclismo), instrucciones para ir en transporte público y instrucciones para arrastrar.
  • Un formato de Geocoding actualizado que proporciona información de type más precisa que el valor accuracy de la versión 2 de la API de Geocoding.
  • Compatibilidad con varias ventanas de información en un solo mapa

Actualizar tu aplicación

Tu clave nueva

La versión 3 de la API de Maps JavaScript usa un nuevo sistema de claves de la versión 2. Es posible que ya uses una clave de la versión 3 con tu aplicación, en cuyo caso no es necesario realizar ningún cambio. Para verificarlo, revisa la URL desde la que cargas la API de Maps JavaScript en busca de su parámetro key. Si el valor de la clave comienza con "ABQIAA", estás usando una clave de v2. Si tienes una clave de v2, debes actualizar a una clave de v3 como parte de la migración, lo que hará lo siguiente:

La clave se pasa cuando se carga la API de Maps JavaScript v3. Obtén más información para generar claves de API.

Ten en cuenta que, si eres cliente de las APIs de Google Maps for Work, es posible que uses un ID de cliente con el parámetro client en lugar del parámetro key. Los IDs de cliente aún son compatibles con la versión 3 de la API de Maps JavaScript y no es necesario que pasen por el proceso de actualización de claves.

Cómo cargar la API

La primera modificación que deberás realizar en tu código implica la carga de la API. En la versión 2, cargas la API de Maps JavaScript a través de una solicitud a http://maps.google.com/maps. Si cargas la versión 3 de la API de Maps JavaScript, deberás realizar los siguientes cambios:

  1. Carga la API desde //maps.googleapis.com/maps/api/js
  2. Quita el parámetro file.
  3. Actualiza el parámetro key con tu nueva clave de la versión 3. Los clientes de las APIs de Google Maps for Work deben usar un parámetro client.
  4. (Solo para el plan premium de Google Maps Platform) Asegúrate de que se proporcione el parámetro client como se explica en la Guía para desarrolladores del plan premium de Google Maps Platform.
  5. Quita el parámetro v para solicitar la versión publicada más reciente o cambia su valor según el esquema de control de versiones v3.
  6. (Opcional) Reemplaza el parámetro hl por language y conserva su valor.
  7. (Opcional) Agrega un parámetro libraries para cargar bibliotecas opcionales.

En el caso más simple, el inicio de la v3 solo especificará tu parámetro de clave de API:

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

En el siguiente ejemplo, se solicita la versión más reciente de la v2 de la API de Maps JavaScript en alemán:

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

El siguiente ejemplo es una solicitud equivalente para v3.

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

Presentación del espacio de nombres google.maps

Probablemente, el cambio más notable en la API de Maps JavaScript v3 es la introducción del espacio de nombres google.maps. La API de v2 coloca todos los objetos en el espacio de nombres global de forma predeterminada, lo que puede generar colisiones de nombres. En la versión 3, todos los objetos se encuentran dentro del espacio de nombres google.maps.

Cuando migres tu aplicación a la versión 3, deberás cambiar el código para usar el nuevo espacio de nombres. Lamentablemente, buscar "G" y reemplazarlo por "google.maps" no funcionará por completo, pero es una buena regla general que puedes aplicar cuando revises tu código. A continuación, se muestran algunos ejemplos de las clases equivalentes en la v2 y la v3.

v2 v3
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

Quitar el código obsoleto

La versión 3 de la API de Maps JavaScript tiene paralelismos para la mayoría de las funciones de la versión 2. Sin embargo, hay algunas clases que ya no son compatibles. Como parte de la migración, debes reemplazar estas clases por bibliotecas de utilidades de terceros o quitar estas referencias de tu código. Existen muchas bibliotecas de JavaScript excelentes que proporcionan funcionalidades similares, como Closure o jQuery.

Las siguientes clases no tienen un equivalente en la versión 3 de la API de Maps JavaScript:

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

Comparar el código

Comparemos dos aplicaciones bastante simples que se escribieron con las APIs de v2 y v3.

<!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>
    

Como puedes ver, hay varias diferencias entre las dos aplicaciones. Entre los cambios destacados se incluyen los siguientes:

  • Se modificó la dirección desde la cual se carga la API.
  • Los métodos GBrowserIsCompatible() y GUnload() ya no son obligatorios en la versión 3 y se quitaron de la API.
  • El objeto GMap2 se reemplaza por google.maps.Map como el objeto central de la API.
  • Ahora, las propiedades se cargan a través de las clases de Options. En el ejemplo anterior, configuramos las tres propiedades necesarias para cargar un mapa: center, zoom y mapTypeId a través de un objeto MapOptions intercalado.
  • En la v3, se encuentra habilitado el valor predeterminado de la IU. Para inhabilitarlo, configura la propiedad disableDefaultUI como verdadera en el objeto MapOptions.

Resumen

En este punto, tendrás una idea de algunos de los puntos clave involucrados en la migración de la versión 2 a la 3 de la API de Maps JavaScript. Hay más información que podrías necesitar, pero dependerá de tu aplicación. En las siguientes secciones, incluimos instrucciones de migración para casos específicos que podrías encontrar. Además, hay varios recursos que podrían serte útiles durante el proceso de actualización.

Si tienes algún problema o pregunta sobre este artículo, usa el vínculo ENVIAR COMENTARIOS que se encuentra en la parte superior de esta página.

Referencia detallada

En esta sección, se proporciona una comparación detallada de las funciones más populares de la v2 y la v3 de la API de Maps JavaScript. Cada sección de la referencia está diseñada para leerse de forma individual. Te recomendamos que no leas esta referencia en su totalidad. En su lugar, usa este material para facilitar la migración según cada caso.

  • Eventos: Registra y controla eventos.
  • Controles: Manipula los controles de navegación que aparecen en el mapa.
  • Superposiciones: Agrega y edita objetos en el mapa.
  • Tipos de mapas: Son las tarjetas que conforman el mapa base.
  • Capas: Agrega y edita contenido como un grupo, como capas de KML o de tráfico.
  • Servicios: Trabajar con los servicios de geocodificación, instrucciones sobre cómo llegar o Street View de Google

Eventos

El modelo de eventos de la versión 3 de la API de Maps JavaScript es similar al que se usa en la versión 2, aunque mucho cambió en el código.

Controles

La API de Maps JavaScript muestra controles de la IU que permiten que los usuarios interactúen con tu mapa. Puedes usar la API para personalizar cómo aparecen estos controles.

Superposiciones

Las superposiciones reflejan los objetos que "agregas" al mapa para designar puntos, líneas, áreas o conjuntos de objetos.

Tipos de mapas

Los tipos de mapas disponibles en la v2 y la v3 son ligeramente diferentes, pero todos los tipos de mapas básicos están disponibles en ambas versiones de la API. De forma predeterminada, la v2 usa tarjetas de mapas viales "pintadas" estándar. Sin embargo, la v3 requiere que se proporcione un tipo de mapa específico cuando se crea un objeto google.maps.Map.

Capas

Las capas son objetos del mapa que constan de una o más superposiciones. Se pueden manipular como una sola unidad y, por lo general, reflejan colecciones de objetos.

Servicios