| | |
| | | import { getToken } from "@/utils/auth"; |
| | | //配置文件地址 |
| | | import config from "./config"; |
| | | |
| | | // import config from "../../../../public/config/config"; |
| | | import store from "@/store"; |
| | | import { nextTick } from "vue"; |
| | | const server = { |
| | | layerList: [], |
| | | graticules: null, |
| | | alpha: null,//透明度 |
| | | geoLayer: [], |
| | | geoUrl: null, |
| | | wmsLayerId: null, |
| | | addTreeData(treeNode) { |
| | | if (!treeNode.checked) { |
| | | this.delLayer(treeNode.id); |
| | | return; |
| | | } |
| | | // if (!treeNode.checked) { |
| | | // this.delLayer(treeNode.id); |
| | | // return; |
| | | // } |
| | | |
| | | this.alpha = this.getResLayersAlpha(treeNode); |
| | | //判断是否为代理 |
| | | if (treeNode.proxy) { |
| | | this.addProxyAddress(treeNode); //有代理 |
| | | } else { |
| | | this.addUrlAddress(treeNode); //无代理 |
| | | } |
| | | |
| | | if (this.graticules) { |
| | | window.Viewer.imageryLayers.raiseToTop(this.graticules.imageryLayer); |
| | | } |
| | | }, |
| | | showlonlatLine() { |
| | | if (!this.graticules) { |
| | | SmartEarth.Cesium.Ellipsoid.WGS84 = new SmartEarth.Cesium.Ellipsoid( |
| | | 1737400.0, |
| | | 1737400.0, |
| | | 1737400.0 |
| | | ); |
| | | |
| | | this.graticules = new SmartEarth.Cesium.Graticules( |
| | | earthCtrl.Viewer, |
| | | SmartEarth.Cesium.Color.PALEGREEN |
| | | ); |
| | | // graticules.makeCoordAxiss(); |
| | | var that = this; |
| | | earthCtrl.Viewer.scene.preUpdate.addEventListener(function () { |
| | | that.graticules.update(); |
| | | }); |
| | | } else { |
| | | this.graticules.enabled = !this.graticules.enabled; |
| | | } |
| | | }, |
| | | //代理地址 |
| | |
| | | this.setAddWmtsLayer(res); |
| | | break; |
| | | case 3: //WMS |
| | | this.setAddWmsLayer(res); |
| | | // this.setAddWmsLayer(res); |
| | | this.setAddGeoWmsLayer(res) |
| | | break; |
| | | } |
| | | }, |
| | |
| | | case 0: //URL |
| | | break; |
| | | case 3: //WMS |
| | | this.setAddWmsLayer(res); |
| | | // this.setAddWmsLayer(res); |
| | | this.setAddGeoWmsLayer(res) |
| | | break; |
| | | case 4: //WFS |
| | | break; |
| | |
| | | let img_layer = earthCtrl.Creator.createUrlTemplateImageryProvider( |
| | | "tms服务", |
| | | { |
| | | url: Cesium.buildModuleUrl(url + "/{z}/{x}/{y}.png"), |
| | | url: Cesium.buildModuleUrl(url + "/{z}/{x}/{reverseY}.png"), |
| | | }, |
| | | "0", |
| | | undefined, |
| | |
| | | }, |
| | | //加载WMTS服务 |
| | | setAddWmtsLayer(res) { |
| | | this.delLayer(res.id); |
| | | var url = this.getLayrUrl(res); |
| | | var urlTemplateImageryProvider = earthCtrl.factory.createImageryLayer({ |
| | | let urlTemplateImageryProvider = new Cesium.WebMapTileServiceImageryProvider({ |
| | | sourceType: "wmts", |
| | | url: url, |
| | | layer: "", |
| | | id: res.id, |
| | | format: "image/png", |
| | | tileMatrixSetID: "GoogleCRS84Quad01", |
| | | tileMatrixLabels: [ |
| | |
| | | tilingScheme: new Cesium.GeographicTilingScheme({ |
| | | ellipsoid: Cesium.Ellipsoid.MOON, |
| | | }), |
| | | }); |
| | | }) |
| | | |
| | | var imageLayer = window.Viewer.imageryLayers.addImageryProvider(urlTemplateImageryProvider); |
| | | |
| | | imageLayer.id = res.id |
| | | |
| | | imageLayer.alpha = this.alpha; |
| | | // urlTemplateImageryProvider.id = res.id |
| | | this.layerList.push({ |
| | | id: res.id, |
| | | layerData: urlTemplateImageryProvider._primitive, |
| | | layerData: imageLayer, |
| | | type: "wmts", |
| | | alpha: imageLayer, |
| | | }); |
| | | }, |
| | | //获取图层之前的透明度 |
| | | getResLayersAlpha(result) { |
| | | var std = this.layerList.filter(res => { |
| | | if (res.id == result.id) { |
| | | return res; |
| | | } |
| | | }); |
| | | |
| | | if (std.length <= 0) { |
| | | return 1; |
| | | } else { |
| | | var id = std[0].id; |
| | | var val = null; |
| | | var layers = window.Viewer.imageryLayers._layers; |
| | | for (var i in layers) { |
| | | if (layers[i].id == id) { |
| | | val = id; |
| | | return layers[i].alpha; |
| | | } |
| | | } |
| | | if (!null) { |
| | | return 1 |
| | | } |
| | | } |
| | | }, |
| | | //加载地形服务 |
| | | setAddTearrinLayer(res) { |
| | |
| | | var url = this.getLayrUrl(res); |
| | | window.terrainLayer = new Cesium.CesiumTerrainProvider({ |
| | | url: url, |
| | | tilingScheme: new Cesium.GeographicTilingScheme({ |
| | | ellipsoid: Cesium.Ellipsoid.MOON, |
| | | }), |
| | | }); |
| | | Viewer.terrainProvider = window.terrainLayer; |
| | | Viewer.scene.globe.terrainExaggeration = 1.0000001; |
| | | this.layerList.push({ id: res.id, type: "dem" }); |
| | | }, |
| | | //加载WMS服务 |
| | | setAddWmsLayer(res) { |
| | | |
| | | var url = this.getLayrUrl(res); |
| | | |
| | | var img_layer = sgworld.Creator.createImageryProvider( |
| | | "giserver", |
| | | "wms", |
| | |
| | | |
| | | //清除图层 |
| | | delLayer(code) { |
| | | |
| | | this.layerList.forEach((e, i) => { |
| | | if (e.id === code) { |
| | | switch (e.type) { |
| | | case "wmts": |
| | | window.Viewer.imageryLayers.remove(e.layerData); |
| | | break; |
| | | case "wms": |
| | | window.Viewer.imageryLayers.remove(e.layerData); |
| | | break; |
| | | case "tms": |
| | |
| | | ); |
| | | break; |
| | | case "tileset": |
| | | window.Viewer.scene.primitives.remove(e.layerData) |
| | | window.Viewer.scene.primitives.remove(e.layerData); |
| | | break; |
| | | } |
| | | this.layerList.splice(i, 1); |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | delLayerAll() { |
| | | this.layerList.forEach((e, i) => { |
| | | this.setRemoveLayer(e); |
| | | this.layerList.splice(i, 1); |
| | | }); |
| | | }, |
| | | setRemoveLayer(e) { |
| | | switch (e.type) { |
| | | case "wmts": |
| | | window.Viewer.imageryLayers.remove(e.layerData); |
| | | break; |
| | | case "tms": |
| | | window.Viewer.imageryLayers.remove(e.layerData); |
| | | break; |
| | | case "dem": |
| | | window.Viewer.terrainProvider = new Cesium.EllipsoidTerrainProvider( |
| | | {} |
| | | ); |
| | | break; |
| | | case "tileset": |
| | | window.Viewer.scene.primitives.remove(e.layerData); |
| | | break; |
| | | |
| | | } |
| | | }, |
| | | //加载GeoServer-WMS服务 |
| | | setAddGeoWmsLayer(res) { |
| | | var url = this.getLayrUrl(res); |
| | | setAddGeoWmsLayer(res, alpha) { |
| | | // |
| | | var url = res.url; |
| | | var that = this; |
| | | this.delLayer(res.id) |
| | | var getFeatureInfoFormat = new SmartEarth.Cesium.GetFeatureInfoFormat( |
| | | "html", |
| | | null, |
| | | function (html) { |
| | | that.getFeatureInfo(html); |
| | | } |
| | | ); |
| | | if (url.indexOf('{token}') > -1) { |
| | | const token = getToken(); |
| | | url = config.proxy + url.replaceAll("{token}", token); |
| | | } else { |
| | | url = url; |
| | | } |
| | | |
| | | let layer = new SmartEarth.Cesium.WebMapServiceImageryProvider({ |
| | | url: url, |
| | | layers: res.tab, |
| | | id: res.id, |
| | | getFeatureInfoParameters: { info_format: "text/html", srs: "EPSG:104903" }, |
| | | enablePickFeatures: true, |
| | | getFeatureInfoFormats: [getFeatureInfoFormat], |
| | | parameters: { |
| | | transparent: true, |
| | | format: "image/png", |
| | |
| | | tileWidth: 512, |
| | | tileHeight: 512, |
| | | }); |
| | | layer.name = `Wms_Layer${res.id}`; |
| | | |
| | | let img_layer = window.Viewer.imageryLayers.addImageryProvider(layer); |
| | | img_layer.name = `Wms_Layer${res.id}`; |
| | | img_layer.id = res.id |
| | | img_layer.alpha = alpha ? alpha : 1; |
| | | this.layerList.push({ id: res.id, layerData: img_layer, type: "wmts" }); |
| | | }, |
| | | addGeoServerMmsLayers(layer, url) { |
| | | this.geoLayer = layer; |
| | | this.geoUrl = url; |
| | | var that = this; |
| | | var getFeatureInfoFormat = new SmartEarth.Cesium.GetFeatureInfoFormat( |
| | | "html", |
| | | null, |
| | | function (html) { |
| | | that.getFeatureInfo(html); |
| | | } |
| | | ); |
| | | if (url.indexOf('{token}') > -1) { |
| | | const token = getToken(); |
| | | url = config.proxy + url.replaceAll("{token}", token); |
| | | } else { |
| | | url = url; |
| | | } |
| | | |
| | | if (!this.wmsLayerId) { |
| | | this.wmsLayerId = new Date(); |
| | | } |
| | | let wmslayer = new SmartEarth.Cesium.WebMapServiceImageryProvider({ |
| | | url: url, |
| | | id: this.wmsLayerId, |
| | | layers: layer.toString(), |
| | | getFeatureInfoParameters: { info_format: "text/html", srs: "EPSG:104903" }, |
| | | enablePickFeatures: true, |
| | | getFeatureInfoFormats: [getFeatureInfoFormat], |
| | | parameters: { |
| | | transparent: true, |
| | | format: "image/png", |
| | | srs: "EPSG:104903", |
| | | styles: "", |
| | | }, |
| | | tileWidth: 512, |
| | | tileHeight: 512, |
| | | }); |
| | | |
| | | let img_layer = window.Viewer.imageryLayers.addImageryProvider(wmslayer); |
| | | img_layer.id = this.wmsLayerId; |
| | | this.layerList.push({ id: this.wmsLayerId, layerData: img_layer, type: "wmts" }); |
| | | }, |
| | | getGeoLayerChangeAlpha(res) { |
| | | var std = []; |
| | | for (var i in this.geoLayer) { |
| | | if (this.geoLayer[i] != res.tab) { |
| | | std.push(this.geoLayer[i]) |
| | | } |
| | | } |
| | | this.geoLayer = []; |
| | | this.geoLayer = std; |
| | | var imageLayers = window.Viewer.imageryLayers._layers; |
| | | for (var i in imageLayers) { |
| | | if (imageLayers[i].id == this.wmsLayerId) { |
| | | |
| | | window.Viewer.imageryLayers.remove(imageLayers[i]) |
| | | } |
| | | } |
| | | for (var i in this.layerList) { |
| | | if (this.layerList[i].id == this.wmsLayerId) { |
| | | this.layerList.splice(i, 1) |
| | | } |
| | | } |
| | | if (this.geoLayer.length > 0) { |
| | | this.addGeoServerMmsLayers(this.geoLayer, this.geoUrl) |
| | | } |
| | | this.setAddGeoWmsLayer(res); |
| | | for (var i in this.layerList) { |
| | | if (this.layerList[i].id == res.id) { |
| | | return { |
| | | id: i, |
| | | layer: this.layerList[i] |
| | | }; |
| | | break; |
| | | } |
| | | } |
| | | }, |
| | | getFeatureInfo(html) { |
| | | var start = |
| | | html.indexOf('<caption class="featureInfo">') + |
| | | '<caption class="featureInfo">'.length; |
| | | var end = html.indexOf("</caption>"); |
| | | var tab = html.substr(start, end - start); |
| | | var std = html |
| | | .substr( |
| | | html.indexOf("<th>"), |
| | | html.lastIndexOf("</th>") - html.indexOf("<th>") + 5 |
| | | ) |
| | | .replaceAll(" ", "") |
| | | .replaceAll("\n", "") |
| | | .split("</th>"); |
| | | var gindex = null; |
| | | for (var i = 0; i < std.length; i++) { |
| | | if (std[i].indexOf("gid") > -1) { |
| | | gindex = i; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | if (!gindex) return; |
| | | var str = html |
| | | .substr( |
| | | html.indexOf("<td>"), |
| | | html.lastIndexOf("</td>") - html.indexOf("<td>") + 5 |
| | | ) |
| | | .replaceAll(" ", "") |
| | | .replaceAll("\n", "") |
| | | .split("</td>"); |
| | | var gid = parseInt(str[gindex].replaceAll("<td>", "")); |
| | | if (gid && tab) { |
| | | store.state.details = { |
| | | gid: gid, |
| | | tab: tab, |
| | | showDetails: true, |
| | | }; |
| | | } |
| | | }, |
| | | }; |
| | | export default server; |