From 4e2d3c10c98c50a5d3c1d7ad29154ca67f4e65e1 Mon Sep 17 00:00:00 2001 From: Ronald Morales Date: Sun, 24 Mar 2024 02:05:19 -0300 Subject: [PATCH] Modifica mapa, operador, fecha gtfs --- src/assets/paradaAzul.png | Bin 0 -> 10390 bytes src/pages/gtfs_archivo/Admin.svelte | 63 +++++++++++++++------ src/pages/mapas/Paraderos.svelte | 83 +++++++++++++++++++++++++--- src/pages/mapas/Rutas.svelte | 31 +++++++++-- src/services/mapas.js | 9 +++ 5 files changed, 156 insertions(+), 30 deletions(-) create mode 100644 src/assets/paradaAzul.png diff --git a/src/assets/paradaAzul.png b/src/assets/paradaAzul.png new file mode 100644 index 0000000000000000000000000000000000000000..90b3109445fa9f27d2d348b8dadc11af7d78a61c GIT binary patch literal 10390 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�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 import Paginate from "$/components/Paginate.svelte"; + import { downloadGtfsArchivo, getGtfsArchivo,getGtfsArchivoId,getGtfsBase } from "$/services/gtfs_archivo"; import PageTitle from "$/components/PageTitle.svelte"; import { useLocation } from "svelte-navigator"; @@ -15,7 +16,7 @@ let page = 1; let offset = 0; let count = 0; - let ordering = 'id_archivo' + let ordering = '-id_gtfs' let redes = [] let lista_gtfs = [] let location = useLocation() @@ -38,7 +39,7 @@ } loading = true offset = (p - 1) * limit; - const data = await getGtfsArchivo({id_red, offset, limit, ordering }) + const data = await getGtfsArchivo({id_red, offset, limit, ordering:'-id_gtfs'}) lista_gtfs = data.results; count = data.count; } catch (error) { @@ -69,7 +70,31 @@ .finally(() => loading = false) } - + function adjustDateTimeByOffset(isoString) { + // Extraer la fecha, la hora y el desplazamiento de zona horaria + const [datePart, timePart] = isoString.split('T'); + const [time, offset] = timePart.split(/(?=[-+])/); // Usa una expresión regular para dividir por el signo más cercano (+ o -) + + // Convertir a fecha/hora UTC + const dateTime = new Date(`${datePart}T${time}Z`); + + // Extraer las horas y minutos del desplazamiento + const offsetSign = offset[0] === '+' ? 1 : -1; // Determinar si el desplazamiento es positivo o negativo + const [offsetHours, offsetMinutes] = offset.slice(1).split(':').map(Number); + + // Ajustar la fecha/hora basándose en el desplazamiento + dateTime.setUTCHours(dateTime.getUTCHours() + offsetSign * offsetHours); + dateTime.setUTCMinutes(dateTime.getUTCMinutes() + offsetSign * offsetMinutes); + + // Formatear y retornar la nueva fecha/hora ajustada + const adjustedYear = dateTime.getUTCFullYear(); + const adjustedMonth = String(dateTime.getUTCMonth() + 1).padStart(2, '0'); // getUTCMonth() es 0-indexado + const adjustedDate = String(dateTime.getUTCDate()).padStart(2, '0'); + const adjustedHours = String(dateTime.getUTCHours()).padStart(2, '0'); + const adjustedMinutes = String(dateTime.getUTCMinutes()).padStart(2, '0'); + + return `${adjustedDate}-${adjustedMonth}-${adjustedYear} ${adjustedHours}:${adjustedMinutes}`; +} @@ -106,33 +131,39 @@ {#if ordering === '-id_gtfs'}{/if} --> - onOrderBy('nombre_red')}>Archivo - {#if ordering === 'archivo'}{/if} - {#if ordering === '-archivo'}{/if} + onOrderBy('id_gtfs')}>ID + + + + + onOrderBy('archivo')}>Archivo + onOrderBy('created')}>Creado el - {#if ordering === 'created'}{/if} - {#if ordering === '-created'}{/if} + onOrderBy('status')}>Estado - {#if ordering === 'status'}{/if} - {#if ordering === '-status'}{/if} + onOrderBy('valid_from')}>Inico Vigencia - {#if ordering === 'status'}{/if} - {#if ordering === '-status'}{/if} + onOrderBy('vigente')}>Vigente - {#if ordering === 'vigente'}{/if} - {#if ordering === '-vigente'}{/if} + @@ -140,7 +171,7 @@ {#each lista_gtfs as app, index} {offset + index + 1} - + {app.id_gtfs} {#if !loading} onDownload(app)}>{app.archivo} @@ -148,7 +179,7 @@ {app.archivo} {/if} - {app.created} + {adjustDateTimeByOffset(app.created)} {app.status} {app.valid_from} {app.vigente ? '✅':'🚫'} diff --git a/src/pages/mapas/Paraderos.svelte b/src/pages/mapas/Paraderos.svelte index 5a46886..8c79550 100644 --- a/src/pages/mapas/Paraderos.svelte +++ b/src/pages/mapas/Paraderos.svelte @@ -7,12 +7,15 @@ // services import { getRegiones } from "$/services/regiones" import { getComunas } from "$/services/comunas" - import { getMarcasParaderos } from "$/services/mapas" + import { getMarcasParaderos, getCoordenadasIniciales } from "$/services/mapas" // libs import { storeParaderos } from "$/stores/global" import imagenParada from '$/assets/parada.png' + import imagenParadaAzul from '$/assets/paradaAzul.png' import { onMount } from "svelte"; + import { getDispositivos } from "../../services/dispositivos"; + let myMap = null let elMap = null @@ -22,6 +25,7 @@ let comunas_x_region = [] let L = null let iconParada = null + let iconParadaAzul = null let markers = [] let form = {} let parada = null @@ -30,10 +34,22 @@ $: myMap && crear_marcadores_por_criterio() + + let center = { lat: 0, lng: 0 }; + let dispositivosConTotem + //dispositivosConTotem = totemAsignado(); + onMount(() => { - if(globalThis.L) create_map(); - cargar_paraderos_todos($storeParaderos) - }) + obtieneCorrdenadas(); + // No es necesario llamar a create_map() , la lógica se maneja a través de la reactividad de center + }); + + // Reacciona a los cambios en center + $: if(center && globalThis.L) { + create_map(); + cargar_paraderos_todos($storeParaderos); + + }; function create_map() { if (!elMap || !globalThis.L) return; @@ -46,6 +62,14 @@ popupAnchor: [0, -16] }) } + if (!iconParadaAzul) { + iconParadaAzul = L.icon({ + iconUrl: imagenParadaAzul, + iconSize: [32, 32], + iconAnchor: [16, 32], + popupAnchor: [0, -16] + }) + } if (!myMap) { myMap = L.map(elMap) L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', @@ -55,13 +79,19 @@ // obtener coordenadas actuales // centrar mapa en coordenadas del navegador - navigator.geolocation.getCurrentPosition( + /* navigator.geolocation.getCurrentPosition( ({ coords }) => { const { latitude, longitude } = coords; myMap.setView([latitude, longitude], 16) }, (error) => console.log({ error }) - ) + )*/ + + + + // Configurar la vista del mapa en la ubicación de Concepción con un nivel de zoom, por ejemplo, 16 + myMap.setView(center, 15); + } @@ -74,6 +104,20 @@ } } + + async function obtieneCorrdenadas () { + try { + const data = await getCoordenadasIniciales('?'); + center.lat = parseFloat(data.initialLat); + center.lng = parseFloat(data.initialLng); + console.log("Coordenadas de inicio:", data); + } + catch (error) { + console.error('Error al obtener las coordenadas iniciales :', error); + } + } + + async function cargar_paraderos_todos(data_default) { try { loading = true @@ -118,11 +162,18 @@ // filtro coincide a criterio return true }) - + + + + + // 3. crear marcadores for (let mark of paraderos) { + + const tieneTotem = false // dispositivosConTotem.some(dispositivo => dispositivo.id_paradero === mark.id_paradero); + const { lat, lng } = mark.position - const marker = L.marker([lat, lng], { icon: iconParada }).addTo(myMap) + const marker = L.marker([lat, lng], {icon: tieneTotem ? iconParadaAzul : iconParada }).addTo(myMap) const { title, location } = mark; const html = `${title}
${location}` @@ -149,6 +200,22 @@ form.time_search && clearTimeout(form.time_search) form.time_search = setTimeout(() => crear_marcadores_por_criterio(), 1000) } + + + async function totemAsignado( ) { + try { + + const dispTotem = await getDispositivos({ id_tipo_dispositivo: 1 }); + return dispTotem + } catch (error) { + console.log({ error }); + return []; + } +} + + + + diff --git a/src/pages/mapas/Rutas.svelte b/src/pages/mapas/Rutas.svelte index 9cd3022..5b93d5d 100644 --- a/src/pages/mapas/Rutas.svelte +++ b/src/pages/mapas/Rutas.svelte @@ -9,7 +9,7 @@ import { onMount } from "svelte"; // servicios - import { getRutas } from "$/services/mapas"; + import { getRutas,getCoordenadasIniciales } from "$/services/mapas"; import ModalLetreroLUR from "./ModalLetreroLUR.svelte"; import FiltroRutas from "./FiltroRutas.svelte"; import { getBusesLinea, getParaderosLinea } from "$/services/lineas"; @@ -39,15 +39,22 @@ let timeInterval = null let fileproto = null let loading_proto = false + let center = { lat: 0, lng: 0 }; + onMount(() => { - create_map() - + //create_map() + obtieneCorrdenadas(); return () => { timeInterval && globalThis.clearInterval(timeInterval) } }) + // Reacciona a los cambios en center + $: if(center && globalThis.L) { + create_map(); + }; + function create_map() { if (!elMap || !globalThis.L) return; if (!L) L = globalThis.L; @@ -96,15 +103,27 @@ // obtener coordenadas actuales // centrar mapa en coordenadas del navegador - navigator.geolocation.getCurrentPosition( + /*navigator.geolocation.getCurrentPosition( ({ coords }) => { const { latitude, longitude } = coords; myMap.setView([latitude, longitude], 16); }, (error) => console.log({ error }) - ) - } + )*/ + myMap.setView(center, 14); + } + async function obtieneCorrdenadas () { + try { + const data = await getCoordenadasIniciales('?'); + center.lat = parseFloat(data.initialLat); + center.lng = parseFloat(data.initialLng); + console.log("Coordenadas de inicio:", data); + } + catch (error) { + console.error('Error al obtener las coordenadas iniciales :', error); + } + } async function onMostrarRuta(id_operador, id_linea) { try { loading = true diff --git a/src/services/mapas.js b/src/services/mapas.js index c8812a0..e7d1ed0 100644 --- a/src/services/mapas.js +++ b/src/services/mapas.js @@ -17,4 +17,13 @@ export async function getRutas(params) { }) if (!res.ok) throw await res.text() return res.json() +} + +export async function getCoordenadasIniciales(params) { + const query = !params ? '' : '?' + (new URLSearchParams(params).toString()); + const res = await fetch(`${base}/mapas/coordenadas/${query}`, { + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.text( ) + return res.json() } \ No newline at end of file