/// <summary> /// 计算 测站-卫星 方向的距离。 /// </summary> /// <param name="neuCorrection">测站改正 NEU</param> /// <param name="receiverXyz">测站坐标</param> /// <param name="satXyz">卫星坐标</param> /// <returns></returns> public static double GetDirectionLength(NEU neuCorrection, XYZ receiverXyz, XYZ satXyz) { XYZ ray = (satXyz - receiverXyz); GeoCoord geoCoord = CoordTransformer.XyzToGeoCoord(receiverXyz); //此处修改为 NEU 坐标系。Rotate vector ray to UEN reference frame NEU rayNeu = CoordTransformer.XyzToNeu(ray, geoCoord, AngleUnit.Degree); NEU directionUnit = rayNeu.UnitNeuVector();//方向向量 //计算沿着射线方向的改正数。Compute corrections = displacement vectors components along ray direction. double rangeCorretion = neuCorrection.Dot(directionUnit); return(rangeCorretion); }
/// <summary> /// 站心坐标系到地心坐标系 /// </summary> /// <param name="sat"> 站心坐标系,如卫星,天线</param> /// <param name="siteCoord">坐标原点在地心坐标系中的坐标</param> /// <returns></returns> public static XYZ NeuToXyz(NEU sat, GeoCoord siteCoord) { XYZ siteXyz = CoordTransformer.GeoCoordToXyz(siteCoord); return(EnuToXyz(sat.ENU, siteXyz)); }
/// <summary> /// 计算卫星的站心极坐标,全程 度 为单位,此比XYZ更精确,推荐。!!2017.10.12 /// </summary> /// <param name="satXyz">卫星的地心空间直角坐标</param> /// <param name="stationGeoCoord">测站的地心大地坐标或球坐标,不同坐标对应不同的高度角</param> /// <returns></returns> public static Polar XyzToPolar(XYZ satXyz, GeoCoord stationGeoCoord) { var staXyz = CoordTransformer.GeoCoordToXyz(stationGeoCoord); return(XyzToPolar(satXyz, staXyz, stationGeoCoord.Lon, stationGeoCoord.Lat, AngleUnit.Degree)); }