/// <summary>
        /// 根据里程信息获取采样值,换算为采样点个数,同时获取坐标位置
        /// </summary>
        /// <param name="mileage">里程,单位为米</param>
        /// <param name="locationPostion"></param>
        /// <returns>采样点个数</returns>
        public long GetLocationSampleCount(float mileage, ref long locationPostion)
        {
            if (IsLoadIndex)
            {
                //if (CitFile.iKmInc == 0)
                //{

                //    Milestone stone= MileageFix.CalcMilestoneByFixedMilestone(mileage);
                //    //Milestone stone = _allStone.FindLast(p => p.GetMeter() <= mileage);
                //    if (stone != null)
                //    {
                //        locationPostion = stone.mFilePosition;
                //    }
                //    else
                //    {
                //        locationPostion = -1;
                //    }
                //}
                //else
                //{
                //    //Milestone stone = _allStone.FindLast(p => p.GetMeter() >= mileage);
                //    long postion = CitFileProcess.GetCurrentPositionByMilestone(_citFilePath, mileage, true);
                //    if (postion != -1)
                //    {
                //        locationPostion = postion;
                //    }
                //    else
                //    {
                //        locationPostion = -1;
                //    }
                //}
                Milestone stone = MileageFix.CalcMilestoneByFixedMilestone(mileage);
                if (stone != null)
                {
                    locationPostion = stone.mFilePosition;
                }
                else
                {
                    locationPostion = -1;
                }
            }
            else
            {
                locationPostion = CitFileProcess.GetCurrentPositionByMilestone(_citFilePath, mileage, true);
            }
            if (locationPostion != -1)
            {
                return(GetLocationSampleCount(locationPostion));
            }
            return(-1);
        }
        /// <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));
            }
        }