月球大数据地理空间分析展示平台-【前端】-月球2期前端
Surpriseplus
2023-08-22 e2c94dcb58b199eb57c164a67f1b038d401063d7
src/assets/js/Map/rightServer.js
@@ -1,7 +1,196 @@
const rightServer = {
import { getToken } from "@/utils/auth";
//配置文件地址
import config from "./config";
    AddWmtesLayer(url) {
        var urlTemplateImageryProvider = DoubleScreen.right.factory.createImageryLayer({
const rightServer = {
    layerList: [],
    addTreeData(treeNode) {
        if (!treeNode.checked) {
            this.delLayer(treeNode.id);
            return;
        }
        //判断是否为代理
        if (treeNode.proxy) {
            this.addProxyAddress(treeNode); //有代理
        } else {
            this.addUrlAddress(treeNode); //无代理
        }
    },
    //代理地址
    addProxyAddress(res) {
        //判断数据类型
        switch (res.data) {
            case 1: //数字正射影像图
                this.setDataType(res);
                break;
            case 2: //场景地形数据
                this.setTerrainData(res);
                break;
            case 3: //数字高程模型(晕渲图)
                this.setDataType(res);
                break;
            case 4: //单波段栅格数据
                this.setDataType(res);
                break;
            case 5: //多光谱栅格数据
                this.setDataType(res);
                break;
            case 6: //高光谱栅格数据
                this.setDataType(res);
                break;
            case 7: //矢量图层
                this.setVectorData(res);
                break;
            case 8: //三维模型
                this.setModelData(res);
                break;
        }
    },
    //普通地址
    addUrlAddress(res) {
        switch (res.category) {
            case 0: //其他
                break;
            case 1: //GisServer
                this.addProxyAddress(res);
                break;
            case 2: //GeoServer
                this.addGeoServerAddress(res);
                break;
            case 3: //数简
                this.addProxyAddress(res);
                break;
        }
    },
    //Geoserver服务
    addGeoServerAddress(res) {
        //判断数据类型
        switch (res.data) {
            case 1: //数字正射影像图
                this.setGeoDataType(res);
                break;
            case 2: //场景地形数据
                this.setTerrainData(res);
                break;
            case 3: //数字高程模型(晕渲图)
                this.setGeoDataType(res);
                break;
            case 4: //单波段栅格数据
                this.setGeoDataType(res);
                break;
            case 5: //多光谱栅格数据
                this.setGeoDataType(res);
                break;
            case 6: //高光谱栅格数据
                this.setGeoDataType(res);
                break;
            case 7: //矢量图层
                this.setGeoVectorData(res);
                break;
            case 8: //三维模型
                this.setModelData(res);
                break;
        }
    },
    setGeoDataType(res) {
        switch (res.type) {
            case 0: //URL
                break;
            case 1: //TMS
                this.setAddTmsLayer(res);
                break;
            case 2: //WMTS
                this.setAddWmtsLayer(res);
                break;
            case 3: //WMS
                this.setAddGeoWmsLayer(res);
                break;
        }
    },
    setGeoVectorData(res) {
        switch (res.type) {
            case 0: //URL
                break;
            case 3: //WMS
                this.setAddGeoWmsLayer(res);
                break;
            case 4: //WFS
                break;
        }
    },
    setDataType(res) {
        switch (res.type) {
            case 0: //URL
                break;
            case 1: //TMS
                this.setAddTmsLayer(res);
                break;
            case 2: //WMTS
                this.setAddWmtsLayer(res);
                break;
            case 3: //WMS
                this.setAddWmsLayer(res);
                break;
        }
    },
    setTerrainData(res) {
        switch (res.type) {
            case 0: //URL
                this.setAddTearrinLayer(res);
                break;
            case 1: //TMS
                this.setAddTearrinLayer(res);
                break;
        }
    },
    setVectorData(res) {
        switch (res.type) {
            case 0: //URL
                break;
            case 3: //WMS
                this.setAddWmsLayer(res);
                break;
            case 4: //WFS
                break;
        }
    },
    setModelData(res) {
        switch (res.type) {
            case 0: //Tileset
                this.setAddModelLayer(res);
                break;
            case 3: //WMS
                this.setAddModelLayer(res);
                break;
            case 5: //WFS
                break;
        }
    },
    //获取服务地址
    getLayrUrl(res) {
        var url;
        if (res.proxy) {
            const token = getToken();
            url = config.proxy + res.proxy.replaceAll("{token}", token);
        } else {
            url = res.url;
        }
        return url;
    },
    //加载TMS服务
    setAddTmsLayer(res) {
        var url = this.getLayrUrl(res);
        var urlTemplateImageryProvider = new Cesium.UrlTemplateImageryProvider({
            url: url + '/{z}/{x}/{reverseY}.png',
        });
        let img_layer = window.rightViewer.imageryLayers.addImageryProvider(urlTemplateImageryProvider);
        this.layerList.push({ id: res.id, layerData: img_layer, type: "tms" });
    },
    //加载WMTS服务
    setAddWmtsLayer(res) {
        var url = this.getLayrUrl(res);
        var urlTemplateImageryProvider = new Cesium.WebMapTileServiceImageryProvider({
            sourceType: "wmts",
            url: url,
            layer: "",
@@ -33,9 +222,136 @@
                ellipsoid: Cesium.Ellipsoid.MOON,
            }),
        });
        let img_layer = window.rightViewer.imageryLayers.addImageryProvider(urlTemplateImageryProvider);
        this.layerList.push({
            id: res.id,
            layerData: img_layer,
            type: "wmts",
        });
    },
    //加载地形服务
    setAddTearrinLayer(res) {
        this.setChangeTearrinLayer();
        var url = this.getLayrUrl(res);
        window.terrainLayer = new Cesium.CesiumTerrainProvider({
            url: url,
        });
        window.rightViewer.terrainProvider = window.terrainLayer;
        this.layerList.push({ id: res.id, type: "dem" });
    },
    //加载WMS服务
    setAddWmsLayer(res) {
        var url = this.getLayrUrl(res);
        var img_layer = window.rightViewer.createImageryProvider(
            "giserver",
            "wms",
            {
                url: url,
                layers: "",
                parameters: {
                    format: "image/png",
                    transparent: true,
                },
            },
            "0",
            undefined,
            true,
            ""
        );
        this.layerList.push({
            id: res.id,
            layerData: img_layer,
            type: "wmts",
        });
    },
    //加载模型服务
    setAddModelLayer(res) {
        var url = this.getLayrUrl(res);
        let tileset = window.rightViewer.scene.primitives.add(
            new Cesium.Cesium3DTileset({
                name: res.cnName,
                url: url,
                skipLevelOfDetail: true, // 在遍历时候跳过详情:false
                baseScreenSpaceError: 1024,
                maximumScreenSpaceError: 64, // 最大屏幕空间错误:16,数值加大能让最终成像变模糊
                skipScreenSpaceErrorFactor: 16,
                skipLevels: 1,
                immediatelyLoadDesiredLevelOfDetail: false,
                loadSiblings: true, // 自动从中心开始超清化模型:false
                cullWithChildrenBounds: true, // 使用子项边界体积的并集来剔除图块:true
                cullRequestsWhileMoving: true,
                cullRequestsWhileMovingMultiplier: 10, // 值越小能够更快的剔除:60
                preloadWhenHidden: true,
                preferLeaves: true, // 预装子节点:false
                maximumMemoryUsage: 768, // 内存分配变小有利于内存回收,提升性能体验
                progressiveResolutionHeightFraction: 0.5, // 数值偏于0能够让初始加载变得模糊
                dynamicScreenSpaceErrorDensity: 0.5, // 数值加大,能让周边加载变快
                dynamicScreenSpaceErrorFactor: 2, // 动态屏幕空间误差的系数
                dynamicScreenSpaceError: true, // 减少离相机较远的屏幕空间错误:false,全屏加载完之后才清晰化房屋
            })
        );
        tileset.readyPromise.then((tileset) => {
            tileset.id = res.id;
        });
        this.layerList.push({ id: res.id, layerData: tileset, type: "tileset" });
    },
    //地形移除事件
    setChangeTearrinLayer() {
        this.layerList.forEach((e, i) => {
            switch (e.type) {
                case "dem":
                    window.rightViewer.terrainProvider = new Cesium.EllipsoidTerrainProvider(
                        {}
                    );
                    this.layerList.splice(i, 1);
                    break;
            }
        });
    },
    //清除图层
    delLayer(code) {
        this.layerList.forEach((e, i) => {
            if (e.id === code) {
                switch (e.type) {
                    case "wmts":
                        window.rightViewer.imageryLayers.remove(e.layerData);
                        break;
                    case "tms":
                        window.rightViewer.imageryLayers.remove(e.layerData);
                        break;
                    case "dem":
                        window.rightViewer.terrainProvider = new Cesium.EllipsoidTerrainProvider(
                            {}
                        );
                        break;
                    case "tileset":
                        window.rightViewer.scene.primitives.remove(e.layerData)
                        break;
                }
                this.layerList.splice(i, 1);
            }
        });
    },
    //加载GeoServer-WMS服务
    setAddGeoWmsLayer(res) {
        var url = this.getLayrUrl(res);
        let layer = new SmartEarth.Cesium.WebMapServiceImageryProvider({
            url: url,
            layers: res.tab,
            parameters: {
                transparent: true,
                format: "image/png",
                srs: "EPSG:104903",
                styles: "",
            },
            tileWidth: 512,
            tileHeight: 512,
        });
        layer.name = `Wms_Layer${res.id}`;
}
export default rightServer;
        let img_layer = window.rightViewer.imageryLayers.addImageryProvider(layer);
        this.layerList.push({ id: res.id, layerData: img_layer, type: "wmts" });
    },
};
export default rightServer;