diff --git a/web/src/components/map.vue b/web/src/components/map.vue index d54e245..d808b5c 100644 --- a/web/src/components/map.vue +++ b/web/src/components/map.vue @@ -36,6 +36,7 @@ export default defineComponent({ const mapDiv = ref(null); // ref to map container element const mapInstance = ref(null); // reference for the Leaflet map const track: Ref = ref({ id: 0, name: "N/A", driver: "N/A", vehicle: { name: "N/A", licenseplate: "N/A" }, distance: 0.0 }) + const multiple:Ref = ref(props.multiple); const initializeMap = () => { if (mapDiv.value) { @@ -56,7 +57,6 @@ export default defineComponent({ const clearMap = () => { if (mapInstance.value) { mapInstance.value.eachLayer((layer: any) => { - // Nur Layer entfernen, die keine Basemap sind if (!(layer instanceof L.TileLayer)) { mapInstance.value.removeLayer(layer); } @@ -94,32 +94,35 @@ export default defineComponent({ } } - // Beobachte geoJsonData und füge sie der Karte hinzu, wenn sie sich ändert watch(() => props.geoJsonData, (newData) => { if (newData) { - console.log("Neue GeoJSON-Daten erhalten:", newData); + console.log("loading GeoJSON:", newData); if (mapInstance.value) { - // Karte bereinigen - clearMap(); + if (!props.multiple){ + clearMap(); + } - // Neue GeoJSON-Daten hinzufügen var geoJsonLayer = L.geoJSON(newData).addTo(mapInstance.value); - // Metadaten des Tracks abrufen (z. B. für den ersten Track, falls ID bekannt) - getTrackMeta(props.track); + // pull meta data for for a single track + // function wont be called if multiple tracks are loaded + if (!props.multiple) { + getTrackMeta(props.track); + } - // Karte an die neuen GeoJSON-Daten anpassen + // move camera view according to loaded track const bounds = geoJsonLayer.getBounds(); mapInstance.value.fitBounds(bounds); } else { - console.error("Die Karte oder GeoJSON-Daten sind nicht verfügbar."); + console.error("Map or GeoJSON data not available."); } } }); return { mapDiv, + multiple, track }; }, @@ -129,7 +132,7 @@ export default defineComponent({ @@ -323,40 +324,4 @@ export default defineComponent({ height: 15px; margin-right: 10px; } -.tooltip { - display: none; - position: absolute; - z-index: 50; - padding: 2px 8px; - background-color: rgba(0, 0, 0, 0.7); - color: white; - border-radius: 4px; - pointer-events: none; -} - -.legend { - width: auto; - max-width: 250px; - background-color: rgba(0, 0, 0, 0.7); - color: white; - padding: 10px; - border-radius: 8px; - font-size: 14px; -} - -.legend ul { - padding: 0; - list-style-type: none; -} - -.legend li { - display: flex; - align-items: center; -} - -.legend .color-box { - width: 15px; - height: 15px; - margin-right: 10px; -} - + \ No newline at end of file diff --git a/web/src/views/route.vue b/web/src/views/route.vue index 84c51ab..e457eee 100644 --- a/web/src/views/route.vue +++ b/web/src/views/route.vue @@ -5,7 +5,6 @@ import VueDatePicker from '@vuepic/vue-datepicker'; import '@vuepic/vue-datepicker/dist/main.css' import Map from '../components/map.vue'; import FileUpload from '../components/fileUpload.vue'; -import MapMultiple from '../components/mapMultiple.vue'; type DriverType = { id: number @@ -38,7 +37,7 @@ type GeoJSON = { export default defineComponent({ name: 'map', - components: { PointCloud, VueDatePicker, Map, MapMultiple, FileUpload }, + components: { PointCloud, VueDatePicker, Map, FileUpload }, setup(_, { emit }: SetupContext) { const showMap: Ref = ref(false); const showCloud: Ref = ref(false); @@ -50,9 +49,8 @@ export default defineComponent({ const endSearchDate = ref(); const mapData: Ref = ref(null); const renderSearchOnMap: Ref = ref(false); - const multipleTracks:Ref = ref(false); + const multipleTracks: Ref = ref(false); const trackid: Ref = ref(0) - const trackids: Ref = ref([]) const loadTrack = async (id: number) => { showMap.value = true; @@ -118,73 +116,57 @@ export default defineComponent({ showMap.value = false; search.value = false; + showCloud.value = true; showUpload.value = false; + multipleTracks.value = false; if (startSearchDate.value == null || endSearchDate.value == null) { alert("please give all required infos") - showCloud.value = false; - search.value = true; return; } - if (renderSearchOnMap.value) { - const request: RequestInfo = new Request("http://localhost:5000/track?start=" + startSearchDate.value + "&end=" + endSearchDate.value, { - method: "GET", - headers: headers - }) - - try { - var response = await fetch(request); - - if (response.ok) { - // Wenn die Antwort OK ist, die Daten verarbeiten - var resp = await response.json() - - for (let i = 0; i < resp.length; i++) { - trackids.value.push(resp[i]["id"]); - } - - showMap.value = true; - } else { - console.log(await response.text()); - } - } catch (error) { - console.error("Fehler beim Laden der Track-Daten:", error); - } - showMap.value = true; - multipleTracks.value = true; - } else { const request: RequestInfo = new Request("http://localhost:5000/track?start=" + startSearchDate.value + "&end=" + endSearchDate.value, { - method: "GET", - headers: headers - }) + method: "GET", + headers: headers + }) - var response = await fetch(request) - // make sure the request was successfull - if (response.ok) { - var jsonBody = await response.json() - console.log(jsonBody) - searchedTracks.value = []; + var response = await fetch(request) + // make sure the request was successfull + if (response.ok) { + var jsonBody = await response.json() + console.log(jsonBody) + searchedTracks.value = []; - // convert vehicles from json response to processable data - for (let i = 0; i < jsonBody.length; i++) { - let track = jsonBody[i] - console.log(`track: ${jsonBody[i]["name"]}`) - searchedTracks.value.push({ - id: track["id"], - name: track["name"], - driver: { - name: track["driver"]["name"], - id: track["driver"]["id"] - }, - time: track["time"] - }) - } - showCloud.value = true; - - } else { - console.log(await response.text()) + // convert vehicles from json response to processable data + for (let i = 0; i < jsonBody.length; i++) { + let track = jsonBody[i] + console.log(`track: ${jsonBody[i]["name"]}`) + searchedTracks.value.push({ + id: track["id"], + name: track["name"], + driver: { + name: track["driver"]["name"], + id: track["driver"]["id"] + }, + time: track["time"] + }) } + showCloud.value = true; + + } else { + console.log(await response.text()) + } + + if (renderSearchOnMap.value) { + multipleTracks.value = true; + showMap.value = true; + showCloud.value = false; + + searchedTracks.value.forEach(async track => { + setTimeout(async () => { + await loadTrack(track.id); + }, 500) + }); } } @@ -206,7 +188,6 @@ export default defineComponent({ showUpload, multipleTracks, trackid, - trackids }; }, }); @@ -226,7 +207,8 @@ export default defineComponent({
  • -
  • {{ track.name }}
  • +
  • {{ track.name }} +
  • @@ -248,11 +230,9 @@ export default defineComponent({
    -
    - -
    -
    - +
    +