// Geografische Hilfsfunktionen. (function () { const EARTH_RADIUS_KM = 6371; function toRad(deg) { return (deg * Math.PI) / 180; } /** * Entfernung zwischen zwei Koordinaten in Kilometern (Haversine-Formel). * @param {{lat:number,lng:number}} a * @param {{lat:number,lng:number}} b */ function haversineDistanceKm(a, b) { const dLat = toRad(b.lat - a.lat); const dLng = toRad(b.lng - a.lng); const lat1 = toRad(a.lat); const lat2 = toRad(b.lat); const h = Math.sin(dLat / 2) ** 2 + Math.cos(lat1) * Math.cos(lat2) * Math.sin(dLng / 2) ** 2; const c = 2 * Math.atan2(Math.sqrt(h), Math.sqrt(1 - h)); return EARTH_RADIUS_KM * c; } function isValidCoordinate(lat, lng) { return ( typeof lat === 'number' && typeof lng === 'number' && Number.isFinite(lat) && Number.isFinite(lng) && lat >= -90 && lat <= 90 && lng >= -180 && lng <= 180 ); } EventMap.utils.haversineDistanceKm = haversineDistanceKm; EventMap.utils.isValidCoordinate = isValidCoordinate; })();