suerprisePlus
2024-08-14 d4a3ca549f8755c2f87442c27217c3be39cab5cc
src/assets/js/mapSdk/menuManager.js
@@ -1,7 +1,14 @@
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'),
@@ -61,16 +68,134 @@
                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) {
@@ -137,7 +262,26 @@
                earthCtrl.factory.createSimpleGraphic('label', {}, (entity) => {});
                break;
            case 'a3':
                earthCtrl.factory.createSimpleGraphic('polyline', { showSize: false }, (entity) => {});
                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) => {});