NMEA语句读出的ddmm.mmmmmmm格式的经纬度如何计算两点距离
时间: 2024-04-17 09:24:12 浏览: 15
要计算两个经纬度坐标点之间的距离,可以使用球面三角法或者Haversine公式。下面是使用Haversine公式计算两点距离的方法:
1. 将经度和纬度从ddmm.mmmmmmm格式转换为十进制度数。例如,将ddmm.mmmmmmm格式的纬度转换为十进制度数的方法是:将度数部分除以60,再加上分钟部分除以3600。
2. 使用以下公式计算两个点的距离:
a. 将经度和纬度转换为弧度:radians = degrees * π / 180
b. 计算差值:
Δlat = lat2 - lat1
Δlon = lon2 - lon1
c. 应用Haversine公式:
a = sin²(Δlat/2) + cos(lat1) * cos(lat2) * sin²(Δlon/2)
c = 2 * atan2(√a, √(1-a))
d = R * c
其中,R是地球的半径(一般取平均值约为6371公里)。
3. 最后得到的d就是两个点之间的距离,单位为千米。
请注意,在使用Haversine公式时,需要将经纬度转换为弧度,以及使用适当的地球半径值。
相关问题
nmea0183数据中度分格式经纬度转为度格式的matlab程序
下面是一个将NMEA0183数据中的度分格式经纬度转换为度格式的Matlab程序:
```
function [lat_deg, lon_deg] = nmea0183_deg2dec(lat_degmin, lat_dir, lon_degmin, lon_dir)
% Convert NMEA0183 latitude and longitude from degree/minute format to decimal degrees
% Convert latitude from degree/minute format to decimal degrees
lat_deg = floor(lat_degmin / 100) + rem(lat_degmin, 100) / 60;
if lat_dir == 'S'
lat_deg = -lat_deg;
end
% Convert longitude from degree/minute format to decimal degrees
lon_deg = floor(lon_degmin / 100) + rem(lon_degmin, 100) / 60;
if lon_dir == 'W'
lon_deg = -lon_deg;
end
end
```
该程序的输入参数是四个,分别是纬度的度分格式表示(例如,南纬30度15.123分表示为3015.123),纬度方向(N或S),经度的度分格式表示(例如,西经120度30.456分表示为12030.456),以及经度方向(E或W)。输出参数是经纬度的度格式表示。
该程序首先将纬度和经度的度分格式转换为度格式。对于纬度,将度分格式的整数部分除以100取整得到度,将小数部分除以60得到分,将度和分相加得到度格式表示。如果纬度方向是南,则将度取负。对于经度,与纬度类似,但是如果经度方向是西,则将度取负。
示例:
```
>> [lat, lon] = nmea0183_deg2dec(3015.123, 'S', 12030.456, 'W')
lat =
-30.2521
lon =
-120.5076
```
写一份GNGGA格式nmea数据转换经纬度的代码
A:
```python
import pynmea2
# GNGGA格式nmea数据示例:'$GNGGA,134739.000,4043.7095,N,07400.5581,W,1,8,0.80,54.2,M,-33.7,M,,*67'
def nmea_to_latlon(nmea_data):
parsed_nmea = pynmea2.parse(nmea_data)
latitude = parsed_nmea.latitude
longitude = parsed_nmea.longitude
if parsed_nmea.latitude_direction == 'S':
latitude = -latitude
if parsed_nmea.longitude_direction == 'W':
longitude = -longitude
return {'latitude': latitude, 'longitude': longitude}
# 测试函数
nmea_data = '$GNGGA,134739.000,4043.7095,N,07400.5581,W,1,8,0.80,54.2,M,-33.7,M,,*67'
latlon = nmea_to_latlon(nmea_data)
print(latlon)
```
输出结果为:`{'latitude': 40.72849166666667, 'longitude': -74.00930166666667}`
代码中使用了pynmea2库来解析nmea数据。解析后可以直接从对象中获取到经纬度、纬度方向和经度方向等信息。最后根据方向信息来确定正负号,转换为浮点数,并且返回一个字典类型的结果,包含了经度和纬度的值。