Example #1
0
        /// <summary>
        /// 选择并复制文件
        /// </summary>
        /// <param name="inpath"></param>
        /// <param name="subDirectory">子目录,若有</param>
        public bool Select(string inpath, string subDirectory = null)
        {
            if (IsMatch(inpath))
            {
                var outpath = GetOutputPath(inpath, subDirectory);
                Gdp.Utils.FileUtil.CheckOrCreateDirectory(Path.GetDirectoryName(outpath));
                try
                {
                    File.Copy(inpath, outpath, true);

                    if (this.Option.IsNavCopy)
                    {
                        var header = RinexObsFileReader.ReadHeader(inpath);
                        if (header.HasNavFile)//同时输出导航文件
                        {
                            var outpathNav = GetOutputPath(header.NavFilePath, subDirectory);
                            File.Copy(header.NavFilePath, outpathNav, true);
                        }
                    }

                    log.Info(Path.GetFileName(inpath) + " 匹配成功! 复制到 " + outpath);
                    return(true);
                }
                catch (Exception ex)
                {
                    log.Error("复制 " + inpath + " 到 " + outpath + " 发生错误!" + ex.Message);
                }
            }
            else
            {
                FailedPathes.Add(inpath);
                log.Info(Path.GetFileName(inpath) + " 匹配失败!");
            }
            return(false);
        }
Example #2
0
        /// <summary>
        /// 读取数据
        /// </summary>
        public static Data.Rinex.RinexObsFile ReadFile(string ObsPath)
        {
            Data.Rinex.RinexObsFile ObsFile = null;
            string lastChar  = Gdp.Utils.StringUtil.GetLastChar(ObsPath);
            string lastChar3 = Gdp.Utils.StringUtil.GetLastChar(ObsPath, 3);
            string lastChar5 = Gdp.Utils.StringUtil.GetLastChar(ObsPath, 5);

            if (String.Equals(lastChar, "o", StringComparison.CurrentCultureIgnoreCase) || String.Equals(lastChar3, "rnx", StringComparison.CurrentCultureIgnoreCase))
            {
                var obsFileReader = new RinexObsFileReader(ObsPath);
                ObsFile = obsFileReader.ReadObsFile();
            }

            //if (String.Equals(lastChar, "z", StringComparison.CurrentCultureIgnoreCase)
            //    || String.Equals(lastChar3, "crx", StringComparison.CurrentCultureIgnoreCase)
            //    || String.Equals(lastChar5, "crx.gz", StringComparison.CurrentCultureIgnoreCase)
            //    )
            //{
            //    Gdp.IO.InputFileManager inputFileManager = new Gdp.IO.InputFileManager(Setting.TempDirectory);
            //    ObsPath = inputFileManager.GetLocalFilePath(ObsPath, "*.*o;*.rnx", "*.*");
            //    var obsFileReader = new RinexObsFileReader(ObsPath);
            //    ObsFile = obsFileReader.ReadObsFile();
            //}
            //if (String.Equals(lastChar, "s", StringComparison.CurrentCultureIgnoreCase))
            //{
            //    ObsFile = new TableObsFileReader(ObsPath).Read();
            //}
            if (ObsFile == null)
            {
                throw new Exception("不支持输入文件格式!");
                return(ObsFile);
            }
            return(ObsFile);
        }
Example #3
0
        /// <summary>
        /// 从观测文件中提取MW原始值。作为具有卫星和接收机硬件延迟的宽巷模糊度。
        /// </summary>
        /// <returns></returns>
        private ObjectTableManager ExtractRawMwValueFromObsFiles(string namePostfix = "_MwRaw")
        {
            //提取MW值    //并行提速.
            var dic = new ConcurrentDictionary <string, ObjectTableStorage>();

            Parallel.ForEach <string>(FilePathes, filePath =>
            {
                var builder           = new RawMwTableBuilder(filePath, AngleCut, RowCountToBeEmpty, SatelliteTypes);
                builder.Completed    += Builder_Completed;
                builder.IsSmoothRange = IsSmoothRange;
                var table             = builder.Build();
                if (table != null)
                {
                    var siteName = RinexObsFileReader.ReadSiteName(filePath, 8).Trim() + namePostfix;

                    //var fileName = Path.GetFileName(filePath);
                    dic.TryAdd(siteName, table);
                }
            });
            var mwTables = new ObjectTableManager(dic)
            {
                OutputDirectory = OutputDirectory
            };

            OneFileProcessed?.Invoke();

            return(mwTables);
        }
Example #4
0
        /// <summary>
        /// 转换写入文件。
        /// </summary>
        /// <param name="inputPath"></param>
        /// <param name="outputPath"></param>
        /// <param name="outVersion"></param>
        public static void ToRinex(string inputPath, string outputPath, double outVersion)
        {
            var obsFile = new RinexObsFileReader(inputPath).ReadObsFile();
            var txt     = new RinexObsFileWriter().GetRinexString(obsFile, outVersion);

            File.WriteAllText(outputPath, txt, Encoding.ASCII);
        }
        /// <summary>
        /// 构造函数。
        /// </summary>
        /// <param name="obsPathes"></param>
        /// <param name="satTypes"></param>
        /// <param name="outInterval"></param>
        public SatElevatoinTableBuilder(string[] obsPathes, List <SatelliteType> satTypes, double outInterval = 30, double AngleCut = 0)
        {
            this.SatelliteTypes   = satTypes;
            this.OutInterval      = outInterval;
            this.ObsPathes        = obsPathes;
            this.NamePostfix      = "SatEle";
            this.AngleCut         = AngleCut;
            this.EphemerisService = GlobalNavEphemerisService.Instance;// GlobalIgsEphemerisService.Instance;
            this.OutputDirectory  = Setting.TempDirectory;
            this.SiteCoords       = new Dictionary <string, XYZ>();
            Time StartTime = new Time();
            Time endTime   = new Time();

            foreach (var filePath in ObsPathes)
            {
                var header    = new RinexObsFileReader(filePath, false).GetHeader();
                var siteXyz   = header.SiteInfo.ApproxXyz;
                var fileName  = Path.GetFileName(filePath);
                var tableName = fileName + "_" + NamePostfix;
                SiteCoords[tableName] = siteXyz;
                if (endTime != header.EndTime)
                {
                    endTime = header.EndTime;
                }
                if (StartTime != header.StartTime)
                {
                    StartTime = header.StartTime;
                }
            }
            TimeLooper = new TimeLooper(new TimePeriod(StartTime, endTime), outInterval);
        }
Example #6
0
        protected virtual void button_showOnMap_Click(object sender, EventArgs e)
        {
            if (ShowLayer != null)
            {
                if (checkBox_clearCoords.Checked)
                {
                    this.Coords.Clear();
                }

                if (Coords.Count == 0)
                {
                    foreach (var path in ParseInputPathes())
                    {
                        var header = RinexObsFileReader.ReadHeader(path);
                        this.Coords.Add(new  NamedRmsXyz(System.IO.Path.GetFileName(path), new RmsedXYZ(header.ApproxXyz)));
                    }
                }
                if (Coords == null || Coords.Count == 0)
                {
                    log.Warn("输入结果为空。"); return;
                }
                int start = this.paramVectorRenderControl1.StartIndex;

                if (start >= Coords.Count)
                {
                    log.Warn("起始历元编号过大!总结果数 " + Coords.Count + ",起始历元编号:" + start + ", 为了可显示,已经将其设为 0"); start = 0;
                }

                PostionResultLayerBuilder builder = new PostionResultLayerBuilder(Coords, start);
                //builder.AddPt(GnssResults[0].SiteInfo.ApproxXyz, GnssResults[0].SiteInfo.MarkerName + "ApproxPoint");
                ShowLayer(builder.Build());
            }
        }
Example #7
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="table"></param>
        /// <param name="filePath"></param>
        /// <param name="isTempPath">是否是临时路径,如果是,则不进行提示</param>
        /// <param name="enableDelete"></param>
        public ObsFileChartEditForm(string filePath, bool isTempPath = false, bool isSort = false, bool isDrawAll = false, bool enableDelete = false)
        {
            InitializeComponent();
            this.isDrawAll = isDrawAll;
            this.ObsFile   = RinexObsFileReader.Read(filePath);

            this.Text  = ObsFile.Header.FileName;
            this.Table = ObsFile.BuildObjectTable(isDrawAll);
            if (isSort)
            {
                Table.ParamNames.Sort();
            }
            this.ObsFilePath = filePath;
            this.chartControl1.EnableDelete = enableDelete;
            this.ObsFile = ObsFile;
            if (enableDelete)
            {
                if (!isTempPath)
                {
                    Geo.Utils.FormUtil.ShowWarningMessageBox("请注意,所做修改将直接替换原文件!注意备份。\r\n" + filePath);
                }
                this.chartControl1.DataDeleting += ChartControl1_DataDeleting;
            }

            Draw(Table);
        }
Example #8
0
        /// <summary>
        /// 执行单个
        /// </summary>
        /// <param name="inputPath"></param>
        protected override void Run(string inputPath)
        {
            if (this.IsCancel)
            {
                return;
            }

            var reader = new RinexObsFileReader(inputPath, false);
            var header = reader.GetHeader();
            var coord  = SiteCoordService.Get(header.MarkerName, header.StartTime);

            if (coord == null)
            {
                FailedCount++;
                ShowInfo("Faild:\t" + inputPath);
                log.Error("坐标获取失败,本文件执行取消。 " + inputPath); return;
            }

            var outPath = Path.Combine(this.OutputDirectory, Path.GetFileName(inputPath));
            Dictionary <string, string> dic = new Dictionary <string, string>();

            dic[RinexHeaderLabel.APPROX_POSITION_XYZ] = RinexObsFileWriter.BuildApproxXyzLine(coord.Value);
            var replacer = new LineFileReplacer(inputPath, outPath, dic);

            replacer.EndMarkers.Add(RinexHeaderLabel.END_OF_HEADER);

            replacer.AddingLines.Add(RinexObsFileWriter.BuildGnsserCommentLines());
            replacer.AddingLines.Add(RinexObsFileWriter.BuildCommentLine("Approx XYZ updated with " + SiteCoordService.Name + " " + Geo.Utils.DateTimeUtil.GetFormatedDateTimeNow()));
            replacer.Run();
            log.Info("更新成功! " + coord.Value + ", " + inputPath);

            this.ProgressBar.PerformProcessStep();
        }
Example #9
0
        /// <summary>
        /// 解析,从观测文件。
        /// </summary>
        /// <param name="oFilePath"></param>
        /// <returns></returns>
        public Dictionary <string, string> ParseFromRinexOFile(string oFilePath)
        {
            RinexObsFileReader reader = new RinexObsFileReader(oFilePath, false);
            var header = reader.GetHeader();

            return(GetParamFromHeader(header));
        }
        private void fileOpenControl1_FilePathSetted(object sender, EventArgs e)
        {
            var file = fileOpenControl_inputPathes.GetFilePath("*.*o");

            if (File.Exists(file))
            {
                var oneHeader = new RinexObsFileReader(file, false).GetHeader();
            }
        }
Example #11
0
        private void fileOpenControl1_FilePathSetted(object sender, EventArgs e)
        {
            var file = fileOpenControl_inputPathes.GetFilePath("*.*O");

            if (File.Exists(file))
            {
                var oneHeader = new RinexObsFileReader(file, false).GetHeader();
                this.textBox_interval.Text = oneHeader.Interval + "";
            }
        }
Example #12
0
        private void fileOpenControl1_FilePathSetted(object sender, EventArgs e)
        {
            var file = fileOpenControl_inputPathes.GetFilePath("*.*O");

            if (File.Exists(file))
            {
                var oneHeader = new RinexObsFileReader(file, false).GetHeader();
                this.timeLoopControl1.TimeStepControl.SetValue(oneHeader.Interval);
                this.timeLoopControl1.TimePeriodControl.SetTimePerid(new TimePeriod(oneHeader.StartTime, oneHeader.EndTime));
            }
        }
        /// <summary>
        /// 将结果更新到RINEX头文件中,将覆盖以往的参数。
        /// </summary>
        /// <param name="existOFilePath"></param>
        /// <param name="newOfilePath"></param>
        public void UpdateToRinexOFileHeader(string existOFilePath, string newOfilePath)
        {
            RinexObsFileReader reader = new RinexObsFileReader(existOFilePath, false);
            var header = reader.GetHeader();
            var remainedComments = FilterParamComments(header.Comments);
            remainedComments.AddRange(this.ToMarkedLines());
            header.Comments = remainedComments;

            RinexObsFileReplacer replacer = new RinexObsFileReplacer(existOFilePath);
            replacer.ReplaceHeader(header, newOfilePath);
        }
Example #14
0
        /// <summary>
        /// 一个测站,一个文件。
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        private ObjectTableStorage BuildTable(string filePath)
        {
            var header  = new RinexObsFileReader(filePath, false).GetHeader();
            var siteXyz = header.SiteInfo.ApproxXyz;


            var fileName  = Path.GetFileName(filePath);
            var tableName = fileName + "_" + NamePostfix;

            //var ObsDataSource = new RinexFileObsDataSource(filePath);
            return(BuildTable(siteXyz, tableName));
        }
Example #15
0
        private void button_run_Click(object sender, EventArgs e)
        {
            var           outDir     = directorySelectionControl_outputDir.Path;
            var           outVersion = namedFloatControl_outVersion.GetValue();
            List <string> files      = new List <string>(fileOpenControl_inputs.FilePathes);

            if (files.Count == 0)
            {
                Geo.Utils.FormUtil.ShowWarningMessageBox("巧妇难为无米之炊!");
                return;
            }
            progressBarComponent1.InitProcess(files.Count);
            string currentSiteName = null;

            RinexObsFile currentFile     = null;
            string       readiedFilePath = null;

            foreach (var path in files)
            {
                progressBarComponent1.PerformProcessStep();
                var siteName = Path.GetFileName(path).Substring(0, 4);
                if (currentSiteName == null)
                {
                    currentSiteName = siteName;
                }

                if (!String.Equals(currentSiteName, siteName, StringComparison.CurrentCultureIgnoreCase))
                {
                    OutputFile(outDir, outVersion, currentSiteName, currentFile, readiedFilePath);

                    currentSiteName = siteName;
                    currentFile     = null;
                }

                RinexObsFile file = new RinexObsFileReader(path, true).ReadObsFile();

                readiedFilePath = path;//存储刚刚读取的路径,用户获取后缀名
                if (currentFile == null)
                {
                    currentFile = file;
                }
                else//拼接
                {
                    currentFile.Add(file);
                }
            }
            OutputFile(outDir, outVersion, currentSiteName, currentFile, readiedFilePath);
            currentFile = null;

            progressBarComponent1.Full();

            Geo.Utils.FormUtil.ShowOkAndOpenDirectory(outDir);
        }
Example #16
0
        /// <summary>
        /// 读取并构建
        /// </summary>
        /// <param name="Path"></param>
        /// <returns></returns>
        private ObjectTableStorage Build(string Path)
        {
            var source = new RinexObsFileReader(Path);
            ObjectTableStorage table = new ObjectTableStorage();

            table.Name = System.IO.Path.GetFileName(Path) + FileNames.TextExcelFileExtension;
            foreach (var epochInfo in source)
            {
                ObsToRow(table, epochInfo);
            }
            return(table);
        }
Example #17
0
        protected override void Run(string inputPath)
        {
            RinexObsFileReader reader = new RinexObsFileReader(inputPath, false);
            var header = reader.GetHeader();

            StationInfo info = new StationInfo(header.SiteInfo, header.ObsInfo);

            lock (locker)
            {
                StationInfoWriter.Write(info);
            }

            base.Run(inputPath);
        }
Example #18
0
        protected override void Run(string inputPath)
        {
            base.Run(inputPath);

            var obsFileReader = new RinexObsFileReader(inputPath);
            var ObsFile       = obsFileReader.ReadObsFile();
            var table         = new ObsFileToTableBuilder().Build(ObsFile);

            ObjectTableManager mgr = new ObjectTableManager(this.OutputDirectory);

            mgr.Add(table);
            mgr.WriteAllToFileAndClearBuffer();
            // Geo.Utils.FormUtil.ShowOkAndOpenDirectory(mgr.OutputDirectory);
        }
Example #19
0
        /// <summary>
        /// 以多(连续)文件路径构建。
        /// </summary>
        /// <param name="filePathes">观测文件路径,默认为采用同一个测站的数据,请输入时注意判断。</param>
        public MultiRinexFileObsDataSource(string[] filePathes)
        {
            this.ObsFileReaders = new List <RinexObsFileReader>();
            foreach (var filePath in filePathes)
            {
                var obsFileReader = new RinexObsFileReader(filePath);
                ObsFileReaders.Add(obsFileReader);
            }
            this.CurrentIndex = 0;
            var header = this.CurrentReader.GetHeader();

            this.SiteInfo = header.SiteInfo;
            this.ObsInfo  = header.ObsInfo;
        }
Example #20
0
        /// <summary>
        /// 读取数据
        /// </summary>
        private void ReadFile()
        {
            string lastChar  = Geo.Utils.StringUtil.GetLastChar(ObsPath);
            string lastChar3 = Geo.Utils.StringUtil.GetLastChar(ObsPath, 3);
            string lastChar5 = Geo.Utils.StringUtil.GetLastChar(ObsPath, 5);

            if (String.Equals(lastChar, "o", StringComparison.CurrentCultureIgnoreCase) || String.Equals(lastChar3, "rnx", StringComparison.CurrentCultureIgnoreCase))
            {
                obsFileReader = new RinexObsFileReader(ObsPath);
                ObsFile       = obsFileReader.ReadObsFile();
            }

            if (String.Equals(lastChar, "z", StringComparison.CurrentCultureIgnoreCase) ||
                String.Equals(lastChar3, "crx", StringComparison.CurrentCultureIgnoreCase) ||
                String.Equals(lastChar5, "crx.gz", StringComparison.CurrentCultureIgnoreCase)
                )
            {
                Geo.IO.InputFileManager inputFileManager = new Geo.IO.InputFileManager(Setting.TempDirectory);
                this.ObsPath  = inputFileManager.GetLocalFilePath(ObsPath, "*.*o;*.rnx", "*.*");
                obsFileReader = new RinexObsFileReader(ObsPath);
                ObsFile       = obsFileReader.ReadObsFile();
            }

            if (String.Equals(lastChar, "s", StringComparison.CurrentCultureIgnoreCase))
            {
                ObsFile = new TableObsFileReader(ObsPath).Read();
            }
            if (ObsFile == null)
            {
                Geo.Utils.FormUtil.ShowWarningMessageBox("不支持输入文件格式!");
                return;
            }

            this.bindingSource_obsInfo.DataSource = ObsFile;
            var prns = ObsFile.GetPrns();

            prns.Sort();
            this.bindingSource_sat.DataSource = prns;

            this.attributeBox1.DataGridView.DataSource = Geo.Utils.ObjectUtil.GetAttributes(ObsFile.Header, false);

            string msg = "";

            msg += "首次观测时间:" + ObsFile.Header.StartTime + "\r\n";
            msg += "最后观测时间:" + ObsFile.Header.EndTime + "\r\n";
            msg += "采样间隔:" + ObsFile.Header.Interval + " 秒" + "\r\n";

            this.textBox_show.Text = msg;
        }
Example #21
0
        private void SetCoordFromObsFile()
        {
            var path = fileOpenControl_extractFromOFile.FilePath;

            RinexObsFileReader reader = new RinexObsFileReader(path, false);
            var header = reader.GetHeader();

            if (header.ApproxXyz != null)
            {
                SetXyz(header.ApproxXyz);
            }
            else
            {
                Geo.Utils.FormUtil.ShowWarningMessageBox("很抱歉,所选文件不包含坐标!");
            }
        }
Example #22
0
        /// <summary>
        /// 重写头部信息
        /// </summary>
        /// <param name="header"></param>
        public void ReWriteHeader(RinexObsFileHeader header)
        {
            this.Dispose();
            //读取
            RinexObsFile obsFile = null;

            using (RinexObsFileReader reader = new RinexObsFileReader(this.FilePath))
            {
                obsFile         = reader.ReadObsFile();
                header.ObsCodes = obsFile.Header.ObsCodes;
                obsFile.Header  = header;
            }
            //重写
            this.Writer = new StreamWriter(FilePath, false, Encoding.ASCII);
            this.Write(obsFile);
        }
Example #23
0
        /// <summary>
        /// 时段分组
        /// </summary>
        /// <param name="inputs"></param>
        /// <param name="MinPhaseSpanMinutes"></param>
        /// <returns></returns>
        public static Dictionary <TimePeriod, List <string> > TimePeriodGroup(string[] inputs, double MinPhaseSpanMinutes)
        {
            Dictionary <string, TimePeriod> periods = new Dictionary <string, TimePeriod>();

            foreach (var path in inputs)
            {
                if (!Geo.Utils.FileUtil.IsValid(path))
                {
                    continue;
                }
                var time = RinexObsFileReader.ReadPeriod(path);
                periods[path] = time;
            }

            Dictionary <TimePeriod, List <string> > grouped = TimePeriod.GroupToPeriods(periods, MinPhaseSpanMinutes);

            return(grouped);
        }
        private void Process(string subDir, string inputPath)
        {
            try
            {
                ShowInfo("processing :" + inputPath);

                var header   = RinexObsFileReader.ReadHeader(inputPath);
                var siteInfo = header.SiteInfo;
                var obsInfo  = header.ObsInfo;
                table.NewRow();
                if (IsLonLatFirst)
                {
                    table.AddItem("Lon", siteInfo.ApproxGeoCoord.Lon);
                    table.AddItem("Lat", siteInfo.ApproxGeoCoord.Lat);
                    table.AddItem("Name", siteInfo.SiteName);
                }
                else
                {
                    table.AddItem("Name", siteInfo.SiteName);
                    table.AddItem("Lon", siteInfo.ApproxGeoCoord.Lon);
                    table.AddItem("Lat", siteInfo.ApproxGeoCoord.Lat);
                }
                table.AddItem("Height", siteInfo.ApproxGeoCoord.Height);
                table.AddItem("X", siteInfo.ApproxXyz.X);
                table.AddItem("Y", siteInfo.ApproxXyz.Y);
                table.AddItem("Z", siteInfo.ApproxXyz.Z);
                table.AddItem("ReceiverType", siteInfo.ReceiverType);
                table.AddItem("ReceiverNumber", siteInfo.ReceiverNumber);
                table.AddItem("AntennaType", siteInfo.AntennaType);
                table.AddItem("AntennaNumber", siteInfo.AntennaNumber);


                this.Invoke(new Action(() =>
                {
                    this.progressBar1.PerformStep();
                    this.progressBar1.Refresh();
                }));
            }
            catch (Exception ex)
            {
                log.Error("转换出错:\t" + inputPath + "\t, " + ex.Message);
            }
        }
Example #25
0
        /// <summary>
        /// 读取数据
        /// </summary>
        private List <RinexObsFileHeader> ReadFileHeaders(string[] filePathes)
        {
            List <RinexObsFileHeader> headers = new List <RinexObsFileHeader>();

            foreach (var obsPath in filePathes)
            {
                RinexObsFileHeader header = null;
                RinexObsFileReader obsFileReader;
                string             lastChar  = Geo.Utils.StringUtil.GetLastChar(obsPath);
                string             lastChar3 = Geo.Utils.StringUtil.GetLastChar(obsPath, 3);
                string             lastChar5 = Geo.Utils.StringUtil.GetLastChar(obsPath, 5);
                if (String.Equals(lastChar, "o", StringComparison.CurrentCultureIgnoreCase) || String.Equals(lastChar3, "rnx", StringComparison.CurrentCultureIgnoreCase))
                {
                    obsFileReader = new RinexObsFileReader(obsPath);
                    header        = obsFileReader.GetHeader();
                }

                if (String.Equals(lastChar, "z", StringComparison.CurrentCultureIgnoreCase) ||
                    String.Equals(lastChar3, "crx", StringComparison.CurrentCultureIgnoreCase) ||
                    String.Equals(lastChar5, "crx.gz", StringComparison.CurrentCultureIgnoreCase)
                    )
                {
                    Geo.IO.InputFileManager inputFileManager = new Geo.IO.InputFileManager(Setting.TempDirectory);
                    var obsPathes = inputFileManager.GetLocalFilePath(obsPath, "*.*o;*.rnx", "*.*");

                    obsFileReader = new RinexObsFileReader(obsPathes);
                    header        = obsFileReader.GetHeader();
                }
                if (header == null)
                {
                    log.Error("不支持输入文件格式!" + obsPath);
                }
                else
                {
                    headers.Add(header);
                    log.Info("成功读入:" + obsPath);
                }
            }
            return(headers);
        }
Example #26
0
        /// <summary>
        /// 通过文件构建,按照文件坐标计算,按照其采样率输出。
        /// </summary>
        /// <param name="oFilePath"></param>
        /// <param name="EphemerisService"></param>
        /// <param name="tableName"></param>
        /// <param name="AngleCut"></param>
        /// <returns></returns>
        public static ObjectTableStorage BuildTable(string oFilePath, double AngleCut = 12, IEphemerisService EphemerisService = null, string tableName = null)
        {
            if (String.IsNullOrWhiteSpace(tableName))
            {
                tableName = Path.GetFileName(oFilePath) + "-卫星高度角";
            }
            RinexObsFileReader reader = new RinexObsFileReader(oFilePath);
            var header  = reader.GetHeader();
            var siteXyz = header.ApproxXyz;

            if (EphemerisService == null)
            {
                if (File.Exists(header.NavFilePath))//优先考虑自带导航文件
                {
                    EphemerisService = EphemerisDataSourceFactory.Create(header.NavFilePath);
                }
                else
                {
                    EphemerisService = GlobalNavEphemerisService.Instance;
                }
            }

            var ephObj = EphemerisService.Get(SatelliteNumber.G01, reader.GetHeader().StartTime);

            if (ephObj == null)
            {
                EphemerisService = GlobalIgsEphemerisService.Instance;
            }


            var table = new ObjectTableStorage(tableName);

            while (reader.MoveNext())
            {
                var time = reader.Current.ReceiverTime;
                AddRow(AngleCut, EphemerisService, siteXyz, table, time);
            }
            return(table);
        }
Example #27
0
        protected override void Run(string[] inputPathes)
        {
            this.ProgressBar.Init(new List <string> {
                "统计", "复制或移动"
            }, inputPathes.Length);

            foreach (var path in inputPathes)
            {
                RinexObsFileHeader header = RinexObsFileReader.ReadHeader(path);
                var name = Geo.Utils.StringUtil.SubString(header.MarkerName, 0, LabelCharCount);
                if (IsIgnoreCase)
                {
                    name = name.ToUpper();
                }
                Result.GetOrCreate(name).Add(path);

                this.ProgressBar.PerformProcessStep();
            }
            this.ProgressBar.PerformClassifyStep(Result.Data.Count);
            int counter = 0;

            foreach (var item in Result.Data)
            {
                if (item.Value.Count > 1)
                {
                    foreach (var path in item.Value)
                    {
                        var toPath = Path.Combine(OutputDirectory, item.Key, Path.GetFileName(path));
                        Geo.Utils.FileUtil.CopyOrMoveFile(path, toPath, !IsMoveOrCopy, true);

                        counter++;
                    }
                }
                this.ProgressBar.PerformProcessStep();
            }
            var info = "发现了 " + counter + " 个同名测站。已 " + (IsMoveOrCopy ? " 移动!!如在默认临时文件夹,请及时移出!!否则重启后将被清空。 " : " 复制 ");

            log.Info(info);
        }
Example #28
0
        private void CombineFilesInOneSite(int keyCount, string outDir, double outVersion, List <string> oneSiteFiles)
        {
            RinexObsFile currentFile     = null;
            string       readiedFilePath = null;
            string       currentSiteName = null;

            oneSiteFiles.Sort();
            foreach (var path in oneSiteFiles)
            {
                var siteName = Path.GetFileName(path).Substring(0, keyCount);
                if (currentSiteName == null)
                {
                    currentSiteName = siteName;
                }

                if (!String.Equals(currentSiteName, siteName, StringComparison.CurrentCultureIgnoreCase))
                {
                    OutputFile(outDir, outVersion, currentSiteName, currentFile, readiedFilePath);

                    currentSiteName = siteName;
                    currentFile     = null;
                }

                RinexObsFile file = new RinexObsFileReader(path, true).ReadObsFile();

                readiedFilePath = path;//存储刚刚读取的路径,用户获取后缀名
                if (currentFile == null)
                {
                    currentFile = file;
                }
                else//拼接
                {
                    currentFile.Add(file);
                }
            }
            OutputFile(outDir, outVersion, currentSiteName, currentFile, readiedFilePath);
            currentFile = null;
        }
Example #29
0
        private void ChartControl1_DataDeleting(Dictionary <string, IntSegment> obj)
        {
            var segment    = obj.First().Value;
            var indexes    = Table.GetIndexValues <Time>();
            var startEpoch = indexes[segment.Start];
            var endEpoch   = indexes[segment.End];
            var timeperiod = new TimePeriod(startEpoch, endEpoch);

            var prns = new List <SatelliteNumber>();

            foreach (var kv in obj)
            {
                prns.Add(SatelliteNumber.Parse(kv.Key));
            }

            ObsFile.Remove(prns, timeperiod);

            RinexObsFileWriter.Write(ObsFile, ObsFilePath);

            this.ObsFile = RinexObsFileReader.Read(ObsFilePath);
            this.Table   = ObsFile.BuildObjectTable(isDrawAll);

            Draw(Table);
        }
        private RinexObsFileHeader ReadOriginalHeader(string inFilePath)
        {
            var reader = new RinexObsFileReader(inFilePath);

            return(reader.GetHeader());//以原头文件为蓝本
        }