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 UnFixCalc(string citFilePath, int mileUnitValue, string exportFilePath, float startMile, float endMile) { /* 左高低_中波 * 右高低_中波 * 左轨向_中波 * 右轨向_中波 * 轨距 * 水平 * 三角坑 * */ string[] sTQIItem = new string[] { "L_Prof_SC", "R_Prof_SC", "L_Align_SC", "R_Align_SC", "Gage", "Crosslevel", "Short_Twist", "LACC", "VACC", "Speed" }; int[] sTQIItemIndex = new int[sTQIItem.Length]; channelList = citProcess.GetChannelDefinitionList(citFilePath); for (int i = 0; i < sTQIItem.Length; i++) { for (int j = 0; j < channelList.Count; j++) { if (sTQIItem[i].Equals(channelList[j].sNameEn)) { sTQIItemIndex[i] = j; break; } } } long startPos = 0; long endPos = 0; long[] positions = citProcess.GetPositons(citFilePath); startPos = positions[0]; endPos = positions[1]; if (startMile != 0) { startPos = citProcess.GetCurrentPositionByMilestone(citFilePath, startMile, true); if (startPos == -1) { throw new Exception("未找到对应开始里程的位置"); } } if (endMile != 0) { endPos = citProcess.GetCurrentPositionByMilestone(citFilePath, endMile, true); if (endPos == -1) { throw new Exception("未找到对应结束里程的位置"); } } long tempPos = 0; if (startPos > endPos) { tempPos = startPos; startPos = endPos; endPos = tempPos; } int positionCount = mileUnitValue * 4; long range = citProcess.GetSampleCountByRange(citFilePath, startPos, endPos); long divisor = range / positionCount; long residue = range % positionCount; long tempStartPos = startPos; long tempEndPos = 0; for (int i = 0; i < divisor; i++) { tempEndPos = citProcess.GetAppointEndPostion(citFilePath, tempStartPos, positionCount); GetChannelData(citFilePath, tempStartPos, tempEndPos, sTQIItemIndex); tempStartPos = tempEndPos; } ExportExcel(exportFilePath, tqilist); }
/// <summary> /// 获取里程修正后的数据 /// </summary> /// <param name="citFile">cit文件路径</param> /// <param name="idfFile">索引文件路径</param> /// <param name="sourceMilestongList">未修正的里程数据</param> /// <returns>修正后的里程数据</returns> public List <Milestone> GetMileageReviseData(List <Milestone> sourceMilestongList) { List <Milestone> reviseMilestongList = new List <Milestone>(sourceMilestongList); int indexRevise = 0; if (_fixData != null && _fixData.Count > 0) { for (int i = 0; i < _fixData.Count; i++) { int mileStoneStartIndex = -1; int mileStoneEndIndex = -1; float sampleDistance = 0; long sampleCount = 0; if (reviseMilestongList[indexRevise].mFilePosition >= _fixData[i].MarkedStartPoint.FilePointer) { mileStoneStartIndex = reviseMilestongList.FindIndex(p => p.mFilePosition == reviseMilestongList[indexRevise].mFilePosition); sampleDistance = _fixData[i].SampleRate; sampleCount = _citProcess.GetSampleCountByRange(_citFilePath, _fixData[i].MarkedStartPoint.FilePointer, reviseMilestongList[indexRevise].mFilePosition); if (reviseMilestongList[reviseMilestongList.Count - 1].mFilePosition <= _fixData[i].MarkedEndPoint.FilePointer) { mileStoneEndIndex = reviseMilestongList.FindIndex(m => m.mFilePosition == reviseMilestongList[reviseMilestongList.Count - 1].mFilePosition); } else { mileStoneEndIndex = reviseMilestongList.FindIndex(m => m.mFilePosition == _fixData[i].MarkedEndPoint.FilePointer); if (mileStoneEndIndex == -1) { continue; } else { indexRevise = mileStoneEndIndex; } } int index = 0; bool isChain = false; long currentMileage = 0; double startMileage = _fixData[i].MarkedStartPoint.UserSetMileage + sampleDistance * (sampleCount); for (int j = mileStoneStartIndex; j <= mileStoneEndIndex; j++) { double kMiles = (startMileage + index * sampleDistance) / 1000; int chainIndex = _fixData[i].Chains.FindIndex(m => m.Km == (long)kMiles); if (isChain || chainIndex != -1) { if (isChain == false && chainIndex != -1) { currentMileage = (long)kMiles; isChain = true; } reviseMilestongList[j].mKm = currentMileage; reviseMilestongList[j].mMeter = (float)(kMiles - reviseMilestongList[j].mKm) * 1000; if (_fixData[i].Chains[chainIndex].IsLongChain()) { if (reviseMilestongList[j].mMeter >= (1000 + _fixData[i].Chains[chainIndex].ExtraLength)) { reviseMilestongList[j].mKm = currentMileage + 1; reviseMilestongList[j].mMeter = reviseMilestongList[j].mMeter - (1000 + _fixData[i].Chains[chainIndex].ExtraLength); startMileage = reviseMilestongList[j].mKm; isChain = false; } } else { if (reviseMilestongList[j].mMeter >= (1000 + _fixData[i].Chains[chainIndex].ExtraLength)) { reviseMilestongList[j].mKm = currentMileage + 1; reviseMilestongList[j].mMeter = reviseMilestongList[j].mMeter - (1000 + _fixData[i].Chains[chainIndex].ExtraLength); startMileage = reviseMilestongList[j].mKm; isChain = false; } } } else { reviseMilestongList[j].mKm = (long)kMiles; reviseMilestongList[j].mMeter = (float)Math.Round((kMiles - reviseMilestongList[j].mKm) * 1000, 2); } index++; } if (mileStoneEndIndex == reviseMilestongList.Count - 1) { break; } } } } return(reviseMilestongList); }
public void DisplayInListview(string citPath) { FileInformation fileInfo = null; double startMileage = 0; double endMileage = 0; double totalMileage = 0; try { fileInfo = _citProcess.GetFileInformation(citPath); long[] startAndEnd = _citProcess.GetPositons(citPath); Milestone start = _citProcess.GetStartMilestone(citPath); Milestone end = _citProcess.GetEndMilestone(citPath); startMileage = start.GetMeter() / 1000; endMileage = end.GetMeter() / 1000; long sampleCount = _citProcess.GetSampleCountByRange(citPath, startAndEnd[0], startAndEnd[1]); totalMileage = (sampleCount * 0.25) / 1000; } catch (Exception ex) { MyLogger.logger.Error("读取文件头部信息出错:" + ex.Message + ",堆栈:" + ex.StackTrace + ",CIT文件名称:" + citPath); MessageBox.Show("读取文件头部信息出错,请检查文件是否有效!"); } if (fileInfo != null) { //线路名 ListViewItem item = new ListViewItem(fileInfo.sTrackName); //线路编码 item.SubItems.Add(fileInfo.sTrackCode); //行别 string dir = string.Empty; switch (fileInfo.iDir) { case 1: { dir = "上行"; break; } case 2: { dir = "下行"; break; } case 3: { dir = "单线"; break; } default: { dir = "上行"; break; } } item.SubItems.Add(dir); if (dir.Contains("下")) { item.BackColor = Color.LightCyan; } else { item.BackColor = Color.LightBlue; } //方向 item.SubItems.Add(fileInfo.iRunDir == 0 ? "正" : "反"); //增减里程 item.SubItems.Add(fileInfo.iKmInc == 0 ? "增" : "减"); item.SubItems.Add(startMileage.ToString()); //起始里程 item.SubItems.Add(endMileage.ToString()); //终止里程 item.SubItems.Add(totalMileage.ToString()); //总里程 //检测日期 item.SubItems.Add(fileInfo.sDate); //检测时间 item.SubItems.Add(fileInfo.sTime); //检测车号 item.SubItems.Add(fileInfo.sTrain); //原始文件名 item.SubItems.Add(Path.GetFileName(citPath)); //大小 item.SubItems.Add((new FileInfo(citPath)).Length.ToString()); //原始路径 item.SubItems.Add(Path.GetDirectoryName(citPath)); //ListViewItem.ListViewSubItem subItem = new ListViewItem.ListViewSubItem(); //subItem.ForeColor = Color.Red; //subItem.Text = "点击移除"; item.SubItems.Add("点击移除"); item.Tag = fileInfo; item.Checked = true; listViewFiles.Items.Add(item); listViewFiles.Columns[listViewFiles.Columns.Count - 1].Width = -2; } }