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