mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-10 09:58:32 -05:00
50 lines
1.9 KiB
JavaScript
50 lines
1.9 KiB
JavaScript
import { createInteractiveMarker, createSimplifiedMarker } from "./marker_factory";
|
|
|
|
export function createMarkersArray(markersData, userSettings, apiKey) {
|
|
// Create a canvas renderer
|
|
const renderer = L.canvas({ padding: 0.5 });
|
|
|
|
if (userSettings.pointsRenderingMode === "simplified") {
|
|
return createSimplifiedMarkers(markersData, renderer, userSettings);
|
|
} else {
|
|
return markersData.map((marker, index) => {
|
|
return createInteractiveMarker(marker, index, userSettings, apiKey, renderer);
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
export function createSimplifiedMarkers(markersData, renderer, userSettings) {
|
|
const distanceThreshold = 50; // meters
|
|
const timeThreshold = 20000; // milliseconds (3 seconds)
|
|
|
|
const simplifiedMarkers = [];
|
|
let previousMarker = markersData[0]; // Start with the first marker
|
|
simplifiedMarkers.push(previousMarker); // Always keep the first marker
|
|
|
|
markersData.forEach((currentMarker, index) => {
|
|
if (index === 0) return; // Skip the first marker
|
|
|
|
const [currLat, currLon, , , currTimestamp] = currentMarker;
|
|
const [prevLat, prevLon, , , prevTimestamp] = previousMarker;
|
|
|
|
const timeDiff = currTimestamp - prevTimestamp;
|
|
// Note: haversineDistance function would need to be imported or implemented
|
|
// For now, using simple distance calculation
|
|
const latDiff = currLat - prevLat;
|
|
const lngDiff = currLon - prevLon;
|
|
const distance = Math.sqrt(latDiff * latDiff + lngDiff * lngDiff) * 111000; // Rough conversion to meters
|
|
|
|
// Keep the marker if it's far enough in distance or time
|
|
if (distance >= distanceThreshold || timeDiff >= timeThreshold) {
|
|
simplifiedMarkers.push(currentMarker);
|
|
previousMarker = currentMarker;
|
|
}
|
|
});
|
|
|
|
// Now create markers for the simplified data using the factory
|
|
return simplifiedMarkers.map((marker) => {
|
|
return createSimplifiedMarker(marker, userSettings);
|
|
});
|
|
}
|