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);
        }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
0
        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;
            }
        }