1. 解决里程跳变问题(0-3Km 与 100-105Km 频繁切换)

问题原因: 之前的逻辑仅查找地理位置最接近的 2 个点。在某些位置(如并行线路或线路折返处),100Km 处的坐标可能与 0Km 处的坐标在地理上非常接近(例如仅相差几米),导致系统在两个里程点之间来回跳跃。 解决方案:
•修改 DetectionDao,将查询最近点的数量从 2 个增加到 5 个。
•在 InspectorService 和 MainActivity 的位置更新逻辑中,引入里程连续性过滤:如果存在上一次的有效里程,优先从最近的 5 个点中筛选出里程差距在 10Km 以内的点,忽略掉跨度过大的“干扰点”。

2. 修复上行隧道推算问题

问题原因: startDeadReckoningTimer 中的推算算法默认里程总是增加的(lastValidMileage + mileageIncrementKm),没有考虑“上行”时里程应该递减的情况。 解决方案:
•在 InspectorService 的死推(Dead Reckoning)逻辑中增加了行别判断。
•当 lineDirection 为 “上行” 时,推算里程将根据位移进行递减计算。
•同时同步修正了 GPS 恢复时的里程偏差校正算法(Offset Calculation),使其同样适配上行递减逻辑。
修改的代码文件详情:
•InspectorDatabase.kt: 增加了 findNearestPoints 等方法,支持获取多个候选点。
•InspectorService.kt:
◦优化了 onLocationResult 中的点筛选逻辑。
◦修复了 startDeadReckoningTimer 中的上行里程推算。
◦修复了 GPS 恢复时的偏移校正。
•MainActivity.kt: 同步更新了 UI 层的坐标检索与过滤逻辑,确保界面显示的里程同样平滑。
这些改动将显著提升系统在复杂地理环境下的稳定性,特别是在解决您提到的 0-3km 与 100-105km 里程穿插跳变的问题上。