fixed live-display of CC using geojson

This commit is contained in:
PxlLoewe
2025-06-08 00:54:14 -07:00
parent dd53110500
commit 9f9fc49446
2 changed files with 20 additions and 9 deletions

View File

@@ -235,9 +235,9 @@ const RettungsmittelTab = ({
const livekitUser = participants.find((p) => (p.attributes.userId = aircraft.userId));
const lstName = useMemo(() => {
if (!aircraft.posLng || !aircraft.posLat) return;
if (!aircraft.posLng || !aircraft.posLat) return station.bosRadioArea;
return findLeitstelleForPosition(aircraft.posLng, aircraft.posLat);
}, [aircraft]);
}, [aircraft.posLng, aircraft.posLat]);
return (
<div className="p-4 text-base-content">

View File

@@ -1,18 +1,29 @@
import { point, multiPolygon, booleanPointInPolygon } from "@turf/turf";
import { point, multiPolygon, booleanPointInPolygon, booleanIntersects, polygon } from "@turf/turf";
import leitstellenGeoJSON from "../_components/map/_geojson/Leitstellen.json"; // Pfad anpassen
export function findLeitstelleForPosition(lat: number, lng: number) {
const heliPoint = point([lat, lng]);
for (const feature of (leitstellenGeoJSON as any).features) {
if (feature.geometry.type === "MultiPolygon") {
const polygon = multiPolygon(feature.geometry.coordinates);
if (booleanPointInPolygon(heliPoint, polygon)) {
console.log("Point is inside polygon:", feature.properties.name);
return feature.properties.name ?? "Unbenannte Leitstelle";
const geom = feature.geometry;
if (geom.type === "Polygon") {
const turfPolygon = polygon(geom.coordinates);
if (booleanPointInPolygon(heliPoint, turfPolygon)) {
return feature.properties?.name ?? "Unbenannte Leitstelle";
}
} else if (geom.type === "MultiPolygon") {
// MultiPolygon: check each polygon
for (const coords of geom.coordinates) {
const turfPolygon = polygon(coords);
if (booleanPointInPolygon(heliPoint, turfPolygon)) {
return feature.properties?.name ?? "Unbenannte Leitstelle";
}
}
} else {
continue; // Andere Geometrietypen ignorieren
}
}
return null; // Keine passende Leitstelle gefunden
return null;
}