suerprisePlus
2024-10-23 559f0776123a2205863b5787d5b8e1e012d397d3
src/views/visualization/list/mapWeather.js
@@ -1,8 +1,9 @@
import mapServer from '../../../assets/js/mapSdk/mapServe';
import * as turf from '@turf/turf';
const mapWeather = {
    regionWeather: null,
    particle: null,
    showRain: 'ShowRain',
    closeRegionWeather() {
        if (this.regionWeather) {
            this.regionWeather.enableWeatherType = SmartEarth.Cesium.RegionWeather.TYPE_NONE;
@@ -12,23 +13,34 @@
            this.particle.deleteObject();
            this.particle = null;
        }
        for (var i in Viewer.scene.primitives._primitives) {
            const name = Viewer.scene.primitives._primitives[i].name;
            if (name && name == this.showRain) {
                Viewer.scene.primitives.remove(Viewer.scene.primitives._primitives[i]);
            }
        }
    },
    setRegionWeatherType(response) {
        this.closeRegionWeather();
        if (!this.regionWeather) {
            this.getRegionWather(response);
        }
        const coord = this.getCoord(response);
        earthCtrl.camera.flyTo(coord[0], coord[1], 1000, 0, -90, 0, 0);
        switch (response.type) {
            case 'rain':
                this.showRain();
                //  earthCtrl.camera.flyTo(coord[0], coord[1], 8000, 0, -90, 0, 0);
                this.showRain(response);
                break;
            case 'fire':
                this.showFire(response);
                earthCtrl.camera.flyTo(coord[0], coord[1], 1000, 0, -90, 0, 0);
                break;
            case 'snow':
                this.showSnow();
                earthCtrl.camera.flyTo(coord[0], coord[1], 1000, 0, -90, 0, 0);
                break;
        }
    },
@@ -44,19 +56,74 @@
            obj,
            {
                translation: SmartEarth.Cesium.Cartesian3.fromElements(0, 0, 0), //平移
                particleSize:10
                particleSize: 10,
            },
            function (data) {}
        );
    },
    showRain() {
        if (this.regionWeather) {
            this.regionWeather.enableWeatherType = SmartEarth.Cesium.RegionWeather.TYPE_RAIN;
            this.regionWeather.regionAlpha = 0.6;
            this.regionWeather.regionGradientDistance = 300;
    showRain(res) {
        var area = [];
        var std =[];
        for (var i = 0; i < res.area.length; i += 3) {
            area.push(res.area[i]);
            area.push(res.area[i + 1]);
            std.push([res.area[i],res.area[i + 1]])
        }
        std.push(std[0])
        const polygon = turf.polygon([std]);
        const centerPoint = turf.center(polygon);
        const coord= centerPoint.geometry.coordinates;
        earthCtrl.camera.flyTo(coord[0], coord[1], 8000, 0, -90, 0, 0);
        const geometry = new Cesium.PolygonGeometry({
            polygonHierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArray(area)),
            height: 0, // 底面高度
            extrudedHeight: 0.2, // 水面高度
            ellipsoid: Cesium.Ellipsoid.WGS84,
        });
        // 2. 创建GeometryInstance
        const geometryInstances = new Cesium.GeometryInstance({ geometry });
        // 3. 创建material
        const material = new Cesium.Material({
            fabric: {
                type: 'Water',
                uniforms: {
                    baseWaterColor: new Cesium.Color(0.25, 0.6, 0.9, 0.5), // 水面颜色
                    normalMap: config.images + 'waterNormals.jpg', // 贴图
                    frequency: 5000, // 水波纹数量
                    animationSpeed: 0.02, // 水流速
                    amplitude: 30, // 水波纹振动幅度
                    specularIntensity: 5, // 镜面反射强度
                },
            },
        });
        // 4. 创建Appearance
        const appearance = new Cesium.EllipsoidSurfaceAppearance({
            aboveGround: true,
            material,
        });
        // 5. 创建primitive
        var primitive = new Cesium.Primitive({
            geometryInstances,
            appearance,
        });
        primitive.name = this.showRain;
        Viewer.scene.primitives.add(primitive);
        // Viewer.camera.lookAt(primitive.boundingSphere.center, new Cesium.HeadingPitchRange(0.0, Cesium.Math.toRadians(-90), 5000));
        // if (this.regionWeather) {
        //     this.regionWeather.enableWeatherType = SmartEarth.Cesium.RegionWeather.TYPE_RAIN;
        //     this.regionWeather.regionAlpha = 0.6;
        //     this.regionWeather.regionGradientDistance = 300;
        // }
    },
    showSnow() {
        if (this.regionWeather) {
            this.regionWeather.enableWeatherType = SmartEarth.Cesium.RegionWeather.TYPE_SNOW;
@@ -65,9 +132,7 @@
        }
    },
    getCoord(res) {
       const coord = res.point.split(',');
        const coord = res.point.split(',');
        return coord;
    },
    getRegionWather(res) {
@@ -83,7 +148,7 @@
            primitive: model[0].layer.item,
            position: new SmartEarth.Cesium.Cartesian3.fromDegrees(coord[0], coord[1], 1),
            radius: 1000,
        })
        });
    },
};