/// <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 = "关闭海水"; } }
/// <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(); } } }
/// <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); }
/// <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); }
/// <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) { } }
/// <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); }
/// <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; }
/// <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); //添加的时候获取要素 }
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); }
//地下模式 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(); }
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); }
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); }
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); }
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(); } }