/// <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)); } }