Python:计算两个纬度/经度之间的方位 [英] Python: Calculate bearing between two lat/long

查看:94
本文介绍了Python:计算两个纬度/经度之间的方位的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试计算两个纬度/经度之间的方位角.

I am attempting to calculate the bearing between two lat/long.

我对功能/公式本身没有疑问,

I don't have a question regarding the function/formula per se,

提供:

def get_bearing(lat1, long1, lat2, long2):
    dLon = (long2 - long1)

    y = math.sin(dLon) * math.cos(lat2)
    x = math.cos(lat1) * math.sin(lat2) - math.sin(lat1) * math.cos(lat2) * math.cos(dLon)

    brng = math.atan2(y, x)

    brng = np.rad2deg(brng)

    return brng

问题在于结果不是预期的.

the problem is that the result isn't what is expected.

该函数的预期用途返回(很长)列表中两个经纬度对之间的方位,即

The intended usage of the function returns the bearing between two lat/long pairs in a (very long) list i.e.

    lat1 = path[int(len(path) * location / 1000)][0]
    lat2 = path[int(len(path) * location / 1000) + 1][0]
    lng1 = path[int(len(path) * location / 1000)][1]
    lng2 = path[int(len(path) * location / 1000) + 1][1]

然后,方位角结果会更改图的视图方向,其中方位角可以采用[-180,180]范围内的值.理想情况下,结果应显示为使得lat1,lng1和lat2,lng2之间形成的线在图中完全垂直"(在图中切换了经纬度注释),请参见下文

The bearing result then alters the view orientation of the plot where bearing can assume a value in the range [-180, 180]. Ideally, the result would appear such that the line formed between lat1, lng1 and lat2, lng2 is perfectly "vertical" in the plot (lat/lon annotations are switched in plot), see below

我希望有人可以从函数返回的方位以及预期方位应该是什么来推断出问题.以下是一些实例:

I am hoping that someone might be able to deduce the problem from the bearing returned from the function and what the expected bearing should be. A few instances below:

Current Location: 30.07134 -97.23076
Next in path: 30.0709 -97.22907
Calculated Bearing: 88.39967863143139
Expected Bearing: ~-70.67

Current Location: 29.91581 -96.85068
Next in path: 29.91556 -96.85021
Calculated Bearing: 118.9170342272798
Expected Bearing: ~122.67

Current Location: 29.69419 -96.53487
Next in path: 29.69432 -96.53466
Calculated Bearing 141.0271357781952
Expected Bearing: ~56

Current Location: 29.77357 -96.07924
Next in path: 29.77349 -96.07876
Calculated Bearing 165.24612555483893
Expected Bearing: ~104

很高兴提供其他信息,在此先感谢您提供的所有帮助.

Happy to provide additional information, thanks in advance for any/all help.

推荐答案

最终更改了功能:

from geographiclib.geodesic import Geodesic
...
def get_bearing(lat1, lat2, long1, long2):
    brng = Geodesic.WGS84.Inverse(lat1, long1, lat2, long2)['azi1']
    return brng

这篇关于Python:计算两个纬度/经度之间的方位的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆