Python实现经纬度坐标距离与方位角计算
本文介绍利用Python计算设备经纬度坐标间距离及角度的方法。通过引入地球椭球参数,实现高精度距离与方位角算法,并提供完整代码示例。经深圳野生动物园至坪山站实测,计算结果与百度、Google地图测距基本一致,验证了算法的有效性。
Python经纬度坐标转换概述
近期项目中遇到一项需求,需根据设备提供的经纬度坐标计算两点间的距离及相对角度。经测试验证,该方案效果良好,现整理分享。
距离计算代码实现
一、经纬度距离计算代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'Seven'
import math
# 计算距离
def getDistance(latA, lonA, latB, lonB):
ra = 6378140 # 赤道半径
rb = 6356755 # 极半径
flatten = (ra - rb) / ra # Partial rate of the earth
# change angle to radians
radLatA = math.radians(latA)
radLonA = math.radians(lonA)
radLatB = math.radians(latB)
radLonB = math.radians(lonB)
pA = math.atan(rb / ra * math.tan(radLatA))
pB = math.atan(rb / ra * math.tan(radLatB))
x = math.acos(math.sin(pA) * math.sin(pB) + math.cos(pA) * math.cos(pB) * math.cos(radLonA - radLonB))
c1 = (math.sin(x) - x) * (math.sin(pA) + math.sin(pB)) ** 2 / math.cos(x / 2) ** 2
c2 = (math.sin(x) + x) * (math.sin(pA) - math.sin(pB)) ** 2 / math.sin(x / 2) ** 2
dr = flatten / 8 * (c1 - c2)
distance = ra * (x + dr)
distance = round(distance / 1000, 4)
return f'{distance}km'
角度计算代码实现
二、经纬度角度计算代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'Seven'
import math
# 计算角度
def getDegree(latA, lonA, latB, lonB):
radLatA = math.radians(latA)
radLonA = math.radians(lonA)
radLatB = math.radians(latB)
radLonB = math.radians(lonB)
dLon = radLonB - radLonA
y = math.sin(dLon) * math.cos(radLatB)
x = math.cos(radLatA) * math.sin(radLatB) - math.sin(radLatA) * math.cos(radLatB) * math.cos(dLon)
brng = math.degrees(math.atan2(y, x))
brng = round((brng + 360) % 360, 4)
brng = int(brng)
if (brng == 0.0) or ((brng == 360.0)):
return '正北方向'
elif brng == 90.0:
return '正东方向'
elif brng == 180.0:
return '正南方向'
elif brng == 270.0:
return '正西方向'
elif 0 < brng < 90:
return f'北偏东{brng}'
elif 90 < brng < 180:
return f'东偏南{brng - 90}'
elif 180 < brng < 270:
return f'西偏南{270 - brng}'
elif 270 < brng < 360:
return f'北偏西{brng - 270}'
else:
pass
实际案例验证
三、效果验证
选取深圳野生动物园(坐标:22.599578, 113.973129)作为起点,深圳坪山站(坐标:22.6986848, 114.3311032)作为终点,结合百度地图与谷歌地图进行对比验证。
程序运行输出结果如下:

百度地图测距显示为38.3km
谷歌地图手动测距显示为39.31km

计算得出的距离与角度均符合预期,无异常。
以上就是关于Python经纬度坐标转换为距离及角度的实现方法,更多相关技术内容可搜索本站往期文章或关注后续更新,感谢支持。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













