コード例 #1
0
        /// <summary>
        /// 里程与修正后的里程做对比,然后根据修正后的里程找到点(文件中的指针)
        /// </summary>
        /// <param name="addFileName">idf文件</param>
        /// <param name="mi">输入的里程(单位为公里)</param>
        /// <returns>当前点在修正后的里程中相对应的文件指针</returns>
        private long MeterToPointNew(DataInfoClass dic, float mi, out IndexStaClass indexStaClsout, out int resultType)
        {
            List <IndexStaClass> listIndexStaCls = CommonClass.wdp.GetDataIndexInfo(dic.sAddFile);
            float len        = 0;
            long  currentPos = 0;

            indexStaClsout = new IndexStaClass();
            resultType     = 0;//代表在校正里程里没有找到里程点,并且在文件原始里程中也找不到。
            foreach (IndexStaClass indexStaCls in listIndexStaCls)
            {
                if (dic.sKmInc == "增")
                {
                    if (mi > float.Parse(indexStaCls.lStartMeter) && mi <= float.Parse(indexStaCls.LEndMeter))
                    {
                        len = mi - float.Parse(indexStaCls.lStartMeter);
                    }
                }
                else
                {
                    if (mi < float.Parse(indexStaCls.lStartMeter) && mi >= float.Parse(indexStaCls.LEndMeter))
                    {
                        len = float.Parse(indexStaCls.lStartMeter) - mi;
                    }
                }

                if (len != 0)
                {
                    currentPos     = indexStaCls.lStartPoint + (long)((float)(len * indexStaCls.lContainsPoint) / float.Parse(indexStaCls.lContainsMeter)) * dic.fScale.Length * 2;
                    indexStaClsout = indexStaCls;
                    resultType     = 1;//代表在校正后的里程范围中找到测量点
                    break;
                }
            }
            if (len == 0)
            {
                /*
                 * 遍历结束,里程点不在indexStaClass的范围内。有两种情况:
                 * 一:输入的里程点不在cit文件的里程范围内。返回0.
                 * 二:cit文件还没有经过里程校正,直接寻找文件中的里程,找到则返回,否则返回0.
                 */
                currentPos = CommonClass.wdp.MeterToPoint(dic.sFilePath, (long)(mi * 10000), 4, dic.fOffset.Length, dic.bEncrypt);
                if (currentPos != 0)
                {
                    resultType = 2;//代表在文件中的原始数据找到测量点
                }
            }

            //FileStream fs = new FileStream(dic.sFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            //BinaryReader br = new BinaryReader(fs);
            //br.BaseStream.Position = indexStaClsout.lStartPoint;
            //Byte[] b = br.ReadBytes(dic.fScale.Length * 2);
            //if (dic.bEncrypt)
            //{
            //    b = WaveformDataProcess.ByteXORByte(b);
            //}
            //short km = BitConverter.ToInt16(b, 0);
            //short count = BitConverter.ToInt16(b, 2);

            return(currentPos);
        }
コード例 #2
0
        /// <summary>
        ///  idf数据库操作:查询--IndexSta表格
        /// </summary>
        /// <param name="sFile">idf全路径文件名</param>
        /// <returns>修正索引信息</returns>
        public List <IndexStaClass> GetDataIndexInfo(string sFile)
        {
            List <IndexStaClass> listIC = new List <IndexStaClass>();

            try
            {
                using (OleDbConnection sqlconn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sFile + ";Persist Security Info=False"))
                {
                    OleDbCommand sqlcom = new OleDbCommand("select * from IndexSta order by id", sqlconn);
                    sqlconn.Open();
                    OleDbDataReader sqloledr = sqlcom.ExecuteReader();
                    while (sqloledr.Read())
                    {
                        IndexStaClass ic = new IndexStaClass();
                        ic.iID            = (int)sqloledr.GetInt32(0);
                        ic.iIndexID       = (int)sqloledr.GetInt32(1);
                        ic.lStartPoint    = long.Parse(sqloledr.GetString(2));
                        ic.lStartMeter    = sqloledr.GetString(3);
                        ic.lEndPoint      = long.Parse(sqloledr.GetString(4));
                        ic.LEndMeter      = sqloledr.GetString(5);
                        ic.lContainsPoint = long.Parse(sqloledr.GetString(6));
                        ic.lContainsMeter = sqloledr.GetString(7);
                        ic.sType          = sqloledr.GetString(8);

                        listIC.Add(ic);
                    }
                    sqlconn.Close();
                }
            }
            catch
            {
            }
            return(listIC);
        }
コード例 #3
0
        /// <summary>
        /// 把测量半径转化为在cit文件中实际上(里程校正之后)覆盖的测量点的个数(默认是一米4个点)
        /// </summary>
        /// <param name="meterageRadius">测量半径(单位为米)</param>
        /// <param name="indexStaCls">取测量点的区域</param>
        /// <returns>测量半径覆盖的测量点的个数(默认是一米4个点)</returns>
        public int GetDotFromMeterageRadius(int m_meterageRadius, IndexStaClass indexStaCls)
        {
            int dotNum = 0;

            dotNum = (int)(m_meterageRadius * indexStaCls.lContainsPoint / (float.Parse(indexStaCls.lContainsMeter) * 1000));

            return(dotNum);
        }