/// <summary> /// 得到站星极坐标。错误的哦哦哦 哦哦哦哦哦哦 /// 方位角为 radians (clockwise) /// Azimuth radians (若 neg. below horizon) /// </summary> /// <param name="satXyz"></param> /// <param name="receiverXyz"></param> /// <param name="unit"></param> /// <returns></returns> private static Polar XyzToPolar2(XYZ satXyz, XYZ receiverXyz, Geo.Coordinates.AngleUnit unit = AngleUnit.Radian) { double sla, slo, cla, clo, n, e, u; double len = (satXyz - receiverXyz).Length; Geo.Coordinates.GeoCoord geo = Geo.Coordinates.CoordTransformer.XyzToGeoCoord(receiverXyz, unit); double lon = geo.Lon; double lat = geo.Lat; if (unit == AngleUnit.Degree) { lon = geo.Lon * CoordConsts.DegToRadMultiplier; lat = geo.Lat * CoordConsts.DegToRadMultiplier; } sla = Sin(lat); cla = Cos(lat); slo = Sin(lon); clo = Cos(lon); //*** topocentric to local horizon system (coeff.L. Ben notes) u = cla * clo * satXyz.X + cla * slo * satXyz.Y + sla * satXyz.Z; e = -slo * satXyz.X + clo * satXyz.Y; n = -sla * clo * satXyz.X - sla * slo * satXyz.Y + cla * satXyz.Z; double Elevation = Math.Asin(u / receiverXyz.Length); double Azimuth = Math.Atan2(e, n); if (unit == AngleUnit.Degree) { Azimuth = Azimuth * CoordConsts.RadToDegMultiplier; Elevation = Elevation * CoordConsts.RadToDegMultiplier; } return(new Polar(len, Azimuth, Elevation)); }
/// <summary> /// open one OpenFileDialog to select rinex O files, and create one anyinfo point layer; /// </summary> /// <param name="t"></param> /// <returns></returns> public static Layer OpenAndShowOFileOnMap(string title) { Layer layer = null; OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = Setting.RinexOFileFilter; openFileDialog.Multiselect = true; if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { string[] files = openFileDialog.FileNames; List <AnyInfo.Geometries.Point> lonlats = new List <AnyInfo.Geometries.Point>(); Geo.IO.InputFileManager inputFileManager = new Geo.IO.InputFileManager(Setting.TempDirectory); foreach (var item in files) { var local = inputFileManager.GetLocalFilePath(item, "*.*O;*.rnx", "*.*"); Data.Rinex.RinexObsFileHeader header = new Data.Rinex.RinexObsFileReader(local).GetHeader(); if (header.ApproxXyz == null) { continue; } Geo.Coordinates.GeoCoord lonlat = Geo.Coordinates.CoordTransformer.XyzToGeoCoord(header.ApproxXyz); lonlats.Add(new AnyInfo.Geometries.Point(lonlat, Path.GetFileNameWithoutExtension(item).Substring(0, 4)) { Name = header.MarkerName }); header = null;//释放资源。 } layer = LayerFactory.CreatePointLayer(lonlats, title); } return(layer); }