21/10/2005
En el vasto universo del desarrollo de mapas interactivos en la web, Leaflet.js se erige como una de las bibliotecas de JavaScript más queridas y utilizadas. Su simplicidad, potencia y ligereza la convierten en la opción predilecta para desarrolladores que buscan crear experiencias cartográficas ricas y fluidas. Uno de los elementos más comunes en cualquier mapa es la representación de rutas, trayectorias o límites, tareas para las cuales las polilíneas son la herramienta fundamental. Pero, ¿qué sucede cuando estas rutas no son estáticas? ¿Cómo podemos modificarlas en tiempo real, añadiendo nuevos puntos sobre la marcha? Aquí es donde entra en juego una función pequeña pero increíblemente poderosa: addLatLng. Este método es la clave para transformar un mapa estático en una visualización viva y dinámica, capaz de reaccionar a nuevos datos al instante.

A lo largo de este artículo, nos sumergiremos en las profundidades de la función addLatLng. No solo explicaremos su sintaxis y funcionamiento básico, sino que exploraremos casos de uso prácticos, desde el seguimiento de un vehículo en tiempo real hasta la creación de herramientas de dibujo interactivas para el usuario. Comprender a fondo esta función te abrirá un nuevo abanico de posibilidades para tus proyectos con Leaflet.js, permitiéndote construir aplicaciones más complejas, interactivas y, en definitiva, más útiles.
Entendiendo el Contexto: ¿Qué es una Polilínea?
Antes de poder añadir un punto, primero debemos tener una línea a la cual añadirlo. En el ecosistema de Leaflet, este elemento se conoce como Polilínea o L.Polyline. Una polilínea no es más que una serie de puntos geográficos (coordenadas de latitud y longitud) conectados entre sí por segmentos de línea recta. Es el bloque de construcción esencial para visualizar cualquier tipo de trazado sobre un mapa.
Para crear una polilínea básica en Leaflet, simplemente necesitamos un array de objetos L.LatLng o, de forma más conveniente, un array de arrays, donde cada subarray contiene la latitud y la longitud. Veamos un ejemplo sencillo:
// Definimos los puntos iniciales de nuestra ruta var puntosIniciales = [ [40.4167, -3.70325], // Madrid [41.38879, 2.15899], // Barcelona [39.46975, -0.37739] // Valencia ]; // Creamos la instancia de la polilínea con los puntos y algunas opciones de estilo var miRuta = L.polyline(puntosIniciales, {color: 'blue', weight: 3}).addTo(map); // Opcionalmente, podemos hacer que el mapa se ajuste para mostrar toda la ruta map.fitBounds(miRuta.getBounds());Con este simple código, hemos dibujado una línea azul que conecta Madrid, Barcelona y Valencia. Esta polilínea es, por ahora, estática. Su forma está definida por el array puntosIniciales y no cambiará a menos que intervengamos. Es precisamente esta intervención la que nos permite hacer addLatLng.
La Función `addLatLng`: Anatomía y Funcionamiento
La función addLatLng es un método que pertenece al objeto L.Polyline. Su propósito es simple y directo: añadir un nuevo vértice (un nuevo punto de latitud y longitud) a una polilínea ya existente. Al hacerlo, la polilínea se redibuja automáticamente en el mapa para incluir el nuevo segmento de línea que conecta el último punto antiguo con el nuevo.
Sintaxis del Método
La firma del método es la siguiente:
miPolilinea.addLatLng(latlng, [latlngs])
Vamos a desglosar sus parámetros:
latlng: Este es el parámetro principal y obligatorio. Debe ser un objetoL.LatLng(o un array como[latitud, longitud]) que representa el nuevo punto geográfico que queremos añadir a la línea.[latlngs]: Este es un parámetro opcional y se utiliza exclusivamente cuando trabajamos con MultiPolilíneas. Una MultiPolilínea es, en esencia, un conjunto de varias polilíneas agrupadas en un solo objeto. Si no se especifica este segundo parámetro,addLatLngañadirá el nuevo punto a la primera polilínea del conjunto por defecto. Si queremos añadir el punto a una línea específica dentro del conjunto, debemos pasar aquí la referencia a esa línea concreta (que podemos obtener previamente con el métodogetLatLngs()).
El método devuelve this (la propia instancia de la polilínea), lo que permite el encadenamiento de métodos, una práctica común y muy útil en JavaScript.
Ejemplo Básico de Uso
Continuando con nuestro ejemplo anterior, supongamos que queremos extender nuestra ruta desde Valencia hasta Sevilla. Así es como lo haríamos:
// Coordenadas de Sevilla var puntoSevilla = [37.38283, -5.97317]; // Añadimos el nuevo punto a nuestra polilínea existente miRuta.addLatLng(puntoSevilla); // El mapa ahora mostrará la línea extendida hasta Sevilla¡Así de fácil! Con una sola línea de código, hemos modificado dinámicamente la geometría de nuestra capa en el mapa. Este es el poder fundamental de addLatLng.
Casos de Uso Avanzados y Ejemplos Prácticos
La verdadera magia de addLatLng se revela en escenarios interactivos y en tiempo real. Veamos algunas aplicaciones prácticas que demuestran su versatilidad.
1. Seguimiento GPS en Tiempo Real (Live Tracking)
Imagina que estás desarrollando una aplicación para seguir una flota de vehículos. Cada vehículo envía su nueva ubicación cada pocos segundos. Podemos usar addLatLng para dibujar el rastro del vehículo en el mapa.
// Inicializamos una polilínea vacía para el vehículo 1 var rastroVehiculo1 = L.polyline([], {color: 'red'}).addTo(map); // Simulamos la llegada de nuevas coordenadas cada 3 segundos setInterval(function() { // En una aplicación real, estas coordenadas vendrían de un servidor o un dispositivo GPS var nuevaCoordenada = obtenerNuevaCoordenada(); // Añadimos la nueva coordenada al rastro rastroVehiculo1.addLatLng(nuevaCoordenada); // Opcionalmente, podemos centrar el mapa en la última ubicación map.panTo(nuevaCoordenada); }, 3000);En este ejemplo, la polilínea comienza vacía y va creciendo punto por punto a medida que llegan nuevos datos, creando una visualización clara y en tiempo real de la trayectoria del vehículo.
2. Herramienta de Dibujo de Rutas
Podemos empoderar al usuario para que dibuje su propia ruta directamente sobre el mapa. Para ello, escucharemos los eventos de clic en el mapa y usaremos las coordenadas de cada clic para construir una polilínea.
// Creamos una polilínea vacía para que el usuario dibuje var rutaUsuario = L.polyline([], {color: 'green', dashArray: '5, 5'}).addTo(map); // Añadimos un listener para el evento 'click' en el mapa map.on('click', function(evento) { // El objeto 'evento' contiene la latitud y longitud donde se hizo clic var puntoClickeado = evento.latlng; // Añadimos este punto a la polilínea del usuario rutaUsuario.addLatLng(puntoClickeado); console.log('Punto añadido en: ' + puntoClickeado); });Ahora, cada vez que el usuario haga clic en el mapa, se añadirá un nuevo vértice a la línea, permitiéndole trazar un camino de forma intuitiva y visual.
Comparativa: `addLatLng()` vs. `setLatLngs()`
Es crucial no confundir addLatLng() con otro método muy común: setLatLngs(). Aunque ambos modifican los puntos de una polilínea, su comportamiento es fundamentalmente diferente. La siguiente tabla aclara sus diferencias:
| Característica | addLatLng() | setLatLngs() |
|---|---|---|
| Propósito | Añade uno o más puntos al final de la polilínea existente. | Reemplaza COMPLETAMENTE todos los puntos de la polilínea con un nuevo conjunto de puntos. |
| Impacto en Puntos Existentes | Conserva todos los puntos anteriores y agrega nuevos. | Descarta todos los puntos anteriores. |
| Parámetros | Recibe un único punto (L.LatLng). | Recibe un array de puntos (L.LatLng[]). |
| Caso de Uso Principal | Extender una ruta, seguimiento en tiempo real, dibujo interactivo. | Actualizar una ruta completa, mostrar una ruta alternativa, cargar una nueva ruta desde una fuente de datos. |
En resumen: usa addLatLng cuando quieras hacer crecer una línea y setLatLngs cuando quieras reemplazarla por completo.
Preguntas Frecuentes (FAQ)
¿Puedo usar `addLatLng` en otras capas como polígonos o círculos?
No. El método addLatLng es específico de la clase L.Polyline. Los polígonos (L.Polygon), que también heredan de L.Polyline, tienen un comportamiento similar, pero la lógica puede ser más compleja debido a la necesidad de mantener la forma cerrada. Los círculos (L.Circle) se definen por un centro y un radio, por lo que no tienen un concepto de vértices que se puedan añadir de esta manera.
¿Cómo puedo eliminar el último punto que añadí?
Leaflet no proporciona un método directo como `removeLastLatLng()`. Sin embargo, puedes lograrlo fácilmente combinando getLatLngs() y setLatLngs(). El proceso sería:
- Obtener todos los puntos actuales de la polilínea en un array:
var todosLosPuntos = miRuta.getLatLngs(); - Eliminar el último elemento de ese array:
todosLosPuntos.pop(); - Actualizar la polilínea con el nuevo array de puntos (ya sin el último):
miRuta.setLatLngs(todosLosPuntos);
¿Añadir muchos puntos con `addLatLng` puede afectar el rendimiento?
Sí. Cada llamada a addLatLng provoca un redibujado de la capa. Si estás añadiendo cientos o miles de puntos en un bucle muy rápido, esto puede sobrecargar el navegador. En estos escenarios de carga masiva, es mucho más eficiente construir primero el array completo de puntos en JavaScript y luego llamar a setLatLngs() una sola vez al final. Para actualizaciones en tiempo real y de baja frecuencia (como un punto cada pocos segundos), el rendimiento de addLatLng es excelente y no debería ser una preocupación.
¿`addLatLng` funciona con GeoJSON?
Indirectamente. Si cargas una capa GeoJSON y esta contiene una LineString, Leaflet la representará como una L.Polyline. Una vez que tienes la referencia a esa capa de polilínea, puedes usar addLatLng en ella como en cualquier otra. Sin embargo, ten en cuenta que esto solo modifica la representación visual en el mapa; no actualiza el objeto GeoJSON original en memoria.
Conclusión
La función addLatLng es un ejemplo perfecto de la filosofía de Leaflet.js: simple en su concepción, pero inmensamente poderosa en su aplicación. Es la puerta de entrada para transformar mapas estáticos en lienzos dinámicos que responden a la interacción del usuario y a flujos de datos en tiempo real. Al dominar cómo y cuándo usar addLatLng, junto con su contraparte setLatLngs, ganas un control granular sobre las geometrías de tu mapa, permitiéndote construir aplicaciones cartográficas más sofisticadas, interactivas y atractivas. La próxima vez que necesites dibujar una ruta que evoluciona, ya sabes qué herramienta tienes en tu arsenal.
Si quieres conocer otros artículos parecidos a Guía Completa de addLatLng en Leaflet.js puedes visitar la categoría Juegos.
