traccar6.11.1无坐标情况下有BUG

你好,我用大神你发布的windows版本搭建的平台,其中有一台设备在地下车库或无法获取GPS的情况下,但是火星坐标维度显示为0,经度是最后一次有限坐标。这种情况如何修复。已经使用了下面2个参数。在6.6版本时这样使用是正常的,最新的6.11版本出现了这个问题。
<!– 启用过滤 –>
<entry key=”filter.enable”>true</entry>
<!– 屏蔽0坐标 –>
<entry key=’filter.zero’>true</entry>

图片
图片

日志记录能搜到如下记录
, time: 2025-12-25 07:34:12, lat: 0.00000, lon: 117.86006, speed: 3.8, course: 112.0

请大佬帮忙看一下,谢谢。

原文作者: psrmszh | 查看原帖

此条目发表在技术交流分类目录。将固定链接加入收藏夹。

《traccar6.11.1无坐标情况下有BUG》有7条回应

  1. BG6RSH说:

    12月19日后更新的 Docker 镜像修复了这个错误,你可以重新拉取试一下,如果还有问题,麻烦将日志提交到这里。

  2. psrmszh说:

    感谢回复,由于我水平有限,只会在WINDOWS平台下部署,不会使用Docker镜像,能否在方便的时候搞一下其他的方法。感谢!

  3. BG6RSH说:

    到百度网盘https://pan.baidu.com/s/1tjp1crkXbrWxq4nM7vCA1A 提取码: ib6k下载traccar-other-6.11.1-amap.zip压缩包,替换traccar中的所有文件,重新启动一下服务就行了,注意先备份。

  4. Anonymous说:

    从网盘下载解压后,按照方法操作,仍然存在这里问题。GPS坐标都是0 火星坐标纬度是0 经度应该是最后一次有效坐标。

  5. Anonymous说:

    我也遇到这个情况。
    经过测试,这3条都加上就可以过滤掉经度或者纬度单一坐标为0的情况了。
    <entry key=”filter.enable”>true</entry>
    <entry key=’filter.zero’>true</entry>
    <entry key=’filter.invalid’>true</entry>

  6. Anonymous说:
    游客 写了: 周六 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 后缀
    }

  7. BG6RSH说:

    很高兴啊,总算有人参与一起维护了^_^。

    由于协议太多,我写了一段python代码来匹配各种协议中的坐标转换代码,这地方可能没有匹配到,下次更新时改正。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理。