本文主要是介绍python 半正矢公式计算两GPS坐标距离,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
如题,直接上代码吧,需要的拿走。
# haversine公式计算两经纬度点距离
import math
import os
from DebugInfo.DebugInfo import *_earthR: int = 6371393class __距离类:__m: floatdef __init__(self,m: float = 0):self.__m = m@propertydef km(self) -> float:return self.__m * 0.001@km.setterdef km(self, 值: float):self.__m = 值 * 1000@propertydef m(self) -> float:return self.__m@m.setterdef m(self, 值: float):self.__m = 值@propertydef inch(self) -> float:return self.__m * 39.3700787402@inch.setterdef inch(self, 值: float):self.__m = 值 / 39.3700787402@propertydef feet(self) -> float:return self.__m * 3.280839895@feet.setterdef feet(self, 值: float):self.__m = 值 / 3.280839895@propertydef mi(self) -> float:return self.__m * 0.00062137119224@mi.setterdef mi(self, 值: float):self.__m = 值 / 0.00062137119224def __float__(self) -> float:return self.__m# 定义GPS距离解算函数
@秒表
def 球面距离m(基点纬度: float, 基点经度: float, 矢点纬度: float, 矢点经度: float) -> __距离类:"""haversine公式计算两个经纬度坐标点的球面距离, 单位mhttps://blog.csdn.net/gaocuisheng/article/details/126060795:param 基点纬度: float:param 基点经度: float:param 矢点纬度: float:param 矢点经度: float:return: 距离类对象"""基点纬度 = math.radians(基点纬度)矢点纬度 = math.radians(矢点纬度)基点经度 = math.radians(基点经度)矢点经度 = math.radians(矢点经度)经度差 = math.fabs(基点经度 - 矢点经度)纬度差 = math.fabs(基点纬度 - 矢点纬度)def _hav(角差: float) -> float:s = math.sin(角差 / 2)return s * sh = _hav(纬度差) + math.cos(基点纬度) * math.cos(矢点纬度) * _hav(经度差)return __距离类(2 * _earthR * math.asin(math.sqrt(h)))if __name__ == '__main__':画板 = 调试模板()上海坐标 = (121.48, 31.20)北京坐标 = (116.40, 39.91)画板.添加一行('上海坐标', 上海坐标)画板.添加一行('北京坐标', 北京坐标)画板.添加一行('两地距离/球面距离m', 球面距离m(上海坐标[1], 上海坐标[0], 北京坐标[1], 北京坐标[0]).km)画板.添加一行('百度地图实测距离为:', '1070.30km').修饰行(黄字)画板.分隔线.总长度(os.get_terminal_size().columns - len(画板.缩进字符) - len(画板.打印头)).修饰(黄字).展示()画板.展示表格()
以上脚本运行如下:
偏差说明
以上计算所用的GPS数据彩集自 高德开放API, 距离测量来自百度地图,由于不在一个平台上拾取的坐标点,这可能是导致GPS距离计算结果为 1071km, 而距离测试结果为1070km,存在1km的偏差。
insCode
这篇关于python 半正矢公式计算两GPS坐标距离的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!