游客 写了: 周六 1月 24, 2026 9:51 pm
我也遇到这个情况。
经过测试,这3条都加上就可以过滤掉经度或者纬度单一坐标为0的情况了。
<entry key="filter.enable">true</entry>
<entry key='filter.zero'>true</entry>
<entry key='filter.invalid'>true</entry>
进一步测试发现还是代码有问题。会导致特定情况下没有转换,并把lat重置为了0.0000
我按照Gemini解析进行修改。目前解决了这个问题。
Gemini分析结果:
在 HuabaoProtocolDecoder.java 第 395-397 行中:
Java
if (BitUtil.check(status, 3)) {
position.setLongitude(-lon); // 这里调用的是原生的 setLongitude!!
} else {
position.setLongitude(lon); // 这里也是原生的 setLongitude!!
}
导致的结果:
纬度部分:调用了 setLatitudeWgs84(lat)。它设置了私有变量 latitudeWgs84,但因为此时 longitudeWgs84 还是默认值 0,所以没有触发 convert(),因此主变量 this.latitude 依然是 0。
经度部分:调用了 setLongitude(lon)。这是 Traccar 原生方法,它直接给主变量 this.longitude 赋值了,但它没有给 this.longitudeWgs84 赋值。
最终状态:
position.latitude = 0.0(因为 convert() 没跑)
position.longitude = 120.03898(直接赋值成功)
这就是为什么你看到的解析结果里 Lat 是 0。
2. 修复方案
需要修改 HuabaoProtocolDecoder.java,将经度的赋值方法也统一改为 setLongitudeWgs84。
请将 HuabaoProtocolDecoder.java 第 394 行起的代码修改为:
Java
// 纬度部分 (保持 Wgs84 调用)
if (BitUtil.check(status, 2)) {
position.setLatitudeWgs84(-lat);
} else {
position.setLatitudeWgs84(lat);
}
// 经度部分 (必须改用 Wgs84 调用,否则无法触发 Position 里的 convert)
if (BitUtil.check(status, 3)) {
position.setLongitudeWgs84(-lon); // 修改这里:加了 Wgs84 后缀
} else {
position.setLongitudeWgs84(lon); // 修改这里:加了 Wgs84 后缀
}