Math 通过2个gps坐标(c#)的方位(方位)和距离

Math 通过2个gps坐标(c#)的方位(方位)和距离,math,gps,geolocation,geometry,geography,Math,Gps,Geolocation,Geometry,Geography,我试图找到两个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

我试图找到两个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是从弧度到度的转换,让我们假设所有角度都已转换为弧度,并使用Re作为地球的平均半径,我们将假设一个球形地球模型。地球的椭球形状是有修正的,但这会让你接近。我将使用python风格的编码,因为我对C#一无所知

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

原因之一是使用了Mathf(float)而不是双变量 或者你只是看到错误的数据或错误的输出

作为中间值,我得到:
pointx=0.0025209875920285405,
pointy=-0.00209216209278,

方位角=129.68

计算值有什么问题?方位角公式在这里看起来像正确的:可能是,一些+-Pi错误?为什么不发布输入值和错误的输出值?您得到的结果是什么?您期望的结果是什么?为了更好的可读性,请更换0.0174。。一个叫做toRad的常数。与toDegit相同,它给我方位角=41.6446,距离=97.2321767148383,值为salexwien抱歉,它给我方位角=41.6446,距离=97.2321767148383,输入值为public float lat1=55.500817f;公共浮子lat2=55.380680f;公共浮点数1=37.568342f;公共浮点数lon2=37.822586f;实际距离约为20800度,方位角约为120度。我尝试不同的输入值,但输出值没有变化谢谢!什么是双星号?我不知道这意味着权力2,一个人也可以写dN*dN,这在所有程序中都有效。语言。
#
#  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)