/// <summary>
        /// 构造函数,参数为大地坐标
        /// </summary>
        /// <param name="start">大地坐标</param>
        /// <param name="end">大地坐标</param>
        public LineCrossGrid3D(Point start, Point end)
        {
            this.isCalc = this.Init();
            if (!this.isCalc)
            {
                return;
            }
            GridHelper.getInstance().getMaxGGridXY(ref this.maxgxid, ref this.maxgyid);

            this.isCalc = !PointComparer.Equals1(start, end) && GridHelper.getInstance().PointXYZToGrid3D(start, ref this.cur);
            if (!this.isCalc)
            {
                return;
            }

            Vector3D dir = Vector3D.constructVector(start, end);

            this.line.setLine(start, dir);

            this.stepx = (this.line.paraEqua.X < 0 ? -1 : 1);
            this.stepy = (this.line.paraEqua.Y < 0 ? -1 : 1);
            this.stepz = (this.line.paraEqua.Z < 0 ? -1 : 1);

            Point ingrid = new Point();

            this.isCalc = GridHelper.getInstance().PointXYZInGrid3D(start, ref ingrid);
            if (!this.isCalc)
            {
                return;
            }

            if (Math.Round(this.line.paraEqua.X, 3) == 0)
            {
                this.tx = this.dx = maxlength;
            }
            else if (this.line.paraEqua.X > 0)
            {
                this.dx = this.gridlength / this.line.paraEqua.X;
                this.tx = (this.gridlength - ingrid.X) / this.line.paraEqua.X;
            }
            else
            {
                this.dx = this.gridlength / (0 - this.line.paraEqua.X);
                this.tx = ingrid.X / (0 - this.line.paraEqua.X);
            }

            if (Math.Round(this.line.paraEqua.Y, 3) == 0)
            {
                this.ty = this.dy = maxlength;
            }
            else if (this.line.paraEqua.Y > 0)
            {
                this.dy = this.gridlength / this.line.paraEqua.Y;
                this.ty = (this.gridlength - ingrid.Y) / this.line.paraEqua.Y;
            }
            else
            {
                this.dy = this.gridlength / (0 - this.line.paraEqua.Y);
                this.ty = ingrid.Y / (0 - this.line.paraEqua.Y);
            }

            if (Math.Round(this.line.paraEqua.Z, 3) == 0)
            {
                this.tz = this.dz = maxlength;//因为tz太大,dz随便定义
            }
            else if (this.line.paraEqua.Z > 0)
            {
                this.dz = this.vgridsize / this.line.paraEqua.Z;
                this.tz = (this.vgridsize - ingrid.Z) / this.line.paraEqua.Z;
            }
            else if (this.line.paraEqua.Z < 0)
            {
                this.dz = this.vgridsize / (0 - this.line.paraEqua.Z);
                this.tz = ingrid.Z / (0 - this.line.paraEqua.Z);
            }
        }