Vykreslovat trasu na zaklade dat z z db

This commit is contained in:
Michal Kváček
2024-07-25 19:51:15 +02:00
parent 88a760846c
commit e8dc51a80d
10 changed files with 58 additions and 46 deletions
+1 -1
View File
@@ -82,7 +82,7 @@ const props = defineProps({
</q-item-section>
</q-item>
<q-item v-for="poi in flight.track" :key="poi.id">
<q-item v-for="poi in flight.turnPoints" :key="poi.id">
<q-item-section avatar>
<q-icon name="place" v-if="poi.pointOfInterest"/>
<q-icon name="local_airport" v-if="poi.airport"/>
+23 -14
View File
@@ -21,7 +21,7 @@ const props = defineProps({
const mapPhotos = computed(() => props.photos.filter(photo => photo.gpsLatitude && photo.gpsLongitude));
const poisWithGPS = computed(() => props.flight.track.map(poi => poi.pointOfInterest || poi.airport));
const poisWithGPS = computed(() => props.flight.turnPoints.map(poi => poi.pointOfInterest || poi.airport));
const mapMarkers = [props.flight.takeoffAirport].concat(poisWithGPS.value).concat([props.flight.landingAirport]);
const pointsOfInterests = computed(() => mapMarkers
@@ -30,10 +30,12 @@ const pointsOfInterests = computed(() => mapMarkers
marker => ({label: marker.name, position: {lat: marker.gpsLatitude, lng: marker.gpsLongitude}})
));
const gpxTrack = props.flight.gpxTrack ? reactive(props.flight.gpxTrack) : null;
// Tuu bylo reactive()
const flightTrack = props.flight.track ? props.flight.track.points : null;
const displayMap = computed(() => {
return (
!!gpxTrack ||
!!flightTrack ||
mapPhotos.value.length > 0 ||
poisWithGPS.value.length > 0 ||
props.flight.landingAirport.id !== props.flight.takeoffAirport.id
@@ -41,8 +43,14 @@ const displayMap = computed(() => {
});
let chartSpeedData, chartAltitudeData = null;
if (gpxTrack) {
const chartLabels = gpxTrack.time.map(t => {
if (flightTrack) {
const timestamp = flightTrack.map(i => i.timestamp);
const speed = flightTrack.map(i => i.speed);
const altitude = flightTrack.map(i => i.altitude);
const terrainElevation = flightTrack.map(i => i.terrainElevation || 0);
const chartLabels = timestamp.map(t => {
const datetime = new Date(t);
return datetime.getHours() + ":" + datetime.getMinutes();
});
@@ -52,7 +60,7 @@ if (gpxTrack) {
backgroundColor: "#38bd3e",
borderColor: "#38bd3e",
label: "Rychlost (km/h)",
data: gpxTrack.speed,
data: speed,
pointRadius: 1,
}]
};
@@ -63,18 +71,18 @@ if (gpxTrack) {
backgroundColor: "#9ae3ff",
borderColor: "#9ae3ff",
label: "Nadmořská výška letu (m)",
data: gpxTrack.altitude,
data: altitude,
pointRadius: 1,
}]
};
if (gpxTrack.terrainElevation.length > 0) {
if (terrainElevation.length > 0) {
chartAltitudeData.datasets.push(
{
backgroundColor: "rgba(148,94,40,0.7)",
borderColor: "#945e28",
label: "Nadmořská výška země (m)",
data: gpxTrack.terrainElevation,
data: terrainElevation,
fill: true,
pointRadius: 1,
});
@@ -90,7 +98,7 @@ const drawCurrentPositionMarker = (e) => {
return;
}
const idx = res[0].index;
currentPositionMarker.value = props.flight.gpxTrack.coordinates[idx];
currentPositionMarker.value = props.flight.track.points[idx].coordinates;
}
const chartOptions = {
@@ -108,8 +116,8 @@ const {getMarkersFrom} = useFlightPlanUtils();
const showPlanTrack = ref(true);
const tracks = computed(() => {
const items = [];
if (props.flight.gpxTrack) {
items.push(props.flight.gpxTrack.coordinates)
if (props.flight.track) {
items.push(props.flight.track.points.map(m => m.coordinates))
}
if (showPlanTrack.value && props.flightPlan) {
items.push(getMarkersFrom(props.flightPlan).map(m => ({lat: m.gpsLatitude, lng: m.gpsLongitude})));
@@ -122,6 +130,7 @@ const tracks = computed(() => {
<q-no-ssr>
<q-intersection>
<q-checkbox v-model="showPlanTrack" label="Zobrazovat plán?" v-if="flightPlan" />
<MapWithMarkers
v-if="displayMap"
style="width: 100%; height: 500px;"
@@ -132,8 +141,8 @@ const tracks = computed(() => {
v-bind="$attrs"
/>
<Line v-if="gpxTrack" :data="chartSpeedData" :options="chartOptions"/>
<Line v-if="gpxTrack" :data="chartAltitudeData" :options="chartOptions"/>
<Line v-if="flightTrack" :data="chartSpeedData" :options="chartOptions"/>
<Line v-if="flightTrack" :data="chartAltitudeData" :options="chartOptions"/>
</q-intersection>
</q-no-ssr>
</template>
@@ -51,7 +51,7 @@ watch(poi, (newVal) => {
}
});
watch(() => props.flight.track, (newVal) => {
watch(() => props.flight.turnPoints, (newVal) => {
formData.track = [];
for (const i in newVal) {
const trackInfo = newVal[i];
@@ -76,7 +76,7 @@ watch(() => props.flight.track, (newVal) => {
<template>
<FormWrapper v-model="formData">
<q-banner class="bg-green text-white" v-if="flight.gpxTrack">
<q-banner class="bg-green text-white" v-if="flight.track">
<q-icon name="check"/>
Trasa nahrána
</q-banner>