protected void OnObsHeaderUpdated(RinexObsFileHeader obj)
 {
     if (obj == null)
     {
         return;
     }
     if (ObsHeaderUpdated != null)
     {
         ObsHeaderUpdated(obj);
     }
 }
Exemple #2
0
        /// <summary>
        /// 生成头部文件。此处采用一个观测历元生成是有缺陷的!!后续观测可能会增加卫星!czs, 2015.12.25
        /// </summary>
        /// <param name="epochInfo"></param>
        /// <returns></returns>
        public RinexObsFileHeader BuildHeader(EpochInformation epochInfo)
        {
            RinexObsFileHeader header = new RinexObsFileHeader(
                epochInfo.ObsInfo.Clone() as IObsInfo,
                epochInfo.SiteInfo.Clone() as ISiteInfo
                );

            header.ObsCodes = BuildObsCodes(epochInfo);
            header.Comments.Add("obs codes built from the epoch " + epochInfo.ReceiverTime);
            return(header);
        }
Exemple #3
0
 public void ReWriteHeader(RinexObsFileHeader obj)
 {
     if (!IsObsHeaderWrited)
     {
         WriteHeader(obj);
     }
     else
     {
         RinexObsFileWriter.ReWriteHeader(obj);
     }
 }
        /// <summary>
        /// 构建子时段名称,精确到分钟,以示区别。
        /// </summary>
        /// <param name="current"></param>
        /// <param name="header"></param>
        /// <returns></returns>
        private string BuildSectionFileName(RinexEpochObservation current, RinexObsFileHeader header)
        {
            RinexFileNameBuilder nameBuilder = new RinexFileNameBuilder();

            return(nameBuilder.Build(header));

            var fileName  = Path.GetFileNameWithoutExtension(this.FilePath);
            var extension = Path.GetExtension(this.FilePath);

            return(fileName + current.ReceiverTime.Hour.ToString("00") + "." + current.ReceiverTime.Minute.ToString("00") + extension);
        }
Exemple #5
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="header"></param>
        public ObsAnalysisInfo(RinexObsFileHeader header)
        {
            this.SiteObsInfo = header;
            WidthFixedParamReader reader = new WidthFixedParamReader();
            var paramDic = reader.GetParamFromHeader(header);

            this.MultipathFactors = new Dictionary <FrequenceType, double>();
            if (paramDic.ContainsKey("A_MP"))
            {
                this.MultipathFactors.Add(FrequenceType.A, Double.Parse(paramDic["A_MP"]));
                this.MultipathFactors.Add(FrequenceType.B, Double.Parse(paramDic["B_MP"]));
            }
        }
        /// <summary>
        /// 创建头部信息 默认 3.02 版本
        /// </summary>
        /// <returns></returns>
        protected RinexObsFileHeader CreateOFileHeader(double version = 3.02)
        {
            RinexObsFileHeader header = new RinexObsFileHeader();

            header.Version    = version;
            header.MarkerName = SiteName;
            header.SetTypeOfObserves(SatelliteType.G, new List <string>()
            {
                "C1X", "L1X", "P2X", "L2X"
            });
            header.ApproxXyz = new Geo.Coordinates.XYZ();
            header.Hen       = new Geo.Coordinates.HEN();

            return(header);
        }
Exemple #7
0
        /// <summary>
        /// 构建头部信息
        /// </summary>
        /// <param name="table"></param>
        /// <returns></returns>
        public RinexObsFileHeader BuidHeader(ObjectTableStorage table)
        {
            var colNames      = table.ParamNames;
            var indexName     = table.GetIndexColName();
            var secondColName = colNames[1];


            var startEpochTime        = (DateTime)table.FirstIndex;
            var endEpoch              = (DateTime)table.LastIndex;
            var interval              = (int)((DateTime)table.SecondIndex - startEpochTime).TotalSeconds;
            RinexObsFileHeader header = new RinexObsFileHeader();

            header.Interval  = interval;
            header.StartTime = new Geo.Times.Time(startEpochTime);
            header.EndTime   = new Geo.Times.Time(endEpoch);
            header.Version   = secondColName.Length >= 7 ? 3.02 : 2.11;
            header.Comments.Add("Build from " + table.Name);
            var obsCodes = new Dictionary <SatelliteType, List <string> >();

            foreach (var name in colNames)
            {
                if (indexName == name)
                {
                    continue;
                }
                var prn = SatelliteNumber.Parse(name);
                if (!obsCodes.ContainsKey(prn.SatelliteType))
                {
                    obsCodes[prn.SatelliteType] = new List <string>();
                }
                var list = obsCodes[prn.SatelliteType];

                var code = name.Substring(4);

                if (!list.Contains(code))
                {
                    list.Add(code);
                }
            }
            header.ObsCodes          = obsCodes;
            header.MarkerType        = obsCodes.Count > 1 ? "M" : header.SatelliteTypes[0] + "";
            header.SiteInfo.SiteName = table.Name.Substring(0, 4);


            return(header);
        }
        /// <summary>
        /// 从头部对象中提取参数
        /// </summary>
        /// <param name="header"></param>
        /// <returns></returns>
        public Dictionary <string, string> GetParamFromHeader(RinexObsFileHeader header)
        {
            Dictionary <string, string> data = new Dictionary <string, string>();
            var str    = ExtractParamStringFromRinexComments(header.Comments);
            var paires = str.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

            foreach (var paramPair in paires)
            {
                if (String.IsNullOrWhiteSpace(paramPair))
                {
                    continue;
                }

                var strs = paramPair.Split('=');
                data.Add(strs[0], strs[1]);
            }
            return(data);
        }
        /// <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);
        }
Exemple #10
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);
        }
 protected override void dataProvider_ObsHeaderCreated(RinexObsFileHeader obj)
 {
     this.ObsFile.Header = obj;
 }
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="header"></param>
 public RinexEpochInfoBuilder(RinexObsFileHeader header)
 {
     this.SatelliteTypes = header.SatelliteTypes;
     this.RinexVersion   = header.Version;
 }
Exemple #13
0
 /// <summary>
 ///构造函数
 /// </summary>
 /// <param name="header"></param>
 public ObsAnalysisInfoCollection(RinexObsFileHeader header, string FileName = null)
 {
     this.FilePath    = FileName;
     this.SiteObsInfo = header;
 }
 public RtcmMsmMessageConverter(RinexObsFileHeader ObsHeader)
 {
     // TODO: Complete member initialization
     this.ObsHeader = ObsHeader;
 }
Exemple #15
0
 /// <summary>
 /// 写头部信息
 /// </summary>
 /// <param name="obj"></param>
 public void WriteHeader(RinexObsFileHeader obj)
 {
     RinexObsFileWriter.WriteHeader(obj);
     IsObsHeaderWrited = true;
 }
Exemple #16
0
        /// <summary>
        /// 构建子时段名称,精确到分钟,以示区别。
        /// </summary>
        /// <param name="current"></param>
        /// <returns></returns>
        private string BuildSectionFileName(EpochInformation current, RinexObsFileHeader header)
        {
            RinexFileNameBuilder nameBuilder = new RinexFileNameBuilder();

            return(nameBuilder.Build(header));
        }
Exemple #17
0
 /// <summary>
 /// 默认构造函数。
 /// </summary>
 /// <param name="TempSubDirectory"></param>
 /// <param name="header"></param>
 public ObsSiteInfo(RinexObsFileHeader header, string TempSubDirectory = "Temp")
 {
     this.TempSubDirectory = TempSubDirectory;
     this.SiteObsInfo      = header;
 }
        /// <summary>
        /// 格式化输出的头部。若启用 删除观测值为 0 的数据。 则需要缓存。
        /// </summary>
        /// <param name="OldHeader"></param>
        /// <returns></returns>
        private RinexObsFileHeader BuildOutputHeader(RinexObsFileHeader OldHeader)
        {
            RinexObsFileHeader newHeader = (RinexObsFileHeader)OldHeader.Clone();

            //输出版本
            if (Option.IsEnableRinexVertion)
            {
                newHeader.Version = this.Option.Version;
                log.Info("输出版本:" + Option.Version);
            }
            if (Option.IsUseFileNameAsSiteName)
            {
                newHeader.SiteInfo.SiteName = Gdp.Utils.StringUtil.SubString(newHeader.FileName.ToUpper(), 0, Option.SiteNameLength.Value);
            }
            if (Option.SiteNameLength.Enabled)
            {
                newHeader.SiteInfo.SiteName = Gdp.Utils.StringUtil.SubString(newHeader.SiteInfo.SiteName, 0, Option.SiteNameLength.Value);
            }
            if (Option.IsUpperSiteName)
            {
                newHeader.SiteInfo.SiteName = newHeader.SiteInfo.SiteName.ToUpper();
            }

            //采用间隔
            if (Option.IsEnableInterval)
            {
                newHeader.Interval = Option.Interval;
                log.Info("指定的采样率:" + Option.Interval);
            }

            //是否启用卫星系统过滤, 为修改 header.ObsCodes,不仅如此,内容也要及时删除,以免多余劳动
            if (Option.IsEnableSatelliteTypes)
            {
                newHeader.RemoveOther(Option.SatelliteTypes);
                log.Info("将移除非此系统:" + Gdp.Utils.StringUtil.ToString(Option.SatelliteTypes));
            }

            //移除对于无电离层组合多余的观测量
            if (Option.IsRemoveRedundantObsForIonoFree)
            {
                newHeader.IsRemoveRedundantObsForIonoFree();
                log.Info("移除对于双频无电离层组合多余的观测值");
            }

            //删除观测值为 0 的数据。
            if (Option.IsEnableMinObsCodeAppearRatio)
            {
                //缓存
                var tables = BuildObsCodeTables(newHeader.ObsCodes); //采用新头部的

                var ratios = GetObsCodeRatios(tables);

                //出现率低于 x 的代码
                var minRatio = Option.MinObsCodeAppearRatio;
                this.ObsCodesToBeRemove = new Dictionary <SatelliteType, List <string> >();
                var ObsCodes = new Dictionary <SatelliteType, List <string> >();

                foreach (var kv in ratios)
                {
                    List <string> okCodes  = new List <string>();
                    List <string> badCodes = new List <string>();
                    foreach (var item in kv.Value)
                    {
                        if (item.Value > minRatio)
                        {
                            okCodes.Add(item.Key);
                        }
                        else
                        {
                            badCodes.Add(item.Key);
                        }
                        if (item.Value != 1)
                        {
                            log.Info(FileName + "  " + kv.Key + " " + item.Key + " 出勤率 " + item.Value);
                        }
                    }
                    ObsCodes.Add(kv.Key, okCodes);
                    ObsCodesToBeRemove.Add(kv.Key, badCodes);
                }

                newHeader.ObsCodes = ObsCodes;
            }

            //删除其它观测码
            if (Option.IsReomveOtherCodes)
            {
                foreach (var collection in newHeader.ObsCodes)
                {
                    List <string> tobeRemoves = new List <string>();
                    foreach (var item in collection.Value)
                    {
                        if (!Option.OnlyCodes.Contains(item))
                        {
                            tobeRemoves.Add(item);
                        }
                    }
                    foreach (var item in tobeRemoves)
                    {
                        collection.Value.Remove(item);
                    }
                }
                log.Info("将移除非此观测码:" + Gdp.Utils.StringUtil.ToString(Option.ObsCodes));
            }

            if (Option.IsEnableObsTypes)
            {
                newHeader.RemoveOther(Option.ObsTypes);
            }


            //删除观测频率
            if (Option.IsEnableRemoveIndicatedFrequence)
            {
                foreach (var collection in newHeader.ObsCodes)
                {
                    List <string> tobeRemoves = new List <string>();
                    foreach (var item in collection.Value)
                    {
                        foreach (var freqNum in Option.FrequenceNumToBeRemoved)
                        {
                            if (item.Contains(freqNum.ToString()))
                            {
                                tobeRemoves.Add(item); break;
                            }
                        }
                    }
                    foreach (var item in tobeRemoves)
                    {
                        collection.Value.Remove(item);
                    }
                }
                log.Info("将移除频率:" + Gdp.Utils.StringUtil.ToString(Option.FrequenceNumToBeRemoved));
            }


            return(newHeader);
        }
Exemple #19
0
 protected virtual void dataProvider_ObsHeaderUpdated(RinexObsFileHeader obj)
 {
 }
Exemple #20
0
 protected virtual void dataProvider_ObsHeaderCreated(RinexObsFileHeader obj)
 {
     //throw new NotImplementedException();
 }
Exemple #21
0
 /// <summary>
 /// 写头部
 /// </summary>
 /// <param name="header"></param>
 private void WriteHeader(RinexObsFileHeader header)
 {
     Writer.WriteHeader(header);
 }
Exemple #22
0
 void RtcmDataParser_ObsHeaderUpdated(RinexObsFileHeader obj)
 {
     //  RtGnssDataWriter.ReWriteHeader(obj);
 }
Exemple #23
0
 protected override void dataProvider_ObsHeaderUpdated(RinexObsFileHeader obj)
 {
     this.ReWriteHeader(obj);
 }
 /// <summary>
 /// 写头部
 /// </summary>
 /// <param name="header"></param>
 private void WriteHeader(RinexObsFileHeader header)
 {
     Writer.WriteHeader(header);
     IsHeaderWrited = true;
 }
Exemple #25
0
        /// <summary>
        /// 格式化输出的头部。
        /// </summary>
        /// <param name="OldHeader"></param>
        /// <returns></returns>
        private RinexObsFileHeader BuildOutputHeader(RinexObsFileHeader OldHeader)
        {
            RinexObsFileHeader newHeader = (RinexObsFileHeader)OldHeader.Clone();

            //输出版本
            if (Option.IsEnableRinexVertion)
            {
                newHeader.Version = this.Option.Version;
                log.Info("输出版本:" + Option.Version);
            }

            //采用间隔
            if (Option.IsEnableInterval)
            {
                newHeader.Interval = Option.Interval;
                log.Info("指定的采样率:" + Option.Interval);
            }

            //是否启用卫星系统过滤, 为修改 header.ObsCodes,不仅如此,内容也要及时删除,以免多余劳动
            if (Option.IsEnableSatelliteTypes)
            {
                newHeader.RemoveOther(Option.SatelliteTypes);
                log.Info("将移除非此系统:" + Geo.Utils.StringUtil.ToString(Option.SatelliteTypes));
            }

            //观测类型过滤
            if (Option.IsEnableObsTypes)
            {
                newHeader.RemoveOther(Option.ObsTypes);
                log.Info("将移除非此观测值:" + Geo.Utils.StringUtil.ToString(Option.ObsTypes));
            }


            //删除观测值为 0 的数据。
            if (Option.IsEnableMinObsCodeAppearRatio)
            {
                //缓存
                var tables = BuildObsCodeTables(newHeader.ObsCodes); //采用新头部的

                var ratios = GetObsCodeRatios(tables);

                //出现率低于 x 的代码
                var minRatio = Option.MinObsCodeAppearRatio;
                this.ObsCodesToBeRemove = new Dictionary <SatelliteType, List <string> >();
                var ObsCodes = new Dictionary <SatelliteType, List <string> >();

                foreach (var kv in ratios)
                {
                    List <string> okCodes  = new List <string>();
                    List <string> badCodes = new List <string>();
                    foreach (var item in kv.Value)
                    {
                        if (item.Value > minRatio)
                        {
                            okCodes.Add(item.Key);
                        }
                        else
                        {
                            badCodes.Add(item.Key);
                        }
                        if (item.Value != 1)
                        {
                            log.Info(FileName + "  " + kv.Key + " " + item.Key + " 出勤率 " + item.Value);
                        }
                    }
                    ObsCodes.Add(kv.Key, okCodes);
                    ObsCodesToBeRemove.Add(kv.Key, badCodes);
                }

                newHeader.ObsCodes = ObsCodes;
            }

            //删除其它观测码
            if (Option.IsReomveOtherCodes)
            {
                foreach (var collection in newHeader.ObsCodes)
                {
                    List <string> tobeRemoves = new List <string>();
                    foreach (var item in  collection.Value)
                    {
                        if (!Option.OnlyCodes.Contains(item))
                        {
                            tobeRemoves.Add(item);
                        }
                    }
                    foreach (var item in tobeRemoves)
                    {
                        collection.Value.Remove(item);
                    }
                }
                log.Info("将移除非此观测码:" + Geo.Utils.StringUtil.ToString(Option.ObsCodes));
            }

            return(newHeader);
        }