【发布时间】:2021-04-07 01:42:27
【问题描述】:
我买了一个便宜的 ublox7 GPS 加密狗并将其粘贴在我的树莓派 3 上。当我查看输出并尝试将其粘贴到地图程序中时,我得到了奇怪的结果。这是使用名为“pynmea2”的库解析后设备的一些示例输出。
$GPGLL,3745.81303,N,12214.62049,W,175033.00,A,D*7C
我对如何将此输出转换为有用的东西进行了一些研究,并找到了一个公式,该公式涉及将数字除以 0.6。
Doing GPS Conversion – Degrees to Latitude Longitude and vice versa
所以我编写了一个 python 程序来尝试捕获和转换所有这些,并且输出相差一英里。我正试图弄清楚我做错了什么,我怎么会离得这么近,但仍然离我大约一英里?
from time import sleep
import pynmea2
import serial
import re
degree_sign = u"\N{DEGREE SIGN}"
ser = serial.Serial('/dev/ttyACM0', 9600, timeout=1.0)
sio = io.TextIOWrapper(io.BufferedRWPair(ser, ser))
while True:
line = sio.readline()
msg = pynmea2.parse(line)
msg = str(msg)
if re.search("GPGLL", msg):
raw_nums = re.findall(r'\b\d*\.\d*', msg)
lat_whole = (raw_nums[0])
lat_part1 = lat_whole[0:2]
lat_part2 = lat_whole[2:4]
lat_part2 = int(lat_part2)
lat_part2 = lat_part2 / .6
lat_part2 = int(lat_part2)
lat_part2 = str(lat_part2)
lat_part3 = lat_whole[5:9]
lat_part3 = float(lat_part3)
lat_part3 = lat_part3 / .6
lat_part3 = round(lat_part3, 0)
lat_part3 = int(lat_part3)
lat_part3 = str(lat_part3)
lon_whole = raw_nums[1]
lon_part1 = lon_whole[0:3]
lon_part1 = int(lon_part1)
lon_part1 = -lon_part1
lon_part1 = str(lon_part1)
lon_part2 = lon_whole[3:5]
lon_part2 = int(lon_part2)
lon_part2 = lon_part2 / .6
lon_part2 = str(lon_part2)
lon_part2 = lon_part2[0:2]
lon_part3 = lon_whole[6:10]
lon_part3 = float(lon_part3)
lon_part3 = lon_part3 / .6
lon_part3 = round(lon_part3, 0)
lon_part3 = int(lon_part3)
lon_part3 = str(lon_part3)
print(lat_part1 + "." + lat_part2 + lat_part3 +"," , lon_part1 + "." + lon_part2 + lon_part3)
print(lat_part1+degree_sign+lat_part2+"'"+lat_part3+"\"" + "N", lon_part1 + degree_sign+ lon_part2 + "'" + lon_part3+"\"" + "W")
sleep(1)
这里是正则表达式使用 pynmea2 输出生成的列表:
['3745.81246', '12214.61512', '224329.00'] 分配给 raw_nums。
脚本的输出:
37.7513540, -122.2310268
37°75'13540"N -122°23'10268"W
将输出的第一个位输入到谷歌地图会显示一个离我很近但大约一英里外的地方,第二个数字由于某种原因在谷歌地图上不起作用 - 但它在苹果地图上起作用。
我的问题:
- 我知道至少有 100 种更好的方法来编写这段代码,你有什么建议可以更快地到达那里吗?
- 这个公式有意义吗?我是否正确应用它?
- 您是否明白为什么这应该返回接近但没有雪茄的结果?
- 你知道为什么第二行输出不能作为谷歌地图的输入吗?
- 我以 12 美元从亚马逊购买的 ublox 7 GPS 加密狗的准确度应该是多少?
在此先感谢,我真的很感激。
更新:我在gps coordinates conversion 上查找了我的地址 他们为我的地址显示的纬度是 3745.50084,而我的 gps 报告的是 3745.81246。所以看起来我是从糟糕的数据开始的......
【问题讨论】: