根据经纬度计算两个点之间的距离

代码直接放到utils目录下

from haversine import haversine
from math import sin, asin, cos, radians, fabs, sqrt


def hav(theta):
    """sin方"""
    s = sin(theta / 2)
    return s * s

def get_dis_by_haversine(lon_lat_first, lon_lat_second):
    """
        获取经纬度方式一
        参数:经度 纬度
    """
    lon_lat_first = (lon_lat_first[1], lon_lat_first[0])
    lon_lat_second = (lon_lat_second[1], lon_lat_second[0])
    dis = haversine(lon_lat_first, lon_lat_second)
    return dis * 1000


def get_distance_by_hav(lon_lat_first, lon_lat_second):
    """
        获取经纬度方式二
        参数:经度 纬度
    """
    EARTH_RADIUS = 6371  # 地球平均半径,6371km
    lng0 = lon_lat_first[0]
    lat0 = lon_lat_first[1]
    lng1 = lon_lat_second[0]
    lat1 = lon_lat_second[1]
    """纬度 经度 """
    """用haversine公式计算球面两点间的距离。"""
    # 经纬度转换成弧度
    lat0 = radians(lat0)
    lat1 = radians(lat1)
    lng0 = radians(lng0)
    lng1 = radians(lng1)
    dlng = fabs(lng0 - lng1)
    dlat = fabs(lat0 - lat1)
    h = hav(dlat) + cos(lat0) * cos(lat1) * hav(dlng)
    distance = 2 * EARTH_RADIUS * asin(sqrt(h))
    return distance * 1000


if __name__ == '__main__':
    """
        说明:直接导入两个函数, 用哪个都可以
        传参:两个元组
        格式(经度,纬度),(经度,纬度)
    """

    # 输入的格式:经度,纬度
    # 这两个测试点不要动
    lon_lat_first = (113.0612727, 23.0475255)
    lon_lat_second = (113.0612206, 23.0474695)
    print(get_dis_by_haversine(lon_lat_first, lon_lat_second))
    print(get_distance_by_hav(lon_lat_first, lon_lat_second))
View Code

 

posted @ 2022-05-09 15:43    阅读(59)  评论(0编辑  收藏  举报