From 06ffab66a164f4254cf016d936280acdff105e34 Mon Sep 17 00:00:00 2001 From: 4aiman Date: Tue, 27 Oct 2026 14:18:00 +0300 Subject: [PATCH] trackme share: include POI near the ride (bbox of route+track), shown on the viewer --- frontend/js/main.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/frontend/js/main.js b/frontend/js/main.js index 7243047..7e59ec0 100644 --- a/frontend/js/main.js +++ b/frontend/js/main.js @@ -4897,13 +4897,26 @@ async function shareRideContext() { let segs = buildRoadSegments(await DB.getRoadPoints()); roads = segs.map(s => ({ p: s.pts.map(q => [r5(q.lat), r5(q.lon)]), t: s.atype || "b" })); } catch (e) {} + // POI near the ride only (bbox of route+track + margin) — the full set is too big to send. + let pois = []; + try { + let all = await POI.load(); + let bpts = track.concat(route); + if (all && all.length && bpts.length) { + let minLa = 1e9, maxLa = -1e9, minLo = 1e9, maxLo = -1e9; + for (let p of bpts) { if (p[0] < minLa) minLa = p[0]; if (p[0] > maxLa) maxLa = p[0]; if (p[1] < minLo) minLo = p[1]; if (p[1] > maxLo) maxLo = p[1]; } + minLa -= 0.05; maxLa += 0.05; minLo -= 0.07; maxLo += 0.07; // ~5 km margin + pois = all.filter(p => p.la >= minLa && p.la <= maxLa && p.lo >= minLo && p.lo <= maxLo) + .map(p => ({ la: r5(p.la), lo: r5(p.lo), c: p.c, n: p.n })); + } + } catch (e) {} showToast("Отдаю смотрящему..."); try { let raw = await window.__TAURI__.core.invoke("http_request", { - url: shareUrl, method: "POST", body: JSON.stringify({ token, route, roads, track }) + url: shareUrl, method: "POST", body: JSON.stringify({ token, route, roads, track, pois }) }); let res = JSON.parse(raw || "{}"); - if (res.ok) showToast(`Отдано: маршрут ${route.length}, дороги ${roads.length}, трек ${track.length}`); + if (res.ok) showToast(`Отдано: маршрут ${route.length}, дороги ${roads.length}, трек ${track.length}, POI ${pois.length}`); else appAlert("Не отдалось: " + (res.error || "ошибка")); } catch (e) { appAlert("Не отдалось: " + (e.message || e)); } }