| | |
| | | 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: "", |
| | |
| | | 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; |