如何两个WGS84坐标之间计算方位角(角向北)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何两个WGS84坐标之间计算方位角(角向北)相关的知识,希望对你有一定的参考价值。

我有两个WGS84坐标,经度和纬度度。这些点而靠近在一起,例如仅相距一米。

有一种简单的方法来计算这些点之间的连线的方位角,即,角度向北?

天真的方法是假设一个直角坐标系(因为这些点是如此接近),只使用

年龄(A)= ABS(填充-1的)/ Saqra中(Falcon(填充-1的)+萨克尔(B-1的负担))

一个方位角= L1,L2 =经度B1,B2 =纬度

误差会较大的坐标从赤道移开,因为有两个纵向度之间的距离变得比2纬度度之间的一个(其保持恒定)越来越小。

我发现了一些相当复杂的公式,我真的不希望实现,因为他们似乎是大材小用为是并拢的点,我并不需要很高的精度(小数点后两位是不够的,一个可能是罚款或者因为是降低精度无论如何,如一个GPS的退货)的其它因素。

也许我可能只是确定大致纵向校正因子取决于纬度和使用财产以后这样的:

罪的(a)= ABS(L2 * F-L1 * F)/ SQRT(SQR(L2 * F-L1 * F)+ SQR(B2-B1))

其中,f是所述校正因子

任何提示?

(我不想用这个的库,特别是没有那些需要运行许可证。任何MPLed Delphi源将是巨大的。)

答案

您参考文本中的公式来计算2点之间的大圆距离。下面是如何计算点之间的角度:

uses Math, ...;
...

const
  cNO_ANGLE=-999;

...

function getAngleBetweenPoints(X1,Y1,X2,Y2:double):double;
var
  dx,dy:double;
begin
  dx := X2 - X1;
  dy := Y2 - Y1;

  if (dx > 0) then  result := (Pi*0.5) - ArcTan(dy/dx)   else
  if (dx < 0) then  result := (Pi*1.5) - ArcTan(dy/dx)   else
  if (dy > 0) then  result := 0                          else
  if (dy < 0) then  result := Pi                         else
                    result := cNO_ANGLE; // the 2 points are equal

  result := RadToDeg(result);
end;
  • 请记住,处理情况2点相等的情况(检查结果等于cNO_ANGLE或修改抛出一个异常的功能);
  • 此函数假定你是在一个平面上。根据您所提到的这一切都是好的,但如果你要来计算城市间的方位世界各地,你可能要考虑一些需要在数地球的形状小的距离;
  • 这是最好的提供这个功能与已经映射到一个平面上的坐标。您可以直接供给WGS84纬度为Y(和LON成X),以获得一个粗略的估计,但。
另一答案

下面是C#的解决方案。测试0,45,90,135,180,225,270和315的角度。

编辑我代替我以前丑陋的解决方案,由沃特的解决方案的C#编译:

public double GetAzimuth(LatLng destination)
{
    var longitudinalDifference = destination.Lng - this.Lng;
    var latitudinalDifference = destination.Lat - this.Lat;
    var azimuth = (Math.PI * .5d) - Math.Atan(latitudinalDifference / longitudinalDifference);
    if (longitudinalDifference > 0) return azimuth;
    else if (longitudinalDifference < 0) return azimuth + Math.PI;
    else if (latitudinalDifference < 0) return Math.PI;
    return 0d;
}

public double GetDegreesAzimuth(LatLng destination)
{
    return RadiansToDegreesConversionFactor * GetAzimuth(destination);
}
另一答案

我发现这个链接

http://williams.best.vwh.net/avform.htm

在回答给定

Lat/Lon + Distance + Heading --> Lat/Lon

这看起来很有希望,特别是临近年底给出的扁平地球近似。

另一答案

这将只能用于小的差异。否则,你不能只是“latitudinalDifference / longitudinalDifference”。

另一答案

我会建议实施基于经度的修正系数。我实现了一个simular例行一次的某个特定位置的X英里内返回所有的地理编码记录,跑进simular问题。不幸的是我没有代码了,而且似乎无法记得我是如何走到修正序号,但你是在正确的轨道上。

另一答案

有没有人测试过这个?它不返回正确的答案

此函数假定你是在一个平面上。根据您所提到的这一切都是好的,但如果你要来计算城市间的方位世界各地,你可能要考虑一些需要在数地球的形状小的距离;

您地平有一点做与此有关。该错误,因为你怎么称呼它,是因为你正在计算从点的初始方位。除非你是直奔一极,你极关系将随距离而改变。无论如何,上述程序不返回正确的结果。

以上是关于如何两个WGS84坐标之间计算方位角(角向北)的主要内容,如果未能解决你的问题,请参考以下文章

怎么算经纬度和距离呢?

怎样用ARCGIS把wgs84坐标转成cgcs2000坐标?

如何wgs84与当地坐标之间的转换参数

WGS84坐标、WGS72坐标、54坐标、80坐标的区别

如何将WGS84-Web坐标转换为WGS84-UTM坐标

火星坐标百度坐标WGS84坐标转换代码(JS版)