From 64819e1e2254316a090fd056b80f139ca4dbcf94 Mon Sep 17 00:00:00 2001
From: jinglun-cloud <jinglun2019@foxmail.com>
Date: 星期三, 06 五月 2026 14:55:29 +0800
Subject: [PATCH] refactor(地图几何计算): 重构线段投影距离计算逻辑
---
src/main/webapp/static/js/basMap/mapTrackGeometry.js | 31 ++++++++++++++++++++++++++++++-
1 files changed, 30 insertions(+), 1 deletions(-)
diff --git a/src/main/webapp/static/js/basMap/mapTrackGeometry.js b/src/main/webapp/static/js/basMap/mapTrackGeometry.js
index 3c86fdb..2111957 100644
--- a/src/main/webapp/static/js/basMap/mapTrackGeometry.js
+++ b/src/main/webapp/static/js/basMap/mapTrackGeometry.js
@@ -586,6 +586,34 @@
return count === 2;
}
+ /**
+ * 璁$畻鐐� (sx,sy) 鍜� (mx,my) 鍦ㄧ洿绾挎 path0 涓婄殑甯︾鍙锋姇褰辫窛绂诲樊銆�
+ * 杩斿洖鍊� >0 琛ㄧず mx,my 鍦� sx,sy 鍓嶆柟锛堟部璺緞鏂瑰悜锛夈��
+ * @param {{ type: string, startX: number, startY: number, x: number, y: number }} path0 鐩寸嚎娈佃矾寰�
+ * @param {number} sx 璧风偣 x
+ * @param {number} sy 璧风偣 y
+ * @param {number} mx 缁堢偣 x
+ * @param {number} my 缁堢偣 y
+ * @returns {number|null} 甯︾鍙疯窛绂诲樊锛岄潪绾挎鎴栭浂闀垮害鏃惰繑鍥� null
+ */
+ function lineSignedRemainAlong(path0, sx, sy, mx, my) {
+ if (!path0 || path0.type !== 'line') {
+ return null;
+ }
+ var start = { x: path0.startX, y: path0.startY };
+ var end = { x: path0.x, y: path0.y };
+ var segLen = calcDistance(start, end);
+ if (!(segLen > 0)) {
+ return null;
+ }
+ var vector = normalizeVector(start, end);
+ var clampT = function (px, py) {
+ var t = ((px - start.x) * vector.x + (py - start.y) * vector.y) * segLen;
+ return Math.max(0, Math.min(segLen, t));
+ };
+ return clampT(mx, my) - clampT(sx, sy);
+ }
+
function setRadiusInPoint(pointList, sprite) {
sprite.halfList = [];
var pointLength = pointList.length;
@@ -1017,6 +1045,7 @@
startDrawSmoothedPath: startDrawSmoothedPath,
getRotate: getRotate,
drawCrnDeviceGraphics: drawCrnDeviceGraphics,
- drawRgvDeviceGraphics: drawRgvDeviceGraphics
+ drawRgvDeviceGraphics: drawRgvDeviceGraphics,
+ lineSignedRemainAlong: lineSignedRemainAlong
};
})(typeof window !== 'undefined' ? window : this);
--
Gitblit v1.9.1