diff --git a/index.html b/index.html
index 1178f57..519804d 100644
--- a/index.html
+++ b/index.html
@@ -1737,23 +1737,23 @@
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 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) {
- latlngs.splice(vertexIndex + 1, 0, point);
+ latlngs.splice(vertexIndex + 1, 0, snappedPt);
layer.setLatLngs(latlngs);
if (layer.editor) layer.editor.refresh();
+ v.routes = latlngs.map(ll => ({ lat: ll.lat, lng: ll.lng }));
calculateStats(v);
updateVariantStatsUI(v);
updateRouteLabels(v);
@@ -2067,7 +2067,8 @@
const vDrill = drillingLayers[variant.id];
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; }
}).filter(p => !!p && typeof p.lat === 'number');
@@ -2077,7 +2078,7 @@
variant.stats.hasTooLongDrilling = false;
variant.drillingSegments = [];
- if (latLngs.length < 2) {
+ if (!latLngs || latLngs.length < 2) {
renderSegmentLabels(variant);
return;
}