Python实现给定两点经纬度数据求解两点平面直线距离与方位角

       在GIS开发过程中,空间直角坐标系与求坐标系内的点坐标互相转化是很经常的事情,比如:给你两个点以及这两个点各自的经纬度数据,需要求解给定两点在空间坐标系内的直线距离以及两点之间的方位角,方位角就是从正北方向顺时针旋转到两点连线位置处的夹角值;又或者,给定你一点的经纬度数据以及另一点与该点的方位角和直线距离值,求解另一点所处位置的经纬度数据,等等,这样的转化求解需求还有很多。

       今天,正好有一个小的需求就是:给你两个点以及这两个点各自的经纬度数据,需要求解给定两点在空间坐标系内的直线距离以及两点之间的方位角。这里基于Python实现了当前的需求,记录一下。

     实现的思想是很简单的,具体实现如下:

def geoDistance(lng1,lat1,lng2,lat2):
    '''
    公式计算两点间距离(m)
    '''
    #经纬度转换成弧度
    lng1,lat1,lng2,lat2=map(radians,[float(lng1),float(lat1),float(lng2),float(lat2)]) 
    dlon=lng2-lng1
    dlat=lat2-lat1
    a=sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2 
    distance=2*asin(sqrt(a))*6371*1000   # 地球平均半径,6371km
    distance=round(distance,3)
    return distance


def geoDegree(lng1,lat1,lng2,lat2):
    '''
    公式计算两点间方位角
    方位角:是与正北方向、顺时针之间的夹角
    '''
    lng1,lat1,lng2,lat2=map(radians,[float(lng1),float(lat1),float(lng2),float(lat2)]) 
    dlon=lng2-lng1
    y=sin(dlon)*cos(lat2)
    x=cos(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(dlon)
    brng=degrees(atan2(y,x))
    brng=(brng+360)%360
    return brng

       接下来在地图上选择两点来进行实验,具体如下:

lat1,lon1=[35.290352,115.494621]
lat2,lon2=[35.2001683095097,115.38481076966019]
print('distance: ',geoDistance(lon1,lat1,lon2,lat2))
print('degree: ',geoDegree(lon1,lat1,lon2,lat2))

       结果如下:

('distance: ', 14142.205)
('degree: ', 224.87151378652962)

        结果几乎是十分地准确了哈,记录一下!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Together_CZ

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值