public void loadTrjfile(string trjfile, double Md)
        {
            double       time_interval = 0;//时间间隔
            FileStream   fs            = new FileStream(trjfile, FileMode.Open, FileAccess.Read);
            StreamReader sr            = new StreamReader(fs);
            int          i             = 0;

            if (_trj == null)
            {
                _trj = new Trajectory();
            }
            else
            {
                _trj.Clear();
            }

            if (_ext == null)
            {
                _ext = new MBR();
            }
            else
            {
                _ext.reset();
            }

            //mode
            string line = sr.ReadLine();

            while (line != null)
            {
                if (line == "X\tY\tT\tS\tD")
                {
                    line = sr.ReadLine();
                    continue;
                }
                string[] items = line.Split(new char[] { '\t' });

                double x = double.Parse(items[0]);
                double y = double.Parse(items[1]);
                //DateTime.Parse(items[0])
                DateTime t         = Convert.ToDateTime(items[2]);
                double   speed     = double.Parse(items[3]);
                double   direction = double.Parse(items[4]);

                if (i > 0)
                {
                    //以s为时间间隔进行读取
                    TimeSpan ts = t.Subtract(_trj[_trj.Count - 1].T).Duration();
                    if (Convert.ToDouble(ts.TotalSeconds) < time_interval)
                    {
                        line = sr.ReadLine();
                        continue;
                    }
                    if (Math.Abs(x - _trj[_trj.Count - 1].X) < 0.00000001 && Math.Abs(y - _trj[_trj.Count - 1].Y) < 0.00000001)//剔除重复的点!!!
                    {
                        line = sr.ReadLine();
                        continue;
                    }
                    if (Point.Distance(x, y, _trj[_trj.Count - 1].X, _trj[_trj.Count - 1].Y) < 20)//聚集点除噪音 && long.Parse(items[0]) != 1381604233
                    {
                        line = sr.ReadLine();
                        continue;
                    }
                }
                Point p = new Point(t, x, y, direction, speed);
                _trj.Add(p);
                _ext.unionWith(p);


                if (i > 0)
                {
                    //斜率约束
                    if (i % 5 == 4)
                    {
                        Point p1 = _trj[_trj.Count - 5];
                        Point p2 = _trj[_trj.Count - 4];
                        Point p4 = _trj[_trj.Count - 2];
                        Point p5 = _trj[_trj.Count - 1];

                        double m1 = (p2.Y - p1.Y) / (p2.X - p1.X);
                        double m2 = (p5.Y - p4.Y) / (p5.X - p4.X);

                        if (Math.Abs(m2 - m1) <= Md)
                        {
                            _trj[_trj.Count - 3].X = (p2.X + p4.X) / 2;
                            _trj[_trj.Count - 3].Y = (p2.Y + p4.Y) / 2;
                        }
                    }
                }

                i++;

                line = sr.ReadLine();
            }

            sr.Close();
            fs.Close();

            _trj_size = _trj.Count;
        }