suerprisePlus
2024-11-27 ab8f3297f7c8243d486c9da0900e4f813b2ea2df
src/assets/js/mapSdk/menuManager.js
@@ -1,5 +1,19 @@
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': //配网巡检
@@ -54,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) {
@@ -80,12 +212,30 @@
    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;
@@ -104,11 +254,83 @@
    },
    // 标绘
    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) => {
                    const obj = this.getWKtCoord(entity.polyline.positions.getValue());
                    console.log('polyline Wkt:' + obj);
                });
                break;
            case 'a4':
                earthCtrl.factory.createSimpleGraphic('rectangle', { showSize: false }, (entity) => {});
                break;
            case 'a5':
                earthCtrl.factory.createSimpleGraphic('polygon', { showSize: false }, (entity) => {
                    const obj = this.getWKtCoord(entity.polygon.hierarchy.getValue().positions);
                    console.log('polygon Wkt:' + obj);
                });
                break;
            case 'a6':
                earthCtrl.factory.SimpleGraphic.clear();
                break;
            default:
                break;
        }
        return null;
    },
    getWKtCoord(obj) {
        var ellipsoid = Viewer.scene.globe.ellipsoid;
        var std = [];
        for (var i in obj) {
            // 将世界坐标转换为地理坐标(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]);
        }
        return std;
    },
    getCartesianCoord(longitude, latitude, height) {
        return Cesium.Cartesian3.fromDegrees(longitude, latitude, height);
    },
    // 测量
    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) {
@@ -117,7 +339,7 @@
                return res.name;
                break;
            case 'a2':
                return res.name;
                earthCtrl.factory.createScreenshot();
                break;
            default:
                return null;