// 地图初始化,数据加载功能 import mapData from './mapData.js'; import store from './../../store/store.js'; import mapLayer from './mapLayer.js'; import mapMenu from './mapMenu.js'; import { showToast } from 'vant'; const mapView = { checkentity: null, init() { window.earthCtrl = new SmartEarth.EarthCtrl('sdkContainer', { // 隐藏默认底图 defaultImagery: false, // 隐藏logo printLog: false // sceneMode: SmartEarth.Cesium.SceneMode.SCENE2D }); window.Cesium = SmartEarth.Cesium; window.Viewer = earthCtrl.viewer; Viewer.scene.globe.baseColor = Cesium.Color.fromCssColorString('#A9A9A9'); //设置地球颜色 // 设置场景显示高度 Viewer.scene.screenSpaceCameraController.maximumZoomDistance = 30000; // 清空默认底图 Viewer.imageryLayers.removeAll(); // Viewer.scene.screenSpaceCameraController.enableRotate = true; //禁止旋转 // 开启深度检测,默认是关闭的 // Viewer.scene.globe.depthTestAgainstTerrain = true; //范围限制 earthCtrl.camera.createRectanglelbj( { id: 0, rectangle: { min: [117.18456811131752, 38.99131117296185], max: [117.32249678417742, 39.22350574645287] } }, function (data) { // 禁止倾斜相机 Viewer.scene.screenSpaceCameraController.enableTilt = false; } ); // 场景初始化底图 // earthCtrl.factory.createImageryLayer({ // sourceType: 'wmts', // url: config.mapServer.DTUrl, // tileMatrixSetID: 'EPSG:4326', // tilingScheme: new SmartEarth.Cesium.GeographicTilingScheme() // }); // 添加影像/适量图 // this.addImageLayers(); store.state.setLoadFlag = true; // 数据请求初始化 mapData.init(); // var coffeeBeltRectangle = Cesium.Rectangle.fromDegrees(config.extend.minx, config.extend.miny, config.extend.maxx, config.extend.maxy); // Viewer.scene.globe.cartographicLimitRectangle = coffeeBeltRectangle; // 添加鼠标点击事件 this.addHandlerClick(); // 添加场景移动事件 // this.addCameraChange(); }, addCameraChange() { const that = this; Viewer.camera.changed.addEventListener(() => { that.refreshViewRectangle(); }); Viewer.camera.moveStart.addEventListener(() => { that.refreshViewRectangle(); }); Viewer.camera.moveEnd.addEventListener(() => { that.refreshViewRectangle(); }); }, refreshViewRectangle() { let params = {}; const extent = config.extend; let extend = Viewer.camera.computeViewRectangle(); // 三维开发模式 if (extend) { params.maxx = Cesium.Math.toDegrees(extend.east); params.maxy = Cesium.Math.toDegrees(extend.north); params.minx = Cesium.Math.toDegrees(extend.west); params.miny = Cesium.Math.toDegrees(extend.south); } else { //二维开发模式 let canvas = Viewer.scene.canvas; let upperLeft = new Cesium.Cartesian2(0, 0); //canvas左上角坐标转2d坐标 let lowerRight = new Cesium.Cartesian2(canvas.clientWidth, canvas.clientHeight); //canvas右下角坐标转2d坐标 let ellipsoid = Viewer.scene.globe.ellipsoid; let upperLeft3 = Viewer.camera.pickEllipsoid(upperLeft, ellipsoid); //2D转3D世界坐标 let lowerRight3 = Viewer.camera.pickEllipsoid(lowerRight, ellipsoid); //2D转3D世界坐标 let upperLeftCartographic = Viewer.scene.globe.ellipsoid.cartesianToCartographic(upperLeft3); //3D世界坐标转弧度 let lowerRightCartographic = Viewer.scene.globe.ellipsoid.cartesianToCartographic(lowerRight3); //3D世界坐标转弧度 let minx = Cesium.Math.toDegrees(upperLeftCartographic.longitude); //弧度转经纬度 let maxx = Cesium.Math.toDegrees(lowerRightCartographic.longitude); //弧度转经纬度 let miny = Cesium.Math.toDegrees(lowerRightCartographic.latitude); //弧度转经纬度 let maxy = Cesium.Math.toDegrees(upperLeftCartographic.latitude); //弧度转经纬度 params.minx = minx; params.maxx = maxx; params.miny = miny; params.maxy = maxy; } }, addImageLayers() { // var mapUrl = config.mapServer; // earthCtrl.factory.createImageryLayer({ // sourceType: 'wmts', // url: mapUrl.SLUrl, // tileMatrixSetID: 'EPSG:4326', // tilingScheme: new SmartEarth.Cesium.GeographicTilingScheme() // }); // earthCtrl.factory.createImageryLayer({ // sourceType: 'wmts', // url: mapUrl.YXUrl, // tileMatrixSetID: 'EPSG:4326', // tilingScheme: new SmartEarth.Cesium.GeographicTilingScheme() // }); // Viewer.imageryLayers._layers[0].show = false; // Viewer.imageryLayers._layers[1].show = false; }, addHandlerClick() { const handler = new Cesium.ScreenSpaceEventHandler(Viewer.scene.canvas); // 处理用户输入事件 handler.setInputAction(event => { var pick = Viewer.scene.pick(event.position); //拾取鼠标所在的entity if (Cesium.defined(pick)) { if (!pick.id._properties) return; const obj = mapData.listData.filter(res => { if (res.attributes.FID == pick.id._properties.FID) { return res; } }); if (obj.length > 0) { var val_data = obj[0]; store.state.setCellItem = val_data; const res = val_data.geometry; const judgeMentData = mapData.setJudgmentData(res); if (judgeMentData) { mapData.setMqpJump({ x: res.coordinates[0], y: res.coordinates[1] }); mapLayer.getlocationEntity(val_data); } else { showToast('该资产缺少坐标!'); } mapMenu.setMenuChange('details'); } } }, Cesium.ScreenSpaceEventType.LEFT_CLICK); } }; export default mapView;