将整数转换为经纬度地理位置
Convert Integer to Lat long geo position
我有 python 跟踪 teltonika GPS 跟踪器的脚本。 GPS 数据被解析为整数
514511623、2201796
所以除法到 10000000 给了我经纬度。但是当跟踪器通过伦敦坐标是这样的
516631273、4293416810 所以部门给我错误的经度。知道如何正确转换它
我不熟悉 teltonika GPS 追踪器。但似乎你得到的经度数与负整数有关。位置离经度0的格林威治很近,一开始是0.22……经度。然后,它去了负经区。但 GPS 接收器只处理正整数。假设它使用 32 位无符号整数,最大 inter 是 2**32 = 4294967296
如果从 4293416810
中减去该数字
4293416810 - 4294967296 = -1550486
-1550486/1e7 = -0.1550486 longitude
所以当你靠近格林威治时,经度从 0.2201796 变为 -0.1550486。
我在使用 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;
}
我有 python 跟踪 teltonika GPS 跟踪器的脚本。 GPS 数据被解析为整数 514511623、2201796 所以除法到 10000000 给了我经纬度。但是当跟踪器通过伦敦坐标是这样的 516631273、4293416810 所以部门给我错误的经度。知道如何正确转换它
我不熟悉 teltonika GPS 追踪器。但似乎你得到的经度数与负整数有关。位置离经度0的格林威治很近,一开始是0.22……经度。然后,它去了负经区。但 GPS 接收器只处理正整数。假设它使用 32 位无符号整数,最大 inter 是 2**32 = 4294967296 如果从 4293416810
中减去该数字4293416810 - 4294967296 = -1550486
-1550486/1e7 = -0.1550486 longitude
所以当你靠近格林威治时,经度从 0.2201796 变为 -0.1550486。
我在使用 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;
}