Example #1
0
        /// <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));
        }
Example #2
0
        /// <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);
        }