| | |
| | | import { time } from 'echarts'; |
| | | import mapServer from './mapServe'; |
| | | |
| | | const menuManager = { |
| | | pid: null, |
| | | pointFly: null, |
| | | particle: null, |
| | | AnalysisFlood: null, |
| | | modelLayer: null, |
| | | regionWeather: null, |
| | | regionWeather: null, |
| | | colorAll: { |
| | | point: SmartEarth.Cesium.Color.fromCssColorString('#ff0000'), |
| | | polyline: SmartEarth.Cesium.Color.fromCssColorString('#ffff0050'), |
| | | polygon: SmartEarth.Cesium.Color.fromCssColorString('#ffff0050'), |
| | | }, |
| | | init(res) { |
| | | switch (res.pid) { |
| | | case 's1': //配网巡检 |
| | |
| | | break; |
| | | } |
| | | }, |
| | | handlerClick(res) { |
| | | var that = this; |
| | | var handler = new Cesium.ScreenSpaceEventHandler(Viewer.scene.canvas); |
| | | handler.setInputAction((event) => { |
| | | let cartesian = Viewer.camera.pickEllipsoid(event.position); |
| | | let cartographic = Cesium.Cartographic.fromCartesian(cartesian); |
| | | |
| | | if (cartesian) { |
| | | let lng = parseFloat(Cesium.Math.toDegrees(cartographic.longitude)).toFixed(6); // 经度 |
| | | let lat = parseFloat(Cesium.Math.toDegrees(cartographic.latitude)).toFixed(6); // 纬度 |
| | | var alt = Viewer.camera.positionCartographic.height.toFixed(0); |
| | | if (res == 'a2') { |
| | | that.setCreateFireAnalysis(lng, lat, alt); |
| | | } else if (res == 'a4') { |
| | | that.setCreateRainAnalysis(lng, lat, alt); |
| | | } else if (res == 'a5') { |
| | | that.setCreateSnowAnalysis(lng, lat, alt); |
| | | } |
| | | } |
| | | handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); |
| | | }, Cesium.ScreenSpaceEventType.LEFT_CLICK); |
| | | }, |
| | | getModelLayer() { |
| | | const obj = mapServer.layerList.filter((item) => { |
| | | if (item.id == 'baseModel') { |
| | | return time; |
| | | } |
| | | }); |
| | | if (obj.length <= 0) return; |
| | | this.modelLayer = obj[0].layer; |
| | | }, |
| | | setCreateRainAnalysis(lng, lat, alt) { |
| | | this.regionWeather = earthCtrl.factory.createRegionWeather({ |
| | | primitive: this.modelLayer.item, |
| | | position: new SmartEarth.Cesium.Cartesian3.fromDegrees(lng, lat, 1000), |
| | | radius: 1000, |
| | | }); |
| | | this.regionWeather.enableWeatherType = SmartEarth.Cesium.RegionWeather.TYPE_RAIN; |
| | | this.regionWeather.regionAlpha = 0.6; |
| | | this.regionWeather.regionGradientDistance = 300; |
| | | }, |
| | | setCreateSnowAnalysis(lng, lat, alt) { |
| | | this.regionWeather = earthCtrl.factory.createRegionWeather({ |
| | | primitive: this.modelLayer.item, |
| | | position: new SmartEarth.Cesium.Cartesian3.fromDegrees(lng, lat, 1000), |
| | | radius: 1000, |
| | | }); |
| | | this.regionWeather.enableWeatherType = SmartEarth.Cesium.RegionWeather.TYPE_SNOW; |
| | | this.regionWeather.regionAlpha = 0.8; |
| | | this.regionWeather.regionGradientDistance = 300; |
| | | }, |
| | | setClearMenuS3() { |
| | | if (this.particle) { |
| | | this.particle.remove(); |
| | | this.particle = null; |
| | | } |
| | | if (this.AnalysisFlood) { |
| | | this.AnalysisFlood.endWater(); |
| | | this.AnalysisFlood = undefined; |
| | | } |
| | | if (this.regionWeather) { |
| | | this.regionWeather.enableWeatherType = SmartEarth.Cesium.RegionWeather.TYPE_NONE; |
| | | } |
| | | }, |
| | | // 灾害管理 |
| | | setMenuS3(res) { |
| | | switch (res.id) { |
| | | case 'a1': |
| | | return res.name; |
| | | break; |
| | | case 'a2': |
| | | if (this.particle) { |
| | | this.particle.remove(); |
| | | this.particle = null; |
| | | return; |
| | | } |
| | | this.handlerClick(res.id); |
| | | |
| | | break; |
| | | case 'a3': |
| | | if (this.AnalysisFlood) { |
| | | this.AnalysisFlood.endWater(); |
| | | this.AnalysisFlood = undefined; |
| | | return; |
| | | } |
| | | var url = SmartEarthRootUrl + 'Workers/image/33.gif'; |
| | | const method = { |
| | | pointSelect: true, // rectangle: 'rectangle', |
| | | spood: 20, |
| | | GroupID: 0, |
| | | url: url, |
| | | }; |
| | | this.AnalysisFlood = earthCtrl.analysis.createSubmergence(method, (value) => {}); |
| | | break; |
| | | case 'a4': |
| | | if (!this.modelLayer) { |
| | | this.getModelLayer(); |
| | | } |
| | | this.handlerClick(res.id); |
| | | break; |
| | | |
| | | case 'a5': |
| | | if (!this.modelLayer) { |
| | | this.getModelLayer(); |
| | | } |
| | | this.handlerClick(res.id); |
| | | break; |
| | | case 'a6': |
| | | this.setClearMenuS3(); |
| | | break; |
| | | default: |
| | | return null; |
| | | break; |
| | | } |
| | | }, |
| | | setCreateFireAnalysis(lon, lat, alt) { |
| | | this.particle = earthCtrl.factory.createParticleEffect( |
| | | 'flame', |
| | | { |
| | | x: lon, |
| | | y: lat, |
| | | z: 0, |
| | | }, |
| | | { |
| | | translation: SmartEarth.Cesium.Cartesian3.fromElements(0, 0, 0), //平移 |
| | | }, |
| | | (data) => {} |
| | | ); |
| | | }, |
| | | //图层管理 |
| | | setMenuS4(res) { |
| | |
| | | setMenuS5(res) { |
| | | switch (res.id) { |
| | | case 'a1': |
| | | case 'a3': |
| | | if (this.pointFly) { |
| | | this.pointFly.removeFromMap(); |
| | | } else { |
| | | earthCtrl.factory.createSimpleGraphic('billboard', {}, (entity) => { |
| | | const position = entity.position.getValue(); |
| | | const coordinate = earthCtrl.core.toDegrees(position); |
| | | this.pointFly = earthCtrl.camera.rotateCamera({ |
| | | lon: coordinate.lon, |
| | | lat: coordinate.lat, |
| | | distance: 1000, |
| | | pitch: -30, |
| | | }); |
| | | }); |
| | | } |
| | | return null; |
| | | break; |
| | | case 'a2': |
| | | return res.name; |
| | | break; |
| | | case 'a3': |
| | | earthCtrl.analysis.createIndoormode({ showHelp: true }); |
| | | return null; |
| | | break; |
| | | |
| | | default: |
| | | return null; |
| | | break; |
| | |
| | | }, |
| | | // 标绘 |
| | | setMenuS7(res) { |
| | | switch (res.id) { |
| | | case 'a1': |
| | | earthCtrl.factory.createSimpleGraphic('point', {}, (entity) => {}); |
| | | break; |
| | | case 'a2': |
| | | earthCtrl.factory.createSimpleGraphic('label', {}, (entity) => {}); |
| | | break; |
| | | case 'a3': |
| | | earthCtrl.factory.createSimpleGraphic('polyline', { showSize: false }, (entity) => { |
| | | |
| | | // console.log(entity); |
| | | |
| | | // const obj = entity.polyline.positions.getValue(); |
| | | // var std = []; |
| | | // for (var i in obj) { |
| | | // var ellipsoid =Viewer.scene.globe.ellipsoid; |
| | | |
| | | // // 将世界坐标转换为地理坐标(Cartographic) |
| | | // var cartographic = ellipsoid.cartesianToCartographic(obj[i]); |
| | | |
| | | // // 获取经纬度 |
| | | // var longitude = Cesium.Math.toDegrees(cartographic.longitude); |
| | | // var latitude = Cesium.Math.toDegrees(cartographic.latitude); |
| | | // var height = 0; |
| | | // std.push([longitude, latitude, height]); |
| | | // } |
| | | // console.log(std); |
| | | }); |
| | | break; |
| | | case 'a4': |
| | | earthCtrl.factory.createSimpleGraphic('rectangle', { showSize: false }, (entity) => {}); |
| | | break; |
| | | case 'a5': |
| | | earthCtrl.factory.createSimpleGraphic('polygon', { showSize: false }, (entity) => {}); |
| | | break; |
| | | case 'a6': |
| | | earthCtrl.factory.SimpleGraphic.clear(); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | return null; |
| | | }, |
| | | // 测量 |
| | | setMenuS8(res) { |
| | | return null; |
| | | const colorAll = this.colorAll; |
| | | switch (res.id) { |
| | | case 'a1': |
| | | earthCtrl.measure.clampLineDistance(colorAll, (e) => {}); |
| | | break; |
| | | case 'a2': |
| | | earthCtrl.measure.altitude(colorAll, (e) => {}); |
| | | break; |
| | | case 'a3': |
| | | earthCtrl.measure.surfaceArea( |
| | | { |
| | | ...colorAll, |
| | | tin: true, // 是否显示tin三角网 |
| | | onlyTerrain: false, // 是否只测量精细地形 |
| | | }, |
| | | (e) => {} |
| | | ); |
| | | break; |
| | | case 'a4': |
| | | earthCtrl.measure.planeArea(colorAll, (e) => {}); |
| | | break; |
| | | case 'a5': |
| | | earthCtrl.measure.horizontalDistance(colorAll, (e) => {}); |
| | | break; |
| | | case 'a6': |
| | | earthCtrl.measure.clearResult(); |
| | | break; |
| | | } |
| | | }, |
| | | // 特效 |
| | | setMenuS9(res) { |
| | |
| | | return res.name; |
| | | break; |
| | | case 'a2': |
| | | return res.name; |
| | | earthCtrl.factory.createScreenshot(); |
| | | break; |
| | | default: |
| | | return null; |