python 半正矢公式计算两GPS坐标距离

如题,直接上代码吧,需要的拿走。

# haversine公式计算两经纬度点距离
import math
import os
from DebugInfo.DebugInfo import *

_earthR: int = 6371393

class __距离类:
    __m: float

    def __init__(self,
                 m: float = 0):
        self.__m = m

    @property
    def km(self) -> float:
        return self.__m * 0.001

    @km.setter
    def km(self,: float):
        self.__m =* 1000

    @property
    def m(self) -> float:
        return self.__m

    @m.setter
    def m(self,: float):
        self.__m =@property
    def inch(self) -> float:
        return self.__m * 39.3700787402

    @inch.setter
    def inch(self,: float):
        self.__m =/ 39.3700787402

    @property
    def feet(self) -> float:
        return self.__m * 3.280839895

    @feet.setter
    def feet(self,: float):
        self.__m =/ 3.280839895

    @property
    def mi(self) -> float:
        return self.__m * 0.00062137119224

    @mi.setter
    def mi(self,: float):
        self.__m =/ 0.00062137119224

    def __float__(self) -> float:
        return self.__m

# 定义GPS距离解算函数
@秒表
def 球面距离m(基点纬度: float, 基点经度: float, 矢点纬度: float, 矢点经度: float) -> __距离类:
    """
    haversine公式计算两个经纬度坐标点的球面距离, 单位m
    https://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 * s

    h = _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坐标点距离

偏差说明

以上计算所用的GPS数据彩集自 高德开放API, 距离测量来自百度地图,由于不在一个平台上拾取的坐标点,这可能是导致GPS距离计算结果为 1071km, 而距离测试结果为1070km,存在1km的偏差。

insCode

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

团圆吧

1 分钱,求鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值