Final live-sync fix for drilling markers and smooth vertex insertion
Deploy TrassenPlaner / deploy (push) Waiting to run
Details
Deploy TrassenPlaner / deploy (push) Waiting to run
Details
This commit is contained in:
parent
30ec96bd58
commit
7654f7a167
25
index.html
25
index.html
|
|
@ -1737,23 +1737,23 @@
|
||||||
labelLayers[v.id].addTo(map);
|
labelLayers[v.id].addTo(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Allow vertex insertion by clicking anywhere on the polyline
|
|
||||||
routeLayers[v.id].on('click', (e) => {
|
|
||||||
if (!v.active) return;
|
|
||||||
if (!map.editTools) return;
|
|
||||||
|
|
||||||
L.DomEvent.stopPropagation(e);
|
|
||||||
|
|
||||||
const layer = routeLayers[v.id];
|
|
||||||
const point = e.latlng;
|
const point = e.latlng;
|
||||||
const latlngs = layer.getLatLngs();
|
const latlngs = layer.getLatLngs();
|
||||||
const vertexIndex = findClosestSegmentIndex(latlngs, point);
|
|
||||||
|
// Use Turf for much better snapping to the line
|
||||||
|
const line = turf.lineString(latlngs.map(ll => [ll.lng, ll.lat]));
|
||||||
|
const snapped = turf.nearestPointOnLine(line, [point.lng, point.lat]);
|
||||||
|
const snappedPt = L.latLng(snapped.geometry.coordinates[1], snapped.geometry.coordinates[0]);
|
||||||
|
|
||||||
|
// Find where to insert it based on the snap result
|
||||||
|
const vertexIndex = findClosestSegmentIndex(latlngs, snappedPt);
|
||||||
|
|
||||||
if (vertexIndex !== -1) {
|
if (vertexIndex !== -1) {
|
||||||
latlngs.splice(vertexIndex + 1, 0, point);
|
latlngs.splice(vertexIndex + 1, 0, snappedPt);
|
||||||
layer.setLatLngs(latlngs);
|
layer.setLatLngs(latlngs);
|
||||||
if (layer.editor) layer.editor.refresh();
|
if (layer.editor) layer.editor.refresh();
|
||||||
|
|
||||||
|
v.routes = latlngs.map(ll => ({ lat: ll.lat, lng: ll.lng }));
|
||||||
calculateStats(v);
|
calculateStats(v);
|
||||||
updateVariantStatsUI(v);
|
updateVariantStatsUI(v);
|
||||||
updateRouteLabels(v);
|
updateRouteLabels(v);
|
||||||
|
|
@ -2067,7 +2067,8 @@
|
||||||
const vDrill = drillingLayers[variant.id];
|
const vDrill = drillingLayers[variant.id];
|
||||||
if (vDrill) vDrill.clearLayers();
|
if (vDrill) vDrill.clearLayers();
|
||||||
|
|
||||||
const latLngs = (variant.routes || []).map(ll => {
|
const layer = routeLayers[variant.id];
|
||||||
|
const latLngs = layer ? layer.getLatLngs() : (variant.routes || []).map(ll => {
|
||||||
try { return L.latLng(ll); } catch(e) { return null; }
|
try { return L.latLng(ll); } catch(e) { return null; }
|
||||||
}).filter(p => !!p && typeof p.lat === 'number');
|
}).filter(p => !!p && typeof p.lat === 'number');
|
||||||
|
|
||||||
|
|
@ -2077,7 +2078,7 @@
|
||||||
variant.stats.hasTooLongDrilling = false;
|
variant.stats.hasTooLongDrilling = false;
|
||||||
variant.drillingSegments = [];
|
variant.drillingSegments = [];
|
||||||
|
|
||||||
if (latLngs.length < 2) {
|
if (!latLngs || latLngs.length < 2) {
|
||||||
renderSegmentLabels(variant);
|
renderSegmentLabels(variant);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue