/// <summary> /// 所有的里程 /// </summary> //private List<Milestone> _allStone = new List<Milestone>(); #endregion /// <summary> /// 初始化 /// </summary> public WavefromData() { CitFileProcess = new CITFileProcess(); _invaildDataManager = new InvalidDataManager(); _labelInfoDataManager = new LabelInfoManager(); _mileList = new MilestoneList(); ChannelList = new List <ChannelsClass>(); LayerConfig = new LayerConfigData(); ChanneDefinitionList = new List <ChannelDefinition>(); IndexOperator = new IndexOperator(); }
public void InitFixData(string fixedCitFile, string fixedIdfFile = null, bool diffFileName = false) { List <ChannelDefinition> channelDefinition = _citProcess.GetChannelDefinitionList(fixedCitFile); for (int i = 0; i < FixParams.Count; i++) { FixParams[i].ChannelID = channelDefinition.Where(p => p.sNameEn == FixParams[i].ChannelName).ToList()[0].sID; } FileInformation citFile = _citProcess.GetFileInformation(fixedCitFile); _fixedData.Clear(); string idfFIle = fixedCitFile.Replace(".cit", ".idf"); if (diffFileName) { idfFIle = fixedIdfFile; } IndexOperator indexOperator = new IndexOperator(); if (File.Exists(idfFIle)) { indexOperator.IndexFilePath = idfFIle; UserFixedTable fixTable = new UserFixedTable(indexOperator, citFile.iKmInc); if (fixTable.MarkedPoints.Count > 0) { foreach (var point in fixTable.MarkedPoints) { //左半边数据点个数,包括中间点 List <FixPoint> fixPoint = new List <FixPoint>(); int leftFixedCount = FixedSamplingCount + 1; long leftStartPostion = _citProcess.GetAppointFileEndPostion(fixedCitFile, point.FilePointer, -1 * leftFixedCount); long realLeftCount = _citProcess.GetSampleCountByRange(fixedCitFile, leftStartPostion, point.FilePointer); long rightEndPostion = _citProcess.GetAppointFileEndPostion(fixedCitFile, point.FilePointer, FixedSamplingCount); long realRightCount = _citProcess.GetSampleCountByRange(fixedCitFile, point.FilePointer, rightEndPostion); Milestone mile = _citProcess.GetAppointMilestone(fixedCitFile, point.FilePointer); foreach (var item in FixParams) { FixPoint fixP = new FixPoint(); fixP.FixPostion = leftFixedCount; double[] data = _citProcess.GetOneChannelDataInRange(fixedCitFile, item.ChannelID, leftStartPostion, ((int)(realLeftCount + realRightCount))); fixP.Points = data; fixP.ChannelID = item.ChannelID; fixP.OriginalMileage = mile.GetMeter(); fixPoint.Add(fixP); } _fixedData.Add(point, fixPoint); } } } }
private void SaveToFile(string targetCitFile, bool diffFileName = false) { string idfFile = targetCitFile.Replace(".cit", ".idf"); if (diffFileName) { idfFile = targetCitFile.Replace(".cit", "_MileageFix.idf"); } IndexOperator indexOperator = new IndexOperator(); indexOperator.IndexFilePath = idfFile; FileInformation citHeaderInfo = _citProcess.GetFileInformation(targetCitFile); UserFixedTable fixedTable = new UserFixedTable(indexOperator, citHeaderInfo.iKmInc); fixedTable.Clear(); foreach (var kvp in _CorrResult) { FixParams.Sort(); bool isFind = false; UserMarkedPoint markedPoint = null; foreach (var item in FixParams) { CorrelationResult corrResult = kvp.Value.FirstOrDefault(p => p.ChannelID == item.ChannelID); if (corrResult != null) { if (item.Priority == 0 && !isFind) { isFind = true; continue; } if (isFind) { markedPoint = new UserMarkedPoint(); markedPoint.FilePointer = corrResult.FilePointer; markedPoint.UserSetMileage = kvp.Key.UserSetMileage; break; } } } if (markedPoint != null) { fixedTable.MarkedPoints.Add(markedPoint); } } if (fixedTable.MarkedPoints.Count > 0) { fixedTable.Save(); } }
static void Main(string[] args) { string citFile = @"H:\工作文件汇总\铁科院\程序\轨检\data\GNHS-HANGZHOU-NANJING-14052016-175302-1减变增.cit"; string idfFile = @"H:\工作文件汇总\铁科院\程序\轨检\data\GNHS-HANGZHOU-NANJING-14052016-175302-1减变增.idf"; IOperator indexOperator = new IndexOperator(); indexOperator.IndexFilePath = idfFile; InnerFileOperator.InnerFilePath = @"H:\工作文件汇总\铁科院\程序\轨检\data\" + "InnerDB.idf"; InnerFileOperator.InnerConnString = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = {0}; Persist Security Info = True; Mode = Share Exclusive; Jet OLEDB:Database Password = iicdc; "; MilestoneFix _mileageFix = new MilestoneFix(citFile, indexOperator); _mileageFix.ReadMilestoneFixTable(); List <MileStoneFixData> listFixData = new List <MileStoneFixData>(); listFixData = _mileageFix.FixData; }
/// <summary> /// 无效区段智能识别 /// </summary> /// <param name="citFile">cit文件名</param> /// <param name="pointCount">按照点位数分段进行读取</param> /// <param name="idfFile">idf文件名</param> /// <returns></returns> private bool _invalidData(string citFile, int pointCount, string idfFile) { //初始化idf文件 IndexOperator oper = new IndexOperator(); oper.IndexFilePath = idfFile; //情况无效数据表 string cmdText = "delete from InvalidData"; oper.ExcuteSql(cmdText); DataProcessing IDP = new DataProcessing(); ////处理单通道数据 ////IDP.GetDataInfo(CommonClass.listDIC[0].sFilePath, CommonClass.listDIC[0].sAddFile); ////处理多通道数据 //bool result = IDP.GetDataInfoMulti(citFile, pointCount, idfFile); bool result = GetDataInfoMulti(citFile, pointCount, idfFile); return(result); }
/// <summary> /// 根据索引导出CIT文件 /// </summary> /// <param name="filePath">cit文件路径</param> /// <param name="startMileage">开始里程(公里)</param> /// <param name="endMileage">结束里程(公里)</param> /// <returns>成功:返回导出路径,失败:空字符串</returns> public string ExportCITFileAndIndexData(string filePath, double startMileage, double endMileage) { string destFile = filePath + "\\" + Path.GetFileNameWithoutExtension(CitFilePath) + "_" + startMileage.ToString() + "-" + endMileage.ToString() + ".cit"; if (_citFile.iKmInc == 1 && startMileage < endMileage) { double change = startMileage; startMileage = endMileage; endMileage = change; } if (_citFile != null && MileageFix.FixData.Count > 0) { if (_citFile.iKmInc == 0) { if (startMileage >= MileageFix.FixData[MileageFix.FixData.Count - 1].MarkedEndPoint.UserSetMileage / 1000 || endMileage <= MileageFix.FixData[0].MarkedStartPoint.UserSetMileage / 1000) { return(""); } if (startMileage < (MileageFix.FixData[0].MarkedStartPoint.UserSetMileage / 1000)) { startMileage = (MileageFix.FixData[0].MarkedStartPoint.UserSetMileage / 1000); } if (endMileage > MileageFix.FixData[MileageFix.FixData.Count - 1].MarkedEndPoint.UserSetMileage / 1000) { endMileage = MileageFix.FixData[MileageFix.FixData.Count - 1].MarkedEndPoint.UserSetMileage / 1000; } } else if (_citFile.iKmInc == 1) { if (endMileage >= MileageFix.FixData[MileageFix.FixData.Count - 1].MarkedEndPoint.UserSetMileage / 1000 || startMileage <= MileageFix.FixData[0].MarkedStartPoint.UserSetMileage / 1000) { return(""); } if (startMileage > MileageFix.FixData[0].MarkedStartPoint.UserSetMileage / 1000) { startMileage = MileageFix.FixData[0].MarkedStartPoint.UserSetMileage / 1000; } if (endMileage < MileageFix.FixData[MileageFix.FixData.Count - 1].MarkedEndPoint.UserSetMileage / 1000) { endMileage = MileageFix.FixData[MileageFix.FixData.Count - 1].MarkedEndPoint.UserSetMileage / 1000; } } Milestone startStone = new Milestone(); Milestone endStone = new Milestone(); startStone = MileageFix.CalcMilestoneByFixedMilestone((float)startMileage * 1000); endStone = MileageFix.CalcMilestoneByFixedMilestone((float)endMileage * 1000); if (startStone.mFilePosition != -1 && endStone.mFileEndPostion != -1) { if (!Directory.Exists(filePath)) { Directory.CreateDirectory(filePath); } List <double[]> channelData = CitFileProcess.GetAllChannelDataInRange(_citFilePath, startStone.mFilePosition, endStone.mFileEndPostion); List <ChannelDefinition> channelDefinitionList = CitFileProcess.GetChannelDefinitionList(_citFilePath); if (CitFileProcess.WriteCitFile(destFile, CitFile, channelDefinitionList, "", channelData)) { CitFileProcess.SetKmFrom(destFile, (float)startStone.GetMeter() / 1000); CitFileProcess.SetKmTo(destFile, (float)endStone.GetMeter() / 1000); string indexFile = destFile.Replace(".cit", ".idf"); IOperator newOperator = new IndexOperator(); newOperator.IndexFilePath = indexFile; //IndexOperator.CreateDB(indexFile); long fileHead = FileDataOffset.GetSamplePointStartOffset(channelData.Count, 4); AddNewIndexData(destFile, newOperator, fileHead, startStone.mFilePosition, endStone.mFileEndPostion, channelData.Count); AddInvaildData(newOperator, fileHead, startStone.mFilePosition, endStone.mFileEndPostion, channelData.Count); return(destFile); } return(""); } return(""); } else { return(ExportOnlyCITFile(destFile, startMileage, endMileage)); } }
public void Read(TProtocol iprot) { TField field; iprot.ReadStructBegin(); while (true) { field = iprot.ReadFieldBegin(); if (field.Type == TType.Stop) { break; } switch (field.ID) { case 1: if (field.Type == TType.String) { this.column_name = iprot.ReadBinary(); this.__isset.column_name = true; } else { TProtocolUtil.Skip(iprot, field.Type); } break; case 2: if (field.Type == TType.I32) { this.op = (IndexOperator)iprot.ReadI32(); this.__isset.op = true; } else { TProtocolUtil.Skip(iprot, field.Type); } break; case 3: if (field.Type == TType.String) { this.value = iprot.ReadBinary(); this.__isset.value = true; } else { TProtocolUtil.Skip(iprot, field.Type); } break; default: TProtocolUtil.Skip(iprot, field.Type); break; } iprot.ReadFieldEnd(); } iprot.ReadStructEnd(); }
public IndexExpression(byte[] column_name, IndexOperator op, byte[] value) : this() { this.Column_name = column_name; this.Op = op; this.Value = value; }
public IndexExpression(byte[] column_name, IndexOperator op, byte[] @value) : this() { this.Column_name = column_name; this.Op = op; this.Value = @value; }
public void SaveChannelDataTxt(string citFilePath, string idfFilePath, string dbFilePath, string channleName, string exportTxtPath, double startMileage, double endMileage, int sampleCount, bool isChinese) { FileInformation citHeader = citProcess.GetFileInformation(citFilePath); List <ChannelDefinition> list = citProcess.GetChannelDefinitionList(citFilePath); int channelId = 0; var channelItem = list.Where(s => s.sNameEn == channleName || s.sNameCh == channleName).FirstOrDefault(); if (channelItem != null) { channelId = channelItem.sID; } if (citHeader.iKmInc == 1 && startMileage < endMileage) { double change = startMileage; startMileage = endMileage; endMileage = change; } if (!String.IsNullOrEmpty(idfFilePath) && !String.IsNullOrEmpty(dbFilePath)) { indexOperator = new IndexOperator(); indexOperator.IndexFilePath = idfFilePath; InnerFileOperator.InnerFilePath = dbFilePath; InnerFileOperator.InnerConnString = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = {0}; Persist Security Info = True; Mode = Share Exclusive; Jet OLEDB:Database Password = iicdc; "; _mileageFix = new MilestoneFix(citFilePath, indexOperator); _mileageFix.ReadMilestoneFixTable(); if (_mileageFix.FixData.Count > 0) { if (citHeader.iKmInc == 0) { if (startMileage >= _mileageFix.FixData[_mileageFix.FixData.Count - 1].MarkedEndPoint.UserSetMileage / 1000 || endMileage <= _mileageFix.FixData[0].MarkedStartPoint.UserSetMileage / 1000) { //return ""; throw new Exception("此里程范围内没有修正数据:start:" + startMileage + " end:" + endMileage); } if (startMileage < (_mileageFix.FixData[0].MarkedStartPoint.UserSetMileage / 1000)) { startMileage = (_mileageFix.FixData[0].MarkedStartPoint.UserSetMileage / 1000); } if (endMileage > _mileageFix.FixData[_mileageFix.FixData.Count - 1].MarkedEndPoint.UserSetMileage / 1000) { endMileage = _mileageFix.FixData[_mileageFix.FixData.Count - 1].MarkedEndPoint.UserSetMileage / 1000; } } else if (citHeader.iKmInc == 1) { if (endMileage >= _mileageFix.FixData[_mileageFix.FixData.Count - 1].MarkedEndPoint.UserSetMileage / 1000 || startMileage <= _mileageFix.FixData[0].MarkedStartPoint.UserSetMileage / 1000) { //return ""; throw new Exception("此里程范围内没有修正数据:start:" + startMileage + " end:" + endMileage); } if (startMileage > _mileageFix.FixData[0].MarkedStartPoint.UserSetMileage / 1000) { startMileage = _mileageFix.FixData[0].MarkedStartPoint.UserSetMileage / 1000; } if (endMileage < _mileageFix.FixData[_mileageFix.FixData.Count - 1].MarkedEndPoint.UserSetMileage / 1000) { endMileage = _mileageFix.FixData[_mileageFix.FixData.Count - 1].MarkedEndPoint.UserSetMileage / 1000; } } Milestone startStone = new Milestone(); Milestone endStone = new Milestone(); startStone = CalcMilestoneByFixedMilestone((float)startMileage * 1000, _mileageFix.FixData, citFilePath); endStone = CalcMilestoneByFixedMilestone((float)endMileage * 1000, _mileageFix.FixData, citFilePath); //_mileageFix.CalcMilestoneByFixedMilestone(123); //endStone = _mileageFix.CalcMilestoneByFixedMilestone((float)endMileage * 1000); if (startStone.mFilePosition != -1) { List <double[]> dataList = new List <double[]>(); double[] datas = citProcess.GetOneChannelDataInRange(citFilePath, channelId, startStone.mFilePosition, endStone.mFilePosition); List <Milestone> mileStoneList = citProcess.GetMileStoneByRange(citFilePath, startStone.mFilePosition, endStone.mFilePosition); List <Milestone> mileStoneListNew = GetMileageReviseData(mileStoneList, _mileageFix.FixData, citFilePath); var dataKm = mileStoneListNew.Select(s => Convert.ToDouble(s.mKm)).ToArray(); var dataMeter = mileStoneListNew.Select(s => Convert.ToDouble(s.mMeter)).ToArray(); dataList.Add(dataKm); dataList.Add(dataMeter); dataList.Add(datas); ExportData(exportTxtPath, dataList); } } else { } } }
/// <summary> /// 接口函数:计算峰峰值指标 /// </summary> /// <param name="citFileName">cit文件全路径</param> /// <param name="citFileName">idf文件全路径</param> /// <returns></returns> private List <String> PreProcessDeviation(String citFileName, int pointCount, string idfFileName = null) { //StreamWriter sw3 = new StreamWriter("d:/peakvalue_40000.csv", true, Encoding.Default); //StringBuilder sbtmp = new StringBuilder(); //sbtmp.Append("d_tt,"); //sbtmp.Append("d_wvelo,"); //sbtmp.Append("d_gauge,"); //sbtmp.Append("d_wx"); //sw3.WriteLine(sbtmp.ToString()); List <String> dataStrList = new List <String>(); cdlist.channelDefinitionList = cfprocess.GetChannelDefinitionList(citFileName); fileinfo = cfprocess.GetFileInformation(citFileName); //int tds = fileinfo.iChannelNumber; long[] position = cfprocess.GetPositons(citFileName); long startPos = position[0]; //开始位置、结束位置 long endPos = position[1]; //分段读取方法//////////////////// long totleSample = cfprocess.GetTotalSampleCount(citFileName); //循环次数 int count = Convert.ToInt32(totleSample / pointCount); //是否有余点 int residue = Convert.ToInt32(totleSample % pointCount); bool iszero = false; //是否执行一次 if (count == 0) { iszero = true; } //如果有余数循环次数加1 if (residue > 0) { count++; } for (int z = 0; z < count; z++) { if (iszero) { endPos = cfprocess.GetAppointEndPostion(citFileName, startPos, residue); } else { if (residue == 0) { endPos = cfprocess.GetAppointEndPostion(citFileName, startPos, pointCount); } else { if (z == (count - 1)) { endPos = cfprocess.GetAppointEndPostion(citFileName, startPos, residue); } else { endPos = cfprocess.GetAppointEndPostion(citFileName, startPos, pointCount); } } } //分段读取方法//////////////////// List <Milestone> allmilelist; //List<Milestone> milelist = cfprocess.GetAllMileStone(citFileName); ///分段读取使用////////////////////////// List <Milestone> milelist = cfprocess.GetMileStoneByRange(citFileName, startPos, endPos); ///////////////////////////// //验证是否修正 if (!String.IsNullOrEmpty(idfFileName)) { IndexOperator _op = new IndexOperator(); _op.IndexFilePath = idfFileName; MilestoneFix mile = new MilestoneFix(citFileName, _op); mile.ReadMilestoneFixTable(); allmilelist = mile.GetMileageReviseData(milelist); } else { allmilelist = milelist; } //开始里程 和结束里程 double[] d_tt = new double[allmilelist.Count]; for (int i = 0; i < allmilelist.Count; i++) { double obj = allmilelist[i].GetMeter() / 1000; d_tt[i] = obj; } double[] d_wvelo = cfprocess.GetOneChannelDataInRange(citFileName, cdlist.GetChannelIdByName("Speed", "速度"), startPos, endPos); double[] d_gauge = cfprocess.GetOneChannelDataInRange(citFileName, cdlist.GetChannelIdByName("Gage", "轨距"), startPos, endPos); double[] d_wx = cfprocess.GetOneChannelDataInRange(citFileName, cdlist.GetChannelIdByName("L_Prof_SC", "左高低_中波"), startPos, endPos); //for (int i = 0; i < d_tt.Length; i++) //{ // sw3.Write(d_tt[i]); // sw3.Write(","); // sw3.Write(d_wvelo[i]); // sw3.Write(","); // sw3.Write(d_gauge[i]); // sw3.Write(","); // sw3.Write(d_wx[i]); // sw3.Write("\n"); //} List <String> tmpDataStrList = pdc.WideGaugePreProcess("左高低_中波", d_tt, d_wx, d_wvelo, d_gauge, 8.0); dataStrList.AddRange(tmpDataStrList); d_wx = cfprocess.GetOneChannelDataInRange(citFileName, cdlist.GetChannelIdByName("R_Prof_SC", "右高低_中波"), startPos, endPos); tmpDataStrList = pdc.WideGaugePreProcess("右高低_中波", d_tt, d_wx, d_wvelo, d_gauge, 8.0); dataStrList.AddRange(tmpDataStrList); d_wx = cfprocess.GetOneChannelDataInRange(citFileName, cdlist.GetChannelIdByName("L_Align_SC", "左轨向_中波"), startPos, endPos); tmpDataStrList = pdc.WideGaugePreProcess("左轨向_中波", d_tt, d_wx, d_wvelo, d_gauge, 8.0); dataStrList.AddRange(tmpDataStrList); d_wx = cfprocess.GetOneChannelDataInRange(citFileName, cdlist.GetChannelIdByName("R_Align_SC", "右轨向_中波"), startPos, endPos); tmpDataStrList = pdc.WideGaugePreProcess("右轨向_中波", d_tt, d_wx, d_wvelo, d_gauge, 8.0); dataStrList.AddRange(tmpDataStrList); //分段读取方法//////////////////// startPos = endPos; } //sw3.Close(); //分段读取方法//////////////////// return(dataStrList); }
/// <summary> /// 接口函数:计算峰峰值指标 /// </summary> /// <param name="citFileName">cit文件全路径</param> /// <param name="citFileName">idf文件全路径</param> /// <returns></returns> private List <String> PreProcessDeviation2(String citFileName, int pointCount, string idfFileName = null) { List <String> dataStrList = new List <String>(); cdlist.channelDefinitionList = cfprocess.GetChannelDefinitionList(citFileName); fileinfo = cfprocess.GetFileInformation(citFileName); //int tds = fileinfo.iChannelNumber; long[] position = cfprocess.GetPositons(citFileName); long startPos = position[0]; //开始位置、结束位置 long endPos = position[1]; List <Milestone> allmilelist; List <Milestone> milelist = cfprocess.GetAllMileStone(citFileName); //验证是否修正 if (!String.IsNullOrEmpty(idfFileName)) { IndexOperator _op = new IndexOperator(); _op.IndexFilePath = idfFileName; MilestoneFix mile = new MilestoneFix(citFileName, _op); mile.ReadMilestoneFixTable(); allmilelist = mile.GetMileageReviseData(milelist); } else { allmilelist = milelist; } //开始里程 和结束里程 double[] d_tt = new double[allmilelist.Count]; for (int i = 0; i < allmilelist.Count; i++) { double obj = allmilelist[i].GetMeter() / 1000; d_tt[i] = obj; } double[] d_wvelo = cfprocess.GetOneChannelDataInRange(citFileName, cdlist.GetChannelIdByName("Speed", "速度"), startPos, endPos); double[] d_gauge = cfprocess.GetOneChannelDataInRange(citFileName, cdlist.GetChannelIdByName("Gage", "轨距"), startPos, endPos); double[] d_wx = cfprocess.GetOneChannelDataInRange(citFileName, cdlist.GetChannelIdByName("L_Prof_SC", "左高低_中波"), startPos, endPos); //StreamWriter sw2 = new StreamWriter("d:/peakvalue_all.csv", true, Encoding.Default); //StringBuilder sbtmp = new StringBuilder(); //sbtmp.Append("d_tt,"); //sbtmp.Append("d_wvelo,"); //sbtmp.Append("d_gauge,"); //sbtmp.Append("d_wx"); //sw2.WriteLine(sbtmp.ToString()); //for (int i = 0; i < d_tt.Length; i++) //{ // sw2.Write(d_tt[i]); // sw2.Write(","); // sw2.Write(d_wvelo[i]); // sw2.Write(","); // sw2.Write(d_gauge[i]); // sw2.Write(","); // sw2.Write(d_wx[i]); // sw2.Write("\n"); //} //sw2.Close(); List <String> tmpDataStrList = pdc.WideGaugePreProcess("左高低_中波", d_tt, d_wx, d_wvelo, d_gauge, 8.0); dataStrList.AddRange(tmpDataStrList); d_wx = cfprocess.GetOneChannelDataInRange(citFileName, cdlist.GetChannelIdByName("R_Prof_SC", "右高低_中波"), startPos, endPos); tmpDataStrList = pdc.WideGaugePreProcess("右高低_中波", d_tt, d_wx, d_wvelo, d_gauge, 8.0); dataStrList.AddRange(tmpDataStrList); d_wx = cfprocess.GetOneChannelDataInRange(citFileName, cdlist.GetChannelIdByName("L_Align_SC", "左轨向_中波"), startPos, endPos); tmpDataStrList = pdc.WideGaugePreProcess("左轨向_中波", d_tt, d_wx, d_wvelo, d_gauge, 8.0); dataStrList.AddRange(tmpDataStrList); d_wx = cfprocess.GetOneChannelDataInRange(citFileName, cdlist.GetChannelIdByName("R_Align_SC", "右轨向_中波"), startPos, endPos); tmpDataStrList = pdc.WideGaugePreProcess("右轨向_中波", d_tt, d_wx, d_wvelo, d_gauge, 8.0); dataStrList.AddRange(tmpDataStrList); return(dataStrList); }