Cómo agregar un marcador a un mapa

Selecciona la plataforma: Android iOS JavaScript

Usa marcadores para mostrar ubicaciones individuales en un mapa. En esta página, se muestra cómo agregar un marcador a un mapa tanto con elementos HTML personalizados como de forma programática.

Cómo cargar la biblioteca de marcadores avanzados

Para agregar un marcador avanzado a un mapa, el código de tu mapa debe cargar la biblioteca marker, que proporciona las clases AdvancedMarkerElement y PinElement. Esto se aplica independientemente de si tu aplicación carga los marcadores con HTML o de forma programática. Para hacerlo, tu aplicación primero debe cargar la API de Maps JavaScript.

El método que uses para cargar las bibliotecas dependerá de cómo tu página web cargue la API de Maps JavaScript.

  • Si tu página web usa la carga de secuencia de comandos dinámica, agrega la biblioteca de marcadores y, luego, importa AdvancedMarkerElement (y, opcionalmente, PinElement) en el tiempo de ejecución, como se muestra aquí.

    const { AdvancedMarkerElement, PinElement } = await google.maps.importLibrary("marker");
  • Si tu página web utiliza la etiqueta de carga de secuencia de comandos directa, agrega libraries=marker a la secuencia de comandos de carga, como se muestra en el siguiente fragmento. Si lo haces, se importarán AdvancedMarkerElement y PinElement.

    <script
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap&v=weekly&libraries=marker"
    defer
    ></script>

Cómo establecer un ID de mapa

Se requiere un ID de mapa para usar Marcadores avanzados (se puede usar DEMO_MAP_ID). Establece un ID de mapa en las opciones del mapa, como se muestra aquí:

const map = new Map(document.getElementById('map') as HTMLElement, {
    center: { lat: 37.4239163, lng: -122.0947209 },
    zoom: 14,
    mapId: 'DEMO_MAP_ID',
});

Si usas componentes web, puedes establecer el ID de mapa directamente en el elemento gmp-map:

<gmp-map center="37.4239163,-122.0947209" zoom="14" map-id="DEMO_MAP_ID"></gmp-map>

Obtén más información sobre los IDs de mapa.

Cómo agregar un marcador con elementos HTML personalizados

Para agregar un marcador avanzado con elementos HTML personalizados, agrega un elemento secundario gmp-advanced-marker al elemento gmp-map. El siguiente fragmento muestra cómo agregar marcadores a una página web:

<gmp-map
    center="41.027748173921374, -92.41852445367961"
    zoom="13"
    map-id="DEMO_MAP_ID">
    <gmp-advanced-marker
        position="41.027748173921374, -92.41852445367961"
        title="Ottumwa, IA"></gmp-advanced-marker>
</gmp-map>

Consulta el ejemplo de código fuente completo

En este ejemplo, se muestra cómo crear un mapa con marcadores usando HTML.

TypeScript

// This example adds a map with markers, using web components.
async function initMap() {
    console.log('Maps JavaScript API loaded.');
}
initMap();

JavaScript

// This example adds a map with markers, using web components.
async function initMap() {
    console.log('Maps JavaScript API loaded.');
}
initMap();

CSS

/* Note: This CSS file is intentionally blank. */

HTML

<html>
    <head>
        <title>Add a Map with Markers using HTML</title>
        <style>
            gmp-map {
                height: 100%;
            }
            html,
            body {
                height: 100%;
                margin: 0;
                padding: 0;
            }
        </style>
        <script type="module" src="./index.js"></script>
        <script
            src="https://maps.googleapis.com/maps/api/js?key=AIzaSyA6myHzS10YXdcazAFalmXvDkrYCp5cLc8&libraries=maps,marker&v=weekly&internal_usage_attribution_ids=gmp_git_jsapisamples_v1_web-components"
            defer></script>
    </head>
    <body>
        <gmp-map
            center="41.027748173921374, -92.41852445367961"
            zoom="13"
            map-id="DEMO_MAP_ID">
            <gmp-advanced-marker
                position="41.027748173921374, -92.41852445367961"
                title="Ottumwa, IA"></gmp-advanced-marker>
        </gmp-map>
    </body>
</html>

Prueba la muestra

Cómo agregar un marcador de forma programática

Para agregar un marcador avanzado a un mapa de forma programática, crea un nuevo AdvancedMarkerElement y agrégalo al mapa como se muestra en este ejemplo:

TypeScript

const mapElement = document.querySelector('gmp-map') as google.maps.MapElement;

async function initMap() {
    // Request needed libraries.
    const { Map } = (await google.maps.importLibrary(
        'maps'
    )) as google.maps.MapsLibrary;
    const { AdvancedMarkerElement } = (await google.maps.importLibrary(
        'marker'
    )) as google.maps.MarkerLibrary;

    const marker = new AdvancedMarkerElement({
        position: { lat: 37.4239163, lng: -122.0947209 },
    });
    mapElement.append(marker);
}

JavaScript

const mapElement = document.querySelector('gmp-map');
async function initMap() {
    // Request needed libraries.
    const { Map } = (await google.maps.importLibrary('maps'));
    const { AdvancedMarkerElement } = (await google.maps.importLibrary('marker'));
    const marker = new AdvancedMarkerElement({
        position: { lat: 37.4239163, lng: -122.0947209 },
    });
    mapElement.append(marker);
}

Solo se pueden agregar elementos cuando se usan componentes web. Si se usa el elemento div para cargar el mapa, usa la propiedad map para asociar el marcador con la instancia del mapa, como se muestra aquí:

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

const marker = new AdvancedMarkerElement({
    map: myMap,
    position: { lat: -34.397, lng: 150.644 },
});

Cómo quitar un marcador

Para quitar un marcador del mapa, establece marker.map o marker.position en null.

// Set the map to null.
marker.map = null;

// Set the position to null.
marker.position = null;

Consulta el ejemplo de código fuente completo

En este ejemplo, se muestra cómo agregar un marcador a un mapa.

TypeScript

const mapElement = document.querySelector('gmp-map') as google.maps.MapElement;

async function initMap() {
    // Request needed libraries.
    const { Map } = (await google.maps.importLibrary(
        'maps'
    )) as google.maps.MapsLibrary;
    const { AdvancedMarkerElement } = (await google.maps.importLibrary(
        'marker'
    )) as google.maps.MarkerLibrary;

    const marker = new AdvancedMarkerElement({
        position: { lat: 37.4239163, lng: -122.0947209 },
    });
    mapElement.append(marker);
}
initMap();

JavaScript

const mapElement = document.querySelector('gmp-map');
async function initMap() {
    // Request needed libraries.
    const { Map } = (await google.maps.importLibrary('maps'));
    const { AdvancedMarkerElement } = (await google.maps.importLibrary('marker'));
    const marker = new AdvancedMarkerElement({
        position: { lat: 37.4239163, lng: -122.0947209 },
    });
    mapElement.append(marker);
}
initMap();

CSS

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

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

HTML

<html>
    <head>
        <title>Default Advanced Marker</title>

        <link rel="stylesheet" type="text/css" href="./style.css" />
        <script type="module" src="./index.js"></script>
        <!-- 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: "AIzaSyA6myHzS10YXdcazAFalmXvDkrYCp5cLc8", v: "weekly" });</script>
    </head>
    <body>
        <gmp-map
            center="37.4239163,-122.0947209"
            zoom="14"
            map-id="4504f8b37365c3d0"></gmp-map>
    </body>
</html>

Prueba la muestra

Próximos pasos