【问题标题】:Convert Integer to Lat long geo position将整数转换为纬度多头地理位置
【发布时间】:2016-04-08 18:38:17
【问题描述】:

我有跟踪 teltonika GPS 跟踪器的 python 脚本。 GPS数据被解析为整数,如 514511623、2201796 因此,对 10000000 的划分给了我经纬度。但是当跟踪器通过伦敦坐标时,就像这样 516631273、4293416810 所以部门给了我错误的经度。知道如何正确转换它

【问题讨论】:

    标签: python gps coordinates gis tracker


    【解决方案1】:

    我不熟悉 teltonika GPS 追踪器。但似乎你得到的经度数与负整数有关。该位置非常靠近经度为 0 的格林威治。一开始是 0.22... 经度。然后,它去了负经度区。但 GPS 接收器只处理正整数。假设它使用 32 位无符号整数,则最大 inter 为 2**32 = 4294967296 如果从 4293416810 中减去该数字

    4293416810 - 4294967296 = -1550486
    -1550486/1e7 = -0.1550486 longitude
    

    所以当您靠近格林威治时,经度从 0.2201796 变为 -0.1550486。

    【讨论】:

      【解决方案2】:

      在使用 javascript 代码时,我在使用 teltonika 设备时遇到了同样的问题。这是我与teltonika技术团队讨论后的解决方案,希望您能将其转换为python。

      注意:这里不需要加负号,因为我们是用较小的值减去较大的值

      修复 teltonika 设备的纬度问题

      
      // NOTE: lat and lon should be a valid hex of 4 bytes each.
      function fixLatLon(num) {
          let maxVal = Math.pow(2, 32-1);
          if (num > maxVal) num = maxVal - num
          return num;
      }
      

      通用解决方案

      以下是将任意长度的hex 转换为相应的lat lon 的通用解决方案。

      请注意,此通用解决方案将其除以 1e7 并为您提供最终可用的纬度、经度

      function getTeltonikaLatLonFromHex(hexString) {
          if (hexString.length % 2 != 0) hexString = "0" + hexString;
          let num = parseInt(hexString, 16);
          let maxVal = Math.pow(2, hexString.length / 2 * 8 - 1);
          if (num > maxVal) num = maxVal - num;
          return num / 1e7;
      }
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-28
        • 1970-01-01
        • 2019-11-19
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多