Exemple #1
0
 /// <summary>
 /// 地上视角
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void button7_Click(object sender, EventArgs e)
 {
     //如果之前是地下视角,则重新设置视角,如果不是,就只改变状态
     if (globeControl1.Globe.CameraMode == EnumCameraMode.UnderGround)
     {
         //视角变更为普通
         globeControl1.Globe.CameraMode = EnumCameraMode.Navigation;
         //把当前的摄像机状态复制
         GSOCameraState state = globeControl1.Globe.CameraState;
         //设定俯仰角度
         if (globeControl1.Globe.CameraState.Tilt < 95 && globeControl1.Globe.CameraState.Tilt > 85)
         {
             state.Tilt = 85;
         }
         else
         {
             state.Tilt = 180 - globeControl1.Globe.CameraState.Tilt;
         }
         //跳转
         globeControl1.Globe.JumpToCameraState(state);
     }
     else
     {
         globeControl1.Globe.CameraMode = EnumCameraMode.Navigation;
     }
 }
 //海水
 private void btn_Ocean_Click(object sender, EventArgs e)
 {
     //关闭海水
     if (_glbControl.Globe.Ocean.Visible)
     {
         //海洋效果关闭
         _glbControl.Globe.Ocean.Visible = false;
         // 移除所有船尾迹
         _glbControl.Globe.Ocean.RemoveAllShipWake();
         // 移除所有涡轮效果
         _glbControl.Globe.Ocean.RemoveAllRotorWash();
         //移除所有要素
         _glbControl.Globe.MemoryLayer.RemoveAllFeature();
         btn_Ocean.Text = "开启海水";
     }
     //开启海水
     else
     {
         //海洋效果开启
         _glbControl.Globe.Ocean.Visible = true;
         //设置飞行到水面上
         GSOCameraState camera = new GSOCameraState();
         camera.Latitude  = 0;
         camera.Longitude = 0;
         camera.Distance  = 500;
         camera.Tilt      = 45;
         _glbControl.Globe.JumpToCameraState(camera);
         btn_Ocean.Text = "关闭海水";
     }
 }
Exemple #3
0
        /// <summary>
        /// 创建点
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAddPoint_Click(object sender, EventArgs e)
        {
            GSOGeoMarker point = new GSOGeoMarker();                                          //创建点对象

            point.X            = 120.417888231016;                                            //设置点X的值,单位为度
            point.Y            = 31.3283140323302;                                            //设置点Y的值,单位为度
            point.Z            = 20;                                                          //设置点Z的值,单位为米
            point.AltitudeMode = EnumAltitudeMode.RelativeToGround;                           //设置点的高程模式,设置为相对地面。则点的为(X,Y)处地面高程上方100米(point.Z = 100)
            point.Text         = "中科图新";                                                      //设置点对象显示的文字
            GSOMarkerStyle3D mstyle = new GSOMarkerStyle3D();                                 //新建点样式

            mstyle.IconPath = Application.StartupPath + "\\Resource\\image\\DefaultIcon.png"; //设置图标路径
            point.Style     = mstyle;                                                         //把显示风格
            GSOFeature feature = new GSOFeature();                                            //创建几何要素

            feature.Geometry = point;                                                         //把点赋予集合要素
            feature.Name     = point.Text;                                                    //赋予名字
            globeControl1.Globe.MemoryLayer.AddFeature(feature);                              //将要素添加到图层中

            //下面不属于工程内容,只是飞到点的位置
            GSOCameraState cs = new GSOCameraState();

            cs.Longitude = point.X;
            cs.Latitude  = point.Y;
            cs.Altitude  = 1000;
            globeControl1.Globe.FlyToCameraState(cs);
        }
        //导弹动画
        private void btn_Missile_Click(object sender, EventArgs e)
        {
            //创建相机状态
            GSOCameraState camera = new GSOCameraState();

            camera.Longitude    = 100.42875293029;
            camera.Latitude     = 38.9355930610869;
            camera.Distance     = 12209.9485092387;
            camera.Heading      = -92.7905229605158;
            camera.Tilt         = 68.5957814133134;
            camera.Altitude     = 1490.27994062379;
            camera.AltitudeMode = EnumAltitudeMode.Absolute;
            //添加.lgd图层
            _glbControl.Globe.JumpToCameraState(camera);

            //添加.lgd图层
            GSOLayer layer = _glbControl.Globe.Layers.Add(_missileAnimatePath);

            if (layer != null)
            {
                //添加.gla动画文件
                GSOAnimationPage page = _glbControl.Globe.AnimationPages.AddAnimationPage(_missileAnimatePath.Replace(".lgd", ".gla"));
                if (page != null)
                {
                    page.RepeatCount = 1;
                    page.Play();
                }
            }
        }
Exemple #5
0
        /// <summary>
        /// 正北方向
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {
            //设置视角为当前视角,不会改变经纬度
            GSOCameraState camestate = globeControl1.Globe.CameraState;

            camestate.Heading = 0.0;
            globeControl1.Globe.JumpToCameraState(camestate);
        }
Exemple #6
0
        /// <summary>
        /// 全球视角
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            GSOCameraState camestate = new GSOCameraState();

            camestate.Longitude = 109.07286491474;
            camestate.Latitude  = 37.3716091749733;
            camestate.Distance  = 20732473.52;
            globeControl1.Globe.JumpToCameraState(camestate);
        }
Exemple #7
0
        /// <summary>
        /// 飞行到lfp的中心点
        /// </summary>
        /// <param name="layer"></param>
        private void flyToLFPLayer(GSOLayer layer)
        {
            try
            {
                if (layer == null)
                {
                    return;
                }
                string lfpString = "";
                using (StreamReader reader = new StreamReader(layer.Name))
                {
                    lfpString = reader.ReadToEnd();
                }

                int      indexPosition    = lfpString.IndexOf("<Position>");
                int      indexPositionEnd = lfpString.IndexOf("</Position>");
                string   position         = lfpString.Substring(indexPosition + 10, indexPositionEnd - indexPosition - 10);
                double   x             = 0.0;
                double   y             = 0.0;
                double   z             = 0.0;
                string[] positionArray = position.Split(',');
                for (int i = 0; i < positionArray.Length; i++)
                {
                    if (i == 0)
                    {
                        if (double.TryParse(positionArray[i], out x))
                        {
                        }
                    }
                    else if (i == 1)
                    {
                        if (double.TryParse(positionArray[i], out y))
                        {
                        }
                    }
                    else if (i == 2)
                    {
                        if (double.TryParse(positionArray[i], out z))
                        {
                        }
                    }
                }
                GSOCameraState camestate = new GSOCameraState();
                camestate.Longitude = x;
                camestate.Latitude  = y;
                camestate.Distance  = 1500;
                globeControl1.Globe.JumpToCameraState(camestate);
            }
            catch (Exception e)
            {
            }
        }
Exemple #8
0
        /// <summary>
        /// 地下视角
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button9_Click(object sender, EventArgs e)
        {
            globeControl1.Globe.CameraMode = EnumCameraMode.UnderGround;
            GSOCameraState state = globeControl1.Globe.CameraState;

            if (globeControl1.Globe.CameraState.Tilt < 95 && globeControl1.Globe.CameraState.Tilt > 85)
            {
                state.Tilt = 95;
            }
            else
            {
                state.Tilt = 180 - globeControl1.Globe.CameraState.Tilt;
            }
            globeControl1.Globe.JumpToCameraState(state);
        }
Exemple #9
0
 /// <summary>
 /// 设置摄像机状态
 /// </summary>
 private void SetCamera()
 {
     //新建一个摄像机状态对象
     camera = new GSOCameraState();
     //camera.Altitude = 20000;    //设置视点离地面的垂直距离
     //设置视点的高度模式,支持三种模式,绝对高度,相对地面高度,贴地
     //camera.AltitudeMode = EnumAltitudeMode.ClampToGround;
     //设置视点高度,真实高度,不可与Altitude、AltitudeMode公用
     camera.Distance = 1000;
     //视线的方向与正北的夹角,0度表示正北,90度表示正东,180度表示正南
     camera.Heading   = 0;
     camera.Latitude  = 31.3283140323302; //设置视点的经度
     camera.Longitude = 120.417888231016; //设置视点的纬度
     //视线与铅垂线的夹角,0度表示垂直向下看,90度表示沿水平方向看
     camera.Tilt = 0;
 }
Exemple #10
0
        /// <summary>
        /// 创建面
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAddPolygon_Click(object sender, EventArgs e)
        {
            GSOGeoPolygon3D geoPolygon = new GSOGeoPolygon3D(); //创建多边形对象

            //创建节点对象
            GSOPoint3ds polygonPnts = new GSOPoint3ds();

            polygonPnts.Add(new GSOPoint3d(116.7, 39.8, 0));
            polygonPnts.Add(new GSOPoint3d(116.8, 39.9, 0));
            polygonPnts.Add(new GSOPoint3d(116.8, 39.7, 0));
            polygonPnts.Add(new GSOPoint3d(116.7, 39.7, 0));

            geoPolygon.AddPart(polygonPnts);                                      //把节点添加到多边形对象上

            GSOSimplePolygonStyle3D stylePolygon = new GSOSimplePolygonStyle3D(); //创建风格

            stylePolygon.OutLineVisible = true;                                   //显示多边形的边缘线
            //设置多边形的填充颜色,FromArgb()中的四个参数分别为alpha、red、green、blue,取值范围为0到255
            stylePolygon.FillColor = Color.FromArgb(100, 255, 255, 0);
            geoPolygon.Style       = stylePolygon; //把风格添加到多边形上

            //创建几何对象并设置属性
            GSOFeature f = new GSOFeature();

            f.Geometry = geoPolygon;
            f.Name     = "多边形 01";
            f.SetFieldValue("description", "a demo polygon");

            //绑定数据
            btnRemovePolygon.Tag = f;

            globeControl1.Globe.MemoryLayer.AddFeature(f);  //把几何要素添加到内存图层中

            //下面不属于工程内容,只是飞到点的位置
            GSOCameraState cs = new GSOCameraState();

            cs.Longitude = 116.75;
            cs.Latitude  = 39.8;
            cs.Altitude  = 50000;
            globeControl1.Globe.FlyToCameraState(cs);
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            #region 创建面要素和飞到面
            GSOGeoPolygon3D geoPolygon = new GSOGeoPolygon3D(); //创建多边形对象

            //创建节点对象
            GSOPoint3ds polygonPnts = new GSOPoint3ds();
            polygonPnts.Add(new GSOPoint3d(116.7, 39.8, 0));
            polygonPnts.Add(new GSOPoint3d(116.8, 39.9, 0));
            polygonPnts.Add(new GSOPoint3d(116.8, 39.7, 0));
            polygonPnts.Add(new GSOPoint3d(116.7, 39.7, 0));

            geoPolygon.AddPart(polygonPnts);                                      //把节点添加到多边形对象上

            GSOSimplePolygonStyle3D stylePolygon = new GSOSimplePolygonStyle3D(); //创建风格
            stylePolygon.OutLineVisible = true;                                   //显示多边形的边缘线
            //设置多边形的填充颜色,FromArgb()中的四个参数分别为alpha、red、green、blue,取值范围为0到255
            stylePolygon.FillColor = Color.FromArgb(100, 255, 255, 0);
            geoPolygon.Style       = stylePolygon; //把风格添加到多边形上

            //下面不属于工程内容,只是飞到点的位置
            GSOCameraState cs = new GSOCameraState();
            cs.Longitude = 116.75;
            cs.Latitude  = 39.8;
            cs.Altitude  = 50000;
            globeControl1.Globe.FlyToCameraState(cs);

            #endregion

            //创建几何对象并设置属性
            GSOFeature f = new GSOFeature();
            f.Geometry = geoPolygon;
            f.Name     = "多边形 01";
            f.CustomID = 1;
            f.SetFieldValue("description", "a demo polygon");
            f.Description = "这是一个多边形";

            //将面添加到球中
            feature = globeControl1.Globe.MemoryLayer.AddFeature(f);  //添加的时候获取要素
        }
Exemple #12
0
        private GSOFeature makeLine()
        {
            GSOGeoPolyline3D line = new GSOGeoPolyline3D(); //创建线对象
            GSOPoint3ds      pnts = new GSOPoint3ds();      //创建节点对象

            pnts.Add(new GSOPoint3d(116.6, 39.9, 1000));    //把各节点添加到节点对象上
            pnts.Add(new GSOPoint3d(116.61, 39.91, 3000));
            pnts.Add(new GSOPoint3d(116.62, 39.92, 2000));
            pnts.Add(new GSOPoint3d(116.63, 39.90, 2500));
            pnts.Add(new GSOPoint3d(116.64, 39.94, 4000));
            line.AddPart(pnts);                                      //把节点添加到线上

            GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格

            //设置透明度及颜色,FromArgb()中的四个参数分别为alpha、red、green、blue,取值范围为0到255
            style.LineColor     = Color.FromArgb(150, 0, 255, 0);
            style.LineWidth     = 3;     //设置线的宽度为3
            style.VertexVisible = true;  //显示线的节点
            line.Style          = style; //把风格添加到线上

            //创建几何对象并设置属性
            GSOFeature f = new GSOFeature();

            f.Geometry = line;                        //把线对象添加到几何对象上
            f.Name     = "线 01";                      //设置几何对象的名称
            f.SetFieldValue("description", "这是线的属性"); //设置几何对象的字段值
            //把几何要素添加到内存图层中
            globeControl1.Globe.MemoryLayer.AddFeature(f);

            //下面不属于工程内容,只是飞到点的位置
            GSOCameraState cs = new GSOCameraState();

            cs.Longitude = 116.62;
            cs.Latitude  = 39.92;
            cs.Altitude  = 9000;
            globeControl1.Globe.FlyToCameraState(cs);

            return(f);
        }
Exemple #13
0
 //地下模式
 private void CameraUnderGroundMenu_Click(object sender, EventArgs e)
 {
     //globeControl1.Globe.CameraMode = EnumCameraMode.UnderGround;
     CameraUnderGroundMenu.Checked = true;
     CameraNavigationMenu.Checked = false;
     CameraWalkMenu.Checked = false;
     switch (globeControl1.Globe.CameraMode)
     {
         case EnumCameraMode.Navigation:
         case EnumCameraMode.Walk:
             globeControl1.Globe.CameraMode = EnumCameraMode.UnderGround;
             GSOCameraState state = new GSOCameraState();
             state.AltitudeMode = globeControl1.Globe.CameraState.AltitudeMode;
             state.Altitude = globeControl1.Globe.CameraState.Altitude;
             state.Distance = globeControl1.Globe.CameraState.Distance;
             state.Heading = globeControl1.Globe.CameraState.Heading;
             state.Latitude = globeControl1.Globe.CameraState.Latitude;
             state.Longitude = globeControl1.Globe.CameraState.Longitude;
             if (globeControl1.Globe.CameraState.Tilt < 95 && globeControl1.Globe.CameraState.Tilt > 85)
             {
                 state.Tilt = 95;
             }
             else
             {
                 state.Tilt = 180 - globeControl1.Globe.CameraState.Tilt;
             }
             globeControl1.Globe.JumpToCameraState(state);
             break;
     }
     globeControl1.Globe.Refresh();
 }
Exemple #14
0
        private void CopterMenuItem_Click(object sender, EventArgs e)
        {
            GSORoute route = new GSORoute();
            route.Add(116.601, 39.901, 1000);
            route.Add(116.603, 39.901, 1000);
            route.Add(116.605, 39.901, 1000);
            route.Add(116.605, 39.901, 1000);
            route.Add(116.605, 39.901, 1000);
            route.Add(116.605, 39.901, 1000);
            route.Add(116.605, 39.903, 1000);
            route.Add(116.605, 39.905, 1000);
            route.Add(116.605, 39.907, 1000);
            route.Speed = 200;
            route.RotateSpeed = 50;
            route.AltitudeMode = EnumAltitudeMode.Absolute;
            route.CircleRoute = true;

            GSOGeoModel geoModel = new GSOGeoModel();
            geoModel.FilePath = Path.GetDirectoryName(Application.ExecutablePath) + "/Resource/model/客机.3ds";
            geoModel.RotateZ = -90;
            geoModel.SetScale(0.1, 0.1, 0.1);
            GSOGeoDynamicRoute geoDynamicRoute = new GSOGeoDynamicRoute();
            geoDynamicRoute.TimerInterval = 20;
            geoDynamicRoute.Route = route;
            geoDynamicRoute.ActorGeometry = geoModel;
            geoDynamicRoute.Play();

            GSOFeature feature = new GSOFeature();
            feature.Geometry = geoDynamicRoute;
            GSOLabel gsoLabel = new GSOLabel();
            gsoLabel.Text = "国航A9";
            feature.Label = gsoLabel;

            globeControl1.Globe.MemoryLayer.AddFeature(feature);

            GSOCameraState cameraState = new GSOCameraState();
            cameraState.Longitude = 116.601;
            cameraState.Latitude = 39.901;
            cameraState.Altitude = 2500;
            cameraState.Tilt = 0;
            cameraState.Heading = 0;
            globeControl1.Globe.FlyToCameraState(cameraState);
        }
Exemple #15
0
        private void DynamicCarMenuItem_Click(object sender, EventArgs e)
        {
            GSORoute route = new GSORoute();
            route.Add(116.601, 39.901, 0);
            route.Add(116.602, 39.901, 0);
            route.Add(116.603, 39.901, 0);
            route.Add(116.603, 39.902, 0);
            route.Add(116.603, 39.903, 0);
            route.Add(116.603, 39.904, 0);
            route.Speed = 50;
            route.RotateSpeed = 50;
            route.AltitudeMode = EnumAltitudeMode.ClampToGround;

            GSOGeoModel geoModel = new GSOGeoModel();
            geoModel.FilePath = Path.GetDirectoryName(Application.ExecutablePath) + "/Resource/model/tank.3ds";

            GSOGeoDynamicRoute geoDynamicRoute = new GSOGeoDynamicRoute();
            geoDynamicRoute.TimerInterval = 20;
            geoDynamicRoute.Route = route;
            geoDynamicRoute.ActorGeometry = geoModel;
            geoDynamicRoute.Play();

            GSOFeature feature = new GSOFeature();
            feature.Geometry = geoDynamicRoute;

            GSOLabel gsoLabel = new GSOLabel();
            gsoLabel.Text = "中-59";

            feature.Label = gsoLabel;

            globeControl1.Globe.MemoryLayer.AddFeature(feature);
            GSOCameraState cameraState = new GSOCameraState();
            cameraState.Longitude = 116.601;
            cameraState.Latitude = 39.901;
            cameraState.Altitude = 900;
            cameraState.Tilt = 0;
            cameraState.Heading = 0;
            globeControl1.Globe.FlyToCameraState(cameraState);
        }
Exemple #16
0
        private void MissileMenuItem_Click(object sender, EventArgs e)
        {
            GSORoute route = new GSORoute();

            route.Add(116.601, 39.902, 100);
            route.Add(116.602, 39.902, 150);
            route.Add(116.603, 39.902, 200);
            route.Add(116.603, 39.902, 200);
            route.Add(116.603, 39.902, 200);
            route.Add(116.603, 39.902, 200);
            route.Add(116.604, 39.902, 250);
            route.Add(116.605, 39.902, 300);
            route.Add(116.606, 39.902, 250);
            route.Add(116.607, 39.902, 200);
            route.Add(116.608, 39.902, 150);
            route.Add(116.609, 39.902, 100);
            route.Speed = 500;
            route.RotateSpeed = 200;
            route.AltitudeMode = EnumAltitudeMode.Absolute;
            route.CircleRoute=false;

            GSOGeoModel geoModel = new GSOGeoModel();
            geoModel.FilePath = Path.GetDirectoryName(Application.ExecutablePath) + "/Resource/model/aim9.3ds";
            geoModel.SetScale(30, 30, 30);

            GSOGeoDynamicRoute geoDynamicRoute = new GSOGeoDynamicRoute();
            geoDynamicRoute.TimerInterval = 20;
            geoDynamicRoute.Route = route;
            geoDynamicRoute.ActorGeometry = geoModel;
            geoDynamicRoute.Play();

            GSOFeature feature = new GSOFeature();
            feature.Geometry = geoDynamicRoute;
            GSOLabel gsoLabel = new GSOLabel();
            gsoLabel.Text = "爱国者";
            feature.Label = gsoLabel;

            globeControl1.Globe.MemoryLayer.AddFeature(feature);

            GSOCameraState cameraState = new GSOCameraState();
            cameraState.Longitude = 116.605;
            cameraState.Latitude = 39.902;
            cameraState.Altitude = 100;
            cameraState.Tilt = 85;
            cameraState.Heading = 0;
            globeControl1.Globe.FlyToCameraState(cameraState);
        }
Exemple #17
0
 private void WaterPipeMenuItem_Click(object sender, EventArgs e)
 {
     GSOLayer layer = globeControl1.Globe.Layers["WaterPipeDemo"];
     if (layer != null)
     {
         GSOCameraState cameraState = new GSOCameraState();
         cameraState.Longitude = 120.122613878251;
         cameraState.Latitude = 37.3997895601905;
         cameraState.Altitude = 3.21685825381428;
         cameraState.Heading = 30.3528709511283;
         cameraState.Tilt = 84.361905816876;
         globeControl1.Globe.FlyToCameraState(cameraState);
         timerWaterPipe.Start();
     }
 }