/// <summary> /// 计算卫星的站心极坐标,指定了经纬度,更加精确,避免重复计算。 /// </summary> /// <param name="satXyz"></param> /// <param name="stationPosition"></param> /// <param name="unit">即表示输入角度的单位,也要求输出角度的单位</param> /// <param name="lat"></param> /// <param name="lon"></param> /// <returns></returns> public static Polar XyzToPolar(XYZ satXyz, XYZ stationPosition, double lon, double lat, AngleUnit unit = AngleUnit.Degree) { XYZ deltaXyz = satXyz - stationPosition;//地面到卫星的向径。 lon = Math.Abs(lon) < 1E-10 ? 0 : lon; NEU neu = XyzToNeu(deltaXyz, lat, lon, unit); return(NeuToPolar(neu, unit)); }
/// <summary> /// 站心坐标系到站心极坐标系。 /// </summary> /// <param name="neu"></param> /// <param name="unit">默认单位为度</param> /// <returns></returns> public static Polar NeuToPolar(NEU neu, AngleUnit unit = AngleUnit.Degree) { double r = neu.Length; double a = Math.Atan2(neu.E, neu.N); if (a < 0)//以北向为基准,顺时针,无负号 { a += 2.0 * CoordConsts.PI; } double o = Math.Asin(neu.U / r); if (unit != AngleUnit.Radian) { a = AngularConvert.RadTo(a, unit); o = AngularConvert.RadTo(o, unit); } return(new Polar(r, a, o) { Unit = unit }); }