Cómo agregar un mapa de Google Maps a una página web

Puedes agregar un mapa de Google Maps a una página web usando código HTML, CSS y JavaScript. Esta página muestra cómo agregar un mapa a una página web de dos maneras distintas: por un lado, con el elemento HTML gmp-map personalizado y, por otro, con un elemento div.

Descripción general

Para cargar un mapa, tu página web debe hacer lo siguiente:

  • Cargar la API de Maps JavaScript con un cargador de arranque (es donde se pasa tu clave de API, además de que se puede agregar a los archivos fuente HTML o JavaScript)
  • Agregar el mapa a la página HTML y establecer los diseños de CSS necesarios
  • Cargar la biblioteca maps y luego inicializar el mapa

Cómo agregar un mapa con un elemento gmp-map

El elemento gmp-map es un elemento HTML personalizado y creado con componentes web. Para agregar un mapa a una página web con un elemento gmp-map, realiza los siguientes pasos.

  1. En la página HTML, agrega un elemento script que contenga el cargador de arranque, configurado con tu clave de API y cualquier otra opción necesaria. En el siguiente ejemplo de cargador de arranque, se omitió el parámetro callback porque no es necesario.

    <script async
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&libraries=map,marker">
    
  2. En la página HTML, agrega un elemento gmp-map. En center, especifica las coordenadas de latitud y longitud; a su vez, en zoom, establece un valor de zoom. En este ejemplo, también se especifica el atributo de diseño height.

    <gmp-map
      center="37.4220656,-122.0840897"
      zoom="10"
      map-id="DEMO_MAP_ID"
      style="height: 400px"
    ></gmp-map>

Código de muestra completo

<html>
  <head>
    <title>Add a Map using HTML</title>
    <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>

    <link rel="stylesheet" type="text/css" href="./style.css" />
    <script type="module" src="./index.js"></script>
  </head>
  <body>
    <gmp-map
      center="37.4220656,-122.0840897"
      zoom="10"
      map-id="DEMO_MAP_ID"
      style="height: 400px"
    ></gmp-map>

    <!-- 
      The `defer` attribute causes the callback to execute after the full HTML
      document has been parsed. For non-blocking uses, avoiding race conditions,
      and consistent behavior across browsers, consider loading using Promises.
      See https://developers.google.com/maps/documentation/javascript/load-maps-js-api
      for more information.
      -->
    <script
      src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg&callback=initMap&v=beta"
      defer
    ></script>
  </body>
</html>

Cómo agregar un mapa con un elemento div y JavaScript

El elemento div también se admite para cargar mapas. Para agregar un mapa a una página web con un elemento div, realiza los siguientes pasos.

  1. En la página HTML, agrega un elemento script que contenga el cargador de arranque, configurado con tu clave de API y cualquier otra opción necesaria. También puedes agregar el código del cargador de arranque directamente a un archivo TypeScript o JavaScript, sin incluir las etiquetas script.

    <script>
      (g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
        key: "YOUR_API_KEY",
        v: "weekly",
        // Use the 'v' parameter to indicate the version to use (weekly, beta, alpha, etc.).
        // Add other bootstrap parameters as needed, using camel case.
      });
    </script>
    
  2. En la página HTML, agrega un elemento div para que contenga el mapa.

    <div id="map"></div>
    
  3. En el archivo CSS, establece la altura del mapa en 100%.

    #map {
      height: 100%;
    }
    
  4. En el archivo JavaScript, crea una función para cargar la biblioteca maps y luego inicializar el mapa. En center, especifica las coordenadas de latitud y longitud; a su vez, en zoom, establece un nivel de zoom.

let map;

async function initMap() {
  const { Map } = await google.maps.importLibrary("maps");

  map = new Map(document.getElementById("map"), {
    center: { lat: -34.397, lng: 150.644 },
    zoom: 8,
  });
}

initMap();

Código de muestra completo

TypeScript

let map: google.maps.Map;
async function initMap(): Promise<void> {
  const { Map } = await google.maps.importLibrary("maps") as google.maps.MapsLibrary;
  map = new Map(document.getElementById("map") as HTMLElement, {
    center: { lat: -34.397, lng: 150.644 },
    zoom: 8,
  });
}

initMap();

JavaScript

let map;

async function initMap() {
  const { Map } = await google.maps.importLibrary("maps");

  map = new Map(document.getElementById("map"), {
    center: { lat: -34.397, lng: 150.644 },
    zoom: 8,
  });
}

initMap();

CSS

/* 
 * Always set the map height explicitly to define the size of the div element
 * that contains the map. 
 */
#map {
  height: 100%;
}

/* 
 * Optional: Makes the sample page fill the window. 
 */
html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

HTML

<html>
  <head>
    <title>Simple Map</title>
    <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>

    <link rel="stylesheet" type="text/css" href="./style.css" />
    <script type="module" src="./index.js"></script>
  </head>
  <body>
    <div id="map"></div>

    <!-- prettier-ignore -->
    <script>(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})
        ({key: "AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg", v: "weekly"});</script>
  </body>
</html>

Prueba la muestra