//配置文件地址 // import config from "../../../../public/config/config"; //服务加载配置文件 import { Store } from "vuex"; import server from "./server"; import store from "@/store"; const InitMap = { earthCtrl: null, Viewer: null, graticules: null, //地图初始化 init3DMap() { SmartEarth.Cesium.ExternalParameter.eliminate = false; SmartEarth.Cesium.ExternalParameter.changeApproximateTerrainHeights = true; SmartEarth.Cesium.ExternalParameter.maxTerrainHeight = 2000000; SmartEarth.Cesium.ExternalParameter.minTerrainHeight = -2000000; SmartEarth.Cesium.ShadowMap.MAXIMUM_DISTANCE = 20000000000; SmartEarth.Cesium.ExternalParameter.ellipsoidCoordinates = 'MOON2000' window.Cesium = SmartEarth.Cesium; SmartEarth.Cesium.Ellipsoid.WGS84 = new SmartEarth.Cesium.Ellipsoid( 1737400.0, 1737400.0, 1737400.0 ); //页面初始化 this.earthCtrl = new SmartEarth.EarthCtrl("cesiumContainer", { StaticFileBaseUrl: config.StaticFileBaseUrl, ellipsoidCoordinates: 'MOON2000', timeline: true, shadowBackCul1: false }); this.earthCtrl.Viewer.scene.debugShowFramesPerSecond = true this.earthCtrl.coreMap.scene.screenSpaceCameraController.enableCollisionDetection = true; this.earthCtrl.Viewer.scene.globe.terrainExaggeration = 1.00001 // this.earthCtrl.shadowMap.maximumDistance = 10000.0; window.earthCtrl = this.earthCtrl; window.Viewer = this.earthCtrl._Viewer; Viewer.scene.skyAtmosphere.show = false; window.Cesium = SmartEarth.Cesium; window.sgworld = earthCtrl; sgworld.Creator.SimpleGraphic.edit(true, { editProp: false }); // 最小缩放高度(米) Viewer.scene.screenSpaceCameraController.minimumZoomDistance =10000; // 最大缩放高度(米) Viewer.scene.screenSpaceCameraController.maximumZoomDistance = 5000000; //======================= //阴影分析 Viewer.scene.globe.lightingFadeOutDistance = 5.8e+7; Viewer.scene.globe.enableLighting = false; earthCtrl.shadows = false; //设置球体颜色 window.Viewer.scene.globe.baseColor = new Cesium.Color.fromCssColorString('#A9A9A9'); //清除所有默认图层 window.Viewer.imageryLayers.removeAll(); window.setLayer(); Viewer.scene.globe.depthTestAgainstTerrain = false; // 开启深度测试 Viewer.animation.container.style.visibility = "hidden"; Viewer.timeline.container.style.visibility = "hidden"; //======================= //大气层 Viewer.scene.globe.showGroundAtmosphere = false; sgworld._Viewer.scene.debugShowFramesPerSecond = false; sgworld.Navigate.Stop(); //取消飞行状态 sgworld.Navigate.setPosition(-1093596.38, 5729026.12, 4136590.41); this.addMouseLeftClickEvents(); this.addMouseLeftDownEvents(); }, addMouseLeftDownEvents() { if (window.handleLeftClick) { window.handleLeftClick.removeInputAction( Cesium.ScreenSpaceEventType.LEFT_CLICK ); //移除事件 window.handleLeftClick = null; } const pickGlobeSlope = new SmartEarth.Cesium.PickGlobeSlope(earthCtrl.Viewer) window.handleLeftClick = new Cesium.ScreenSpaceEventHandler( window.Viewer.scene.canvas ); var that = this; window.handleLeftClick.setInputAction(function (event) { const angle = pickGlobeSlope.pickSlope(event.position) if (store.state.slopeQueyFlag) { if (!store.state.showSlopeQuey) { store.state.showSlopeQuey = true; } store.state.slopeQueyValue = angle.toFixed(6); } }, Cesium.ScreenSpaceEventType.LEFT_CLICK); }, //鼠标左键点击事件添加 addMouseLeftClickEvents() { if (window.handleLeftDown) { window.handleLeftDown.removeInputAction( Cesium.ScreenSpaceEventType.LEFT_DOWN ); //移除事件 window.handleLeftDown = null; } window.handleLeftDown = new Cesium.ScreenSpaceEventHandler( window.Viewer.scene.canvas ); var that = this; window.handleLeftDown.setInputAction(function (event) { let cartesian = window.Viewer.scene.pick(event.position); if (Cesium.defined(cartesian)) { if (cartesian.id.shpType && cartesian.id.shpType == 'temporaryLayer') { that.setEditTemporaryLayer(cartesian.id._id) } } }, Cesium.ScreenSpaceEventType.LEFT_DOWN); }, setEditTemporaryLayer(res) { // store.state.editTemporaryId = res; // console.log(store.state.editTemporaryId) if (store.state.editTemporaryId && store.state.editTemporaryId == res) { store.state.setEditTemporaryShow = true; } }, addMouseMouseMoveEvents() { if (window.handleMouseMove) { window.handleMouseMove.removeInputAction( Cesium.ScreenSpaceEventType.MOUSE_MOVE ); //移除事件 window.handleMouseMove = null; } window.handleMouseMove = new Cesium.ScreenSpaceEventHandler( window.Viewer.scene.canvas ); window.handleMouseMove.setInputAction(function (movement) { let cartesian = window.Viewer.camera.pickEllipsoid( movement.endPosition, window.Viewer.scene.globe.ellipsoid ); if (cartesian) { //将笛卡尔坐标转换为地理坐标 var cartographic = window.Viewer.scene.globe.ellipsoid.cartesianToCartographic( cartesian ); //将弧度转为度的十进制度表示 var lng = Cesium.Math.toDegrees(cartographic.longitude); var lat = Cesium.Math.toDegrees(cartographic.latitude); //获取相机高度 var alt = Math.ceil(window.Viewer.camera.positionCartographic.height); let coordinate = { longitude: Number(lng.toFixed(6)), latitude: Number(lat.toFixed(6)), altitude: Number(alt.toFixed(2)), type: "MOUSE_MOVE", }; window.addMouseEvents(coordinate); } }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); }, //CGCS2000转月球坐标---待验证 Cjcs2000ToMoon() { // 定义待转换的经纬度坐标和高度 const longitude = 110.5; const latitude = 34.5; const height = 0; // 定义CGCS2000坐标系 const cgcs2000 = new Cesium.Ellipsoid( 6378137.0, 6378137.0, 6356752.3142451793 ); // 定义Moon2000坐标系 const moon2000 = new Cesium.Ellipsoid(1737400.0, 1737400.0, 1737400.0); // 将经纬度坐标转换为笛卡尔坐标系 const cartesian3 = Cesium.Cartesian3.fromDegrees( longitude, latitude, height, cgcs2000 ); // 将笛卡尔坐标系转换为Moon2000坐标系 const moonCartesian3 = Cesium.Transforms.eastNorthUpToFixedFrame( cartesian3, cgcs2000, moon2000 ); // 输出转换后的经纬度坐标和高度 console.log(moonCartesian3); // 将Moon2000坐标系的笛卡尔坐标转换为经纬度坐标 const moonPosition = Cesium.Cartographic.fromCartesian(moonCartesian3); // 输出转换后的经纬度坐标和高度 console.log(moonPosition); }, }; export default InitMap;