我试图找到北方的角度(方位角/方位角)& 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是从弧度到度数的转换
答案 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