From be6d85267fb0949490fe54e07b2bc10826b2c518 Mon Sep 17 00:00:00 2001 From: UO291047 Date: Mon, 18 Dec 2023 16:46:09 +0100 Subject: [PATCH] Dibujo de multiples rutas en un mapa dinamico hecho --- js/viajes.js | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++ viajes.css | 4 +-- viajes.html | 6 ++++ 3 files changed, 88 insertions(+), 2 deletions(-) diff --git a/js/viajes.js b/js/viajes.js index 3f725a1..47129ef 100644 --- a/js/viajes.js +++ b/js/viajes.js @@ -151,5 +151,85 @@ class Viajes{ return htmlOutput; } + cargarArchivosKML(files) { + const mainElement = document.querySelector("main"); + + // Limpiamos el main por si ya tenía algo + while (mainElement.firstChild) { + mainElement.removeChild(mainElement.firstChild); + } + + mapboxgl.accessToken = 'pk.eyJ1IjoidW8yOTEwNDciLCJhIjoiY2xxOW1uOHd4MWcyNjJpcDdqcDFrZmRoNSJ9.wRJntK8K2RqcAqRrw0XE2g'; + var map = new mapboxgl.Map({ + container: 'map', + style: 'mapbox://styles/mapbox/streets-v9', + center: [this.longitud, this.latitud], + zoom: 14 + }); + + var i = 0; + for (const file of files) { + const lector = new FileReader(); + + lector.onload = (event) => { + const resultXML = event.target.result; + this.procesarKML(resultXML, map, i); + i++; + }; + + lector.readAsText(file); + } + } + + procesarKML(xmlContent, map, nRuta) { + const xmlDoc = $.parseXML(xmlContent); + const $xml = $(xmlDoc); + + const puntos = []; + + $xml.find('Placemark').each(function () { + const coordenadas = $(this).find('coordinates').text().split(' '); + + coordenadas.forEach(coord => { + const [longitud, latitud, altitud] = coord.split(',').map(parseFloat); + puntos.push([longitud, latitud, altitud]); + }); + }); + + const primerPunto = puntos[0]; + + // Añadir la ruta al mapa centrando en el primer punto + map.on('load', function () { + map.addLayer({ + 'id': 'ruta' + nRuta, + 'type': 'line', + 'source': { + 'type': 'geojson', + 'data': { + 'type': 'Feature', + 'properties': {}, + 'geometry': { + 'type': 'LineString', + 'coordinates': puntos + } + } + }, + 'layout': { + 'line-join': 'round', + 'line-cap': 'round' + }, + 'paint': { + 'line-color': '#' + (Math.random() * 0xFFFFFF << 0).toString(16), + 'line-width': 8 + } + }); + + // Centrar el mapa en el primer punto + map.flyTo({ + center: primerPunto, + zoom: 10 + }); + }); + } } \ No newline at end of file diff --git a/viajes.css b/viajes.css index 604b27b..8c31585 100644 --- a/viajes.css +++ b/viajes.css @@ -1,5 +1,5 @@ main { - width: 100em; - height: 100em; + width: 70em; + height: 70em; } \ No newline at end of file diff --git a/viajes.html b/viajes.html index 01befa2..add4297 100644 --- a/viajes.html +++ b/viajes.html @@ -52,9 +52,15 @@

Viajes

+ Mostrar XML de rutas:

+

+ Cargar ruta en formato Kml: + +

+