根据经纬度计算两个点之间的距离
代码直接放到utils目录下
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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))
-----------------------------------------------------------------------------------------------------------------------------------------