已知球面经纬度求方位角和反方位角(awk一行代码实现)

Posted Philbert

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了已知球面经纬度求方位角和反方位角(awk一行代码实现)相关的知识,希望对你有一定的参考价值。

根据球面三角形,已知球面两点经纬度,计算求方位角(awk一行代码实现)

已知球面经纬度求方位角和距离


一个常见的错误

假如你在广州,先朝东北走2000km,然后朝西南走2000km,你不会回到起点,而是到达深圳或者东莞。
这是因为地球是一个球面,方位角和反方位角加起来并不是360度。所以要朝着南偏西约49度的方向走2000km才能回到原点。


原理

球面上两点和北极点组成球面三角形,黎曼几何告诉我们,这个三角形内角和大于180度。而且起点到终点的方位角和终点到起点的方位角只和也不是180度。
已知球面的起点(lon1,lat1)和终点(lon2,lat2),求他们的方位角azi的公式是:
cos(azi)=sin(lon1-lon2)cos(lat2)/(cos(lat1)sin(lat2)-sin(lat1)cos(lat2)cos(lon1-lon2))


awk一行代码实现求起点到终点的方位角

#以下代码输入经纬度单位是度,输出方位角的单位也是度
echo $lon1 $lat1 $lon2 $lat2 | awk \'
  b1=$2*0.017453; 
  b2=$4*0.017453; 
  da=($3-$1)*0.017453; 
  y=sin(da)*cos(b2); 
  x=cos(b1)*sin(b2)-sin(b1)*cos(b2)*cos(da); 
  az=(atan2(y,x)/0.017453+360)%360; 
  print "Azimuth from (",$1,$2,") to (",$3,$4,") is",az," deg."\' | cat

求反方位角时,把起点重点的位置互换即可。

以上是关于已知球面经纬度求方位角和反方位角(awk一行代码实现)的主要内容,如果未能解决你的问题,请参考以下文章

已知一点经纬度和距离,方位角;求另外一点的经纬度

使用经纬度直接计算距离与方位角

知道太阳和月亮的中天高度以后,怎么计算日出日落,月出月落的方位

关于已知两点经纬度求球面最短距离的公式推导

python实现两个经纬度点之间的距离和方位角

计算经纬度距离方位角