Agregar marcadores HTML al mapa

En este artículo se explica cómo agregar al mapa código HTML personalizado como un archivo de imagen en forma de marcador HTML.

Nota

Los marcadores HTML no se conectan a los orígenes de datos. En su lugar, se agrega información de posición directamente en el marcador y el marcador se agrega a la propiedad markers de los mapas, que es un elemento HtmlMarkerManager.

Importante

A diferencia de la mayoría de las capas del control web de Azure Maps que usan WebGL para la representación, los marcadores HTML usan elementos DOM tradicionales para la representación. Por tanto, cuantos más marcadores HTML se agreguen a una página, más elementos DOM habrá. Se puede degradar el rendimiento después de agregar cientos de marcadores HTML. Para conjuntos de datos grandes, considere la posibilidad de agrupar los datos en clústeres o de usar una capa de símbolo o burbuja.

Adición de un marcador HTML

La clase HtmlMarker tiene un estilo predeterminado. Puede personalizar el marcador mediante la configuración de las opciones de color y texto del marcador. El estilo predeterminado de la clase del marcador HTML es una plantilla SVG que tiene un marcador de posición {color} y {text}. Configure las propiedades de color y texto en las opciones del marcador HTML para una rápida personalización.

En el código siguiente se crea un marcador HTML y se establece la propiedad de color en DodgerBlue y la propiedad de texto en 10. Se adjunta un elemento emergente al marcador, y el evento click se usa para alternar la visibilidad del elemento emergente.

//Create an HTML marker and add it to the map.
var marker = new atlas.HtmlMarker({
    color: 'DodgerBlue',
    text: '10',
    position: [0, 0],
    popup: new atlas.Popup({
        content: '<div style="padding:10px">Hello World</div>',
        pixelOffset: [0, -30]
    })
});

map.markers.add(marker);

//Add a click event to toggle the popup.
map.events.add('click',marker, () => {
    marker.togglePopup();
});

Para obtener un ejemplo de trabajo completo sobre cómo agregar un marcador HTML, vea Marcador HTML simple en Ejemplos de Azure Maps. Para obtener el código fuente de este ejemplo, consulte Código fuente de marcador HTML simple.

Captura de pantalla que muestra un mapamundi con HtmlMarker simple.

Creación de un marcador HTML con una plantilla SVG

El valor predeterminado htmlContent de un marcador HTML es una plantilla SVG que contiene las carpetas de posición {color} y {text}. Puede crear cadenas SVG personalizadas y agregar estos mismos marcadores de posición en las opciones SVG, de tal forma que la configuración de las opciones color y text del marcador actualice estos marcadores de posición en la plantilla SVG.

Para obtener un ejemplo de trabajo completo sobre cómo crear una plantilla SVG personalizada y usarla con la clase HtmlMarker, vea Marcador HTML con plantilla SVG personalizada en Ejemplos de Azure Maps. Al ejecutar este ejemplo, seleccione el botón en la parte superior izquierda de la ventana con la etiqueta Update Marker Options (Actualizar opciones de marcador) para cambiar las opciones color y text de la plantilla SVG usada en HtmlMarker. Para obtener el código fuente de este ejemplo, consulte Marcador HTML con código fuente de plantilla SVG personalizada.

Captura de pantalla en la que se muestra un mapa del mundo con una plantilla SVG personalizada que se usa con la clase HtmlMarker. Incluye un botón con la etiqueta Actualizar opciones de marcado, que cambia las opciones de color y texto de la plantilla SVG que se usa en HtmlMarker cuando se selecciona.

Sugerencia

El SDK web de Azure Maps proporciona varias plantillas de imagen SVG que se pueden usar con marcadores HTML. Para más información, consulte el documento Uso de plantillas de imagen.

Adición de un marcador HTML con estilo CSS

Una de las ventajas de los marcadores HTML es que hay muchas personalizaciones excelentes que pueden conseguirse mediante CSS. En el ejemplo siguiente, el contenido de HtmlMarker consta de HTML y CSS que crean un pin animado que se coloca en su lugar y se mueve.

//Wait until the map resources are ready.
map.events.add('ready', function () {
    //Create a HTML marker and add it to the map.
    map.markers.add(new atlas.HtmlMarker({
        htmlContent: "<div><div class='pin bounce'></div><div class='pulse'></div></div>",
        position: [-0.1406, 51.5018],
        pixelOffset: [5, -18]
    }));
});

Código CSS:

    <style>
        .pin {
            width: 30px;
            height: 30px;
            border-radius: 50% 50% 50% 0;
            background: #00cae9;
            position: absolute;
            transform: rotate(-45deg);
            left: 50%;
            top: 50%;
            margin: -20px 0 0 -20px;
        }

            .pin:after {
                content: "";
                width: 14px;
                height: 14px;
                margin: 8px 0 0 8px;
                background: #e6e6e6;
                position: absolute;
                border-radius: 50%;
            }

        .bounce {
            animation-name: bounce;
            animation-fill-mode: both;
            animation-duration: 1s;
        }

        .pulse {
            background: #d6d4d4;
            border-radius: 50%;
            height: 14px;
            width: 14px;
            position: absolute;
            left: 50%;
            top: 50%;
            margin: 11px 0px 0px -12px;
            transform: rotateX(55deg);
            z-index: -2;
        }

            .pulse:after {
                content: "";
                border-radius: 50%;
                height: 40px;
                width: 40px;
                position: absolute;
                margin: -13px 0 0 -13px;
                animation: pulsate 1s ease-out;
                animation-iteration-count: infinite;
                opacity: 0;
                box-shadow: 0 0 1px 2px #00cae9;
                animation-delay: 1.1s;
            }

        @keyframes pulsate {
            0% {
                transform: scale(0.1, 0.1);
                opacity: 0;
            }

            50% {
                opacity: 1;
            }

            100% {
                transform: scale(1.2, 1.2);
                opacity: 0;
            }
        }

        @keyframes bounce {
            0% {
                opacity: 0;
                transform: translateY(-2000px) rotate(-45deg);
            }

            60% {
                opacity: 1;
                transform: translateY(30px) rotate(-45deg);
            }

            80% {
                transform: translateY(-10px) rotate(-45deg);
            }

            100% {
                transform: translateY(0) rotate(-45deg);
            }
        }
    </style>

Para obtener un ejemplo de trabajo completo sobre cómo usar CSS y HTML a fin de crear un marcador en el mapa, vea Marcador HTML con estilo CSS en Ejemplos de Azure Maps. Para obtener el código fuente de este ejemplo, consulte Código fuente de marcador HTML con estilo CSS.

Captura de pantalla en la que se muestra un marcador de HTML con estilo CSS.

Marcadores HTML arrastrables

En este ejemplo se muestra cómo hacer que un marcador HTML se pueda arrastrar. Los marcadores HTML admiten eventos drag, dragstart y dragend.

Para obtener un ejemplo de trabajo completo sobre cómo usar CSS y HTML a fin de crear un marcador en el mapa, consulte Marcador HTML que se puede arrastrar en Ejemplos de Azure Maps. Para obtener el código fuente de este ejemplo, consulte Código fuente de marcador HTML arrastrable.

Captura de pantalla en la que se muestra un mapa de Estados Unidos con una chincheta amarilla que se arrastra para mostrar el marcador HTML que se puede arrastrar.

Adición de eventos del mouse a los marcadores HTML

Para obtener una muestra de trabajo completa sobre cómo agregar eventos del mouse y de arrastre a un marcador HTML, consulte Eventos de marcador HTML en Ejemplos de Azure Maps. Para obtener el código fuente de este ejemplo, consulte Código fuente de eventos de marcador HTML.

Captura de pantalla en la que se muestra un mapamundi con HtmlMarker y una lista de eventos HtmlMarker que se destacan en verde cuando ese evento se desencadena.

Pasos siguientes

Más información sobre las clases y los métodos utilizados en este artículo:

Para más ejemplos de código para agregar a los mapas, consulte los siguientes artículos: