Robustness fix: sanitize incoming GeoJSON to prevent Leaflet crashes on invalid geometries
Deploy TrassenPlaner / deploy (push) Waiting to run
Details
Deploy TrassenPlaner / deploy (push) Waiting to run
Details
This commit is contained in:
parent
08019238e1
commit
0160def674
25
index.html
25
index.html
|
|
@ -2761,12 +2761,20 @@
|
|||
try {
|
||||
console.log("Starte Daten-Abruf vom Server...");
|
||||
|
||||
const sanitize = (gj) => {
|
||||
if (!gj || !gj.features) return { type: "FeatureCollection", features: [] };
|
||||
return {
|
||||
...gj,
|
||||
features: gj.features.filter(f => f && f.geometry && f.geometry.coordinates)
|
||||
};
|
||||
};
|
||||
|
||||
// 1. Eigentümer / Flurstücke
|
||||
const ownersRes = await fetch(`${API_BASE}/owners`);
|
||||
if (ownersRes.ok) {
|
||||
let geojson = await ownersRes.json();
|
||||
let geojson = sanitize(await ownersRes.json());
|
||||
// Transformation falls die DB UTM-Koordinaten liefert (z.B. > 1000)
|
||||
if (geojson.features && geojson.features.length > 0) {
|
||||
if (geojson.features.length > 0) {
|
||||
const firstCoord = geojson.features[0].geometry?.coordinates?.[0]?.[0]?.[0] || 0;
|
||||
if (Math.abs(firstCoord) > 1000) {
|
||||
console.log("Erkannte UTM-Koordinaten in DB, transformiere...");
|
||||
|
|
@ -2776,7 +2784,6 @@
|
|||
state.owners = geojson;
|
||||
updateOwnerLayer();
|
||||
|
||||
// Auto-Zoom auf die Daten beim ersten Laden
|
||||
if (layers.owners.getBounds().isValid()) {
|
||||
map.fitBounds(layers.owners.getBounds());
|
||||
}
|
||||
|
|
@ -2787,7 +2794,6 @@
|
|||
if (variantsRes.ok) {
|
||||
const variants = await variantsRes.json();
|
||||
if (variants && variants.length > 0) {
|
||||
// Merging logic to preserve existing objects but update routes
|
||||
variants.forEach(sv => {
|
||||
const local = state.variants.find(lv => lv.id === sv.id);
|
||||
if (local) {
|
||||
|
|
@ -2802,17 +2808,24 @@
|
|||
// 3. Nutzungen
|
||||
const usageRes = await fetch(`${API_BASE}/usage`);
|
||||
if (usageRes.ok) {
|
||||
state.usage = await usageRes.json();
|
||||
state.usage = sanitize(await usageRes.json());
|
||||
updateUsageLayer();
|
||||
}
|
||||
|
||||
// 4. WEA
|
||||
const weaRes = await fetch(`${API_BASE}/wea`);
|
||||
if (weaRes.ok) {
|
||||
state.wea = await weaRes.json();
|
||||
state.wea = sanitize(await weaRes.json());
|
||||
updateWEALayer();
|
||||
}
|
||||
|
||||
// 5. Infratruktur
|
||||
const infraRes = await fetch(`${API_BASE}/infrastructure`);
|
||||
if (infraRes.ok) {
|
||||
state.infrastructure = sanitize(await infraRes.json());
|
||||
updateInfrastructureLayer();
|
||||
}
|
||||
|
||||
console.log("Daten erfolgreich vom Server geladen.");
|
||||
} catch (err) {
|
||||
console.error("Fehler beim Laden der Server-Daten:", err);
|
||||
|
|
|
|||
Loading…
Reference in New Issue