Example #1
0
        /// <summary>
        /// 获取原始通道数据 KM 和sample
        /// </summary>
        /// <param name="sFile"></param>
        /// <returns></returns>
        public List <int[]> GetMileChannelData(string sFile)
        {
            using (FileStream fs = new FileStream(sFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                using (BinaryReader br = new BinaryReader(fs, Encoding.Default))
                {
                    br.BaseStream.Position = 0;
                    GEO_FILE_HEADER gfh = GetDataInfoHead(br.ReadBytes(GEO_FILE_HEADER_SIZE));
                    //添加通道信息
                    iChannelLength = BitConverter.ToInt16(br.ReadBytes(2), 0);
                    iChannelCount  = BitConverter.ToInt16(br.ReadBytes(2), 0);

                    br.BaseStream.Position = 0;
                    br.ReadBytes(GEO_FILE_HEADER_SIZE);
                    br.ReadBytes(4);
                    br.ReadBytes(iChannelLength - 2);

                    int    iChannelNumberSize = (gfh.data_record_length);
                    byte[] b = new byte[iChannelNumberSize];
                    //if (iType == 10)
                    //{
                    //    iChannelCount -= 1;
                    //}
                    //else
                    //{

                    //}

                    List <int> kmList = new List <int>();
                    List <int> mList  = new List <int>();

                    while (br.BaseStream.Position < br.BaseStream.Length)
                    {
                        b = br.ReadBytes(iChannelNumberSize);
                        int iGeometryRecordId = BitConverter.ToInt16(b, 0);
                        if (iGeometryRecordId != GEOMETRY_RECORD_ID)
                        {
                            continue;
                        }
                        short sKM = BitConverter.ToInt16(b, 4 * 2);
                        short sM  = BitConverter.ToInt16(b, 5 * 2);

                        kmList.Add(sKM);
                        mList.Add(sM);
                    }
                    br.Close();
                    fs.Close();

                    List <int[]> listData = new List <int[]>();
                    listData.Add(kmList.ToArray());
                    listData.Add(mList.ToArray());

                    return(listData);
                }
            }
        }
Example #2
0
 public GEO_FILE_HEADER GetDataInfoHead(string sFile)
 {
     try
     {
         using (FileStream fs = new FileStream(sFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
         {
             using (BinaryReader br = new BinaryReader(fs, Encoding.Default))
             {
                 br.BaseStream.Position = 0;
                 GEO_FILE_HEADER gfh = GetDataInfoHead(br.ReadBytes(GEO_FILE_HEADER_SIZE));
                 br.Close();
                 fs.Close();
                 return(gfh);
             }
         }
     }
     catch (Exception ex)
     {
         throw new Exception(ex.Message, ex);
     }
 }
Example #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sFile"></param>
        /// <returns></returns>
        public List <DataChannelInfo> GetDataChannel(string sFile)
        {
            using (FileStream fs = new FileStream(sFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                using (BinaryReader br = new BinaryReader(fs, Encoding.Default))
                {
                    br.BaseStream.Position = 0;
                    GEO_FILE_HEADER gfh = GetDataInfoHead(br.ReadBytes(GEO_FILE_HEADER_SIZE));
                    //添加通道信息
                    iChannelLength = BitConverter.ToInt16(br.ReadBytes(2), 0);
                    iChannelCount  = BitConverter.ToInt16(br.ReadBytes(2), 0);

                    StringBuilder          sbName = new StringBuilder();
                    List <DataChannelInfo> dciL   = new List <DataChannelInfo>();
                    byte[] bChannelData           = br.ReadBytes(iChannelLength - 2);

                    for (int j = 0; j < iChannelLength - 2;)
                    {
                        DataChannelInfo dci = GetChannelInfo(bChannelData, ref j);
                        dciL.Add(dci);
                        if (dciL.Count > iChannelCount)
                        {
                            break;
                        }
                        //if (iType == 10)
                        //{
                        //    if (dci.sNameEn.ToLower().Contains("null"))
                        //    {
                        //        break;
                        //    }
                        //}
                    }

                    return(dciL);
                }
            }
        }
Example #4
0
        /// <summary>
        /// 按照结构体读取各个数据
        /// </summary>
        /// <param name="bDataInfo"></param>
        /// <returns></returns>
        private GEO_FILE_HEADER GetDataInfoHead(byte[] bDataInfo)
        {
            GEO_FILE_HEADER gfh = new GEO_FILE_HEADER();

            gfh.file_version       = BitConverter.ToInt16(bDataInfo, 0);
            gfh.dir_flag           = BitConverter.ToInt16(bDataInfo, 2);
            gfh.data_record_length = BitConverter.ToInt32(bDataInfo, 4);
            gfh.sample_interval    = BitConverter.ToSingle(bDataInfo, 8);
            gfh.post_units         = BitConverter.ToSingle(bDataInfo, 12);

            //获取GEO Date
            StringBuilder sbDate = new StringBuilder();

            for (int i = 0; i < 8; i++)
            {
                if (bDataInfo[42 + i] == 0)
                {
                    break;
                }
                sbDate.Append(UnicodeEncoding.Default.GetString(bDataInfo, 42 + i, 1));
            }
            gfh.date = sbDate.ToString();

            //获取GEO Time
            StringBuilder sbTime = new StringBuilder();

            for (int i = 0; i < 8; i++)
            {
                if (bDataInfo[54 + i] == 0)
                {
                    break;
                }
                sbTime.Append(UnicodeEncoding.Default.GetString(bDataInfo, 54 + i, 1));
            }
            gfh.time = sbTime.ToString();

            //获取GEO Area
            StringBuilder sbArea = new StringBuilder();

            for (int i = 0; i < 60; i++)
            {
                if (bDataInfo[66 + i] == 0)
                {
                    break;
                }
                sbArea.Append(UnicodeEncoding.Default.GetString(bDataInfo, 66 + i, 1));
            }
            gfh.area = sbArea.ToString();

            //获取GEO Division
            StringBuilder sbDivision = new StringBuilder();

            for (int i = 0; i < 16; i++)
            {
                if (bDataInfo[130 + i] == 0)
                {
                    break;
                }
                sbDivision.Append(UnicodeEncoding.Default.GetString(bDataInfo, 130 + i, 1));
            }
            gfh.division = sbDivision.ToString();

            //获取GEO Region
            StringBuilder sbRegion = new StringBuilder();

            for (int i = 0; i < 16; i++)
            {
                if (bDataInfo[150 + i] == 0)
                {
                    break;
                }
                sbRegion.Append(UnicodeEncoding.Default.GetString(bDataInfo, 150 + i, 1));
            }
            gfh.region = sbRegion.ToString();

            return(gfh);
        }