Optimize WEA drag performance by calculating geometries on dragend
Deploy Standortplaner / deploy (push) Successful in 17s Details

This commit is contained in:
Johannes Baumeister 2026-07-06 13:47:02 +02:00
parent 89a3a7cd6b
commit 21bd7f00be
1 changed files with 22 additions and 11 deletions

33
app.js
View File

@ -524,10 +524,26 @@ document.addEventListener('DOMContentLoaded', async () => {
if (state.isEditMode) openEditPanel(turbine);
});
// Drag Update
// Drag Update (Nur Marker und Panel bewegen, Geometrien erst bei dragend)
turbine.layers.marker.on('drag', (e) => {
const newPos = e.target.getLatLng();
turbine.latlng = newPos;
// Move rotation handle along with it during drag
updateRotationHandlePos(turbine);
if (activeTurbine?.id === turbine.id) {
// Keep fields updated
editNr.value = turbine.nr;
updateEditPanelPosition(); // Sync floating panel
}
});
turbine.layers.marker.on('dragend', (e) => {
const newPos = e.target.getLatLng();
turbine.latlng = newPos;
// Recalculate all geometries ONCE after dragging is finished to avoid lagging
const newGeoms = calculateGeometries(newPos, turbine.rd, turbine.hh, turbine.fr, turbine.ksfAngle, turbine.ksfMirrored, turbine.hersteller);
turbine.layers.sweptArea.clearLayers().addData(newGeoms.sweptArea);
turbine.layers.techDist.clearLayers().addData(newGeoms.techDist);
@ -537,16 +553,11 @@ document.addEventListener('DOMContentLoaded', async () => {
turbine.layers.ksf.clearLayers().addData(newGeoms.ksf);
turbine.layers.blf.clearLayers().addData(newGeoms.blf);
turbine.layers.mf.clearLayers().addData(newGeoms.mf);
updateRotationHandlePos(turbine);
updateLabel(turbine, newGeoms);
updateProximityLines();
updateLegend(); // Show symbols in legend
triggerAutoSave();
if (activeTurbine?.id === turbine.id) {
// Keep fields updated
editNr.value = turbine.nr;
updateEditPanelPosition(); // Sync floating panel
}
});
// Rotation Handle drag logic
@ -2740,11 +2751,11 @@ document.addEventListener('DOMContentLoaded', async () => {
state.turbines.forEach(t => {
if (state.isEditMode) {
t.layers.marker.dragging.enable();
t.layers.rotationHandle.dragging.enable();
if (t.layers.marker.dragging) t.layers.marker.dragging.enable();
if (t.layers.rotationHandle.dragging) t.layers.rotationHandle.dragging.enable();
} else {
t.layers.marker.dragging.disable();
t.layers.rotationHandle.dragging.disable();
if (t.layers.marker.dragging) t.layers.marker.dragging.disable();
if (t.layers.rotationHandle.dragging) t.layers.rotationHandle.dragging.disable();
}
});
}