轴承(方位角)和距离通过2 gps坐标(c#)

时间:2016-02-24 01:39:38

标签: math gps geolocation geometry geography

我试图找到北方的角度(方位角/方位角)& 2 gps坐标之间的距离。但显然我在某个地方犯了一个错误 - 它给了我错误的方位和距离值。如果我错了,请纠正我。在Unity 5中尝试它(c#)。 这是代码:

 public float pointX; 
 public float pointY; 
 public float lat1=55.500817f; 
 public float lat2=55.380680f; 
 public float lon1=37.568342f; 
 public float lon2=37.822586f; 
 public float azimuth;

 void Update () { 
 float dlon = lon2 - lon1; 
 float dlat = lat2 - lat1;

 pointX = Mathf.Sin(dlon* 0.01745329f)*Mathf.Cos(lat2* 0.01745329f); 
 pointY = Mathf.Cos (lat1* 0.01745329f) * Mathf.Sin (lat2* 0.01745329f) - Mathf.Sin (lat1* 0.01745329f) * Mathf.Cos (lat2* 0.01745329f) * Mathf.Cos (dlon*0.01745329f); 
    azimuth=Mathf.Atan2(pointX, pointY)*57.29578f;

 double distance = Math.Pow(Math.Sin(dlat/2*0.01745329),2.0)+(Math.Cos(lat1* 0.01745329)*Math.Cos(lat2* 0.01745329)* Math.Pow(Math.Sin(dlon/2* 0.01745329),2.0)); 
 distance = 2.0*6376500.0*Math.Atan2(Math.Sqrt(distance),Math.Sqrt(1.0-distance)); 

其中* 0.01745329f是从度数到弧度的转换,* 57.29578f是从弧度到度数的转换

2 个答案:

答案 0 :(得分:0)

让我们假设所有角度都已经转换为弧度,并使用Re作为地球的平均半径,我们将假设一个球形地球模型。对地球的椭圆形状有修正,但这会让你靠近。我将使用python风格的编码,因为我对C#一无所知。

#
#  North Distance of point 2 from point 1
#
dN = Re * dlat
#
#  East Distance of point 2 from point 1
#
dE = Re * dlon * cos(0.5 * (lat1 + lat2))
#
#  Distance between points
#
distance=math.sqrt(dN**2 + dE**2)
#
#  Azimuth to point 2 from point 1 in radians
#
azimuth=math.atan2(dE,dN)

答案 1 :(得分:0)

我复制了你的代码(到java),1:1 方位角代码中没有错误。

原因是使用Mathf(float)而不是double变量  或者你只是查看错误的数据或错误的输出。

作为中间值我得到:
pointx = 0.0025209875920285405,
pointy = -0.0020921620920549278,
方位角= 129.68