计算已知经纬度两点的距离_python

计算经纬度点之间的距离有三种方法,一种是利用geopy计算;一种是利用haversine公式计算;还可以直接在Excel中计算。

1.直接利用Python第三方库:geopy

代码:

from geopy.distance import geodesic
dist = geodesic((37.193462, 100.1347), (37.194363, 100.1348)).km  
print(dist)

更新:利用geopy计算距离

官网资料:https://www.osgeo.cn/geopy/#module-geopy.distance

Geopy可以用 geodesic distance 或 great-circle distance ,默认测地线距离作为函数 geopy.distance.distance .

classgeopy.distance.geodesic(*args, **kwargs)

用于计算两点间的测地线距离。

参考资料:
https://blog.csdn.net/study_in/article/details/86136504

2.半正矢公式(haversine equation)用于计算两经纬度点的距离
在这里插入图片描述
https://www.geeksforgeeks.org/haversine-formula-to-find-distance-between-two-points-on-a-sphere/

具体代码:

import math
# Python 3 program for the
# haversine formula
def haversine(lat1, lon1, lat2, lon2):
     
    # distance between latitudes
    # and longitudes
    dLat = (lat2 - lat1) * math.pi / 180.0
    dLon = (lon2 - lon1) * math.pi / 180.0
 
    # convert to radians
    lat1 = (lat1) * math.pi / 180.0
    lat2 = (lat2) * math.pi / 180.0
 
    # apply formulae
    a = (pow(math.sin(dLat / 2), 2) +
         pow(math.sin(dLon / 2), 2) *
             math.cos(lat1) * math.cos(lat2));
    rad = 6371
    c = 2 * math.asin(math.sqrt(a))
    return rad * c

# Driver code
if __name__ == "__main__":
    lat1 = 35.289448
    lon1 = 79.79672
    lat2 = 35.290348
    lon2 = 79.796616
     
    print(haversine(lat1, lon1,lat2, lon2), "K.M.")

3.在Excel中计算经纬度两点的距离
http://blog.sciencenet.cn/blog-1094854-1025358.html

计算A(lonA,latA),B(lonB,latB)两点的距离:
公式1:

输入公式=6371004*ACOS(1-(POWER((SIN((90-latA)*PI()/180)*COS(lonA*PI()/180)-SIN((90-latB)*PI()/180)*COS(lonB*PI()/180)),2)+POWER((SIN((90-latA)*PI()/180)*SIN(lonA*PI()/180)-SIN((90-latB)*PI()/180)*SIN(lonB*PI()/180)),2)+POWER((COS((90-latA)*PI()/180)-COS((90-latB)*PI()/180)),2))/2)

:公式2:

输入公式=6371004*ACOS((SIN(RADIANS(latA))*SIN(RADIANS(latB))+COS(RADIANS(latA))*COS(RADIANS(latB))*COS(RADIANS(lonB-lonA))))

4.三种方法计算结果对比
在这里插入图片描述
Excel中计算的结果(公式2):
100.5196888m

更新于2021-06-02

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值