编写一个程序,可以输入一个经纬度信息,然后选择一个nmea文件与其对比,输出水平位置误差
时间: 2024-03-21 09:40:58 浏览: 65
以下是一个实现输入经纬度信息和选择nmea文件的Python程序,并计算水平位置误差的示例代码:
```python
import pynmea2
from math import radians, cos, sin, asin, sqrt
# 定义计算两点间距离的函数
def haversine(lon1, lat1, lon2, lat2):
"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
"""
# 将十进制度数转化为弧度
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
# haversine公式
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * asin(sqrt(a))
r = 6371 # 地球平均半径,单位为公里
return c * r * 1000
# 输入经纬度信息
lon1 = float(input("请输入经度:"))
lat1 = float(input("请输入纬度:"))
# 选择nmea文件
nmea_file = input("请选择要对比的nmea文件路径:")
# 读取nmea文件,计算水平位置误差
with open(nmea_file, 'r') as f:
error_list = []
for line in f:
if line.startswith('$GPGGA'):
msg = pynmea2.parse(line)
lon2 = msg.longitude
lat2 = msg.latitude
error = haversine(lon1, lat1, lon2, lat2)
error_list.append(error)
if len(error_list) > 0:
horizontal_error = min(error_list)
print("水平位置误差为:{} 米".format(horizontal_error))
else:
print("nmea文件中没有定位数据!")
```
程序首先使用haversine公式计算两点间的距离,然后读取nmea文件,解析其中的定位数据,计算每个定位点与输入的经纬度信息的水平位置误差,最后输出最小的误差值。
阅读全文