| | |
| | | clearable |
| | | filterable |
| | | style="width :100%" |
| | | @change="setproChange" |
| | | @change="prjChanged" |
| | | placeholder="请选择项目"> |
| | | <el-option v-for="item in optionts" |
| | | <el-option v-for="item in menus" |
| | | :key="item.code" |
| | | :label="item.name" |
| | | :value="item.code"> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import ImageWMS from "ol/source/ImageWMS"; |
| | | import Image from "ol/layer/Image"; |
| | | import GeoJSON from "ol/format/GeoJSON.js"; |
| | | import queryinfo from "./queryinfo.vue"; |
| | | import { Vector as VectorSource } from "ol/source"; |
| | |
| | | data () { |
| | | return { |
| | | isBusy: false, // 正忙 |
| | | lastPrjCode: "", // 最后选择项目编码 |
| | | showProp: false, // 属性 |
| | | shwoHistogram: false, // 钻孔柱状图 |
| | | showLocal: false, // 定位 |
| | | showOpacity: false, // 不透明度 |
| | | menuVisible: false, // 菜单 |
| | | levelArray: [ // 调试数组 |
| | | levelArray: [ // 高程数组 |
| | | 0, 40000000, 20000000, 10000000, 5000000, 2000000, 1000000, 500000, |
| | | 250000, 200000, 100000, 50000, 17000, 9000, 5000, 2000, 1000, 500, 200, |
| | | 100, 50, 25, 10, 0, |
| | | ], |
| | | eleId: "", |
| | | isShow: false, |
| | | currentData: "", |
| | | currentNode: "", |
| | | firstLevel: false, |
| | | filterText: "", |
| | | appendNodetitle: "", |
| | | maxexpandId: 4, |
| | | rightClickMenuStyle: {}, |
| | | handleTreeCheck: [], |
| | | dialogVisible: false, |
| | | showModelAttach: false, |
| | | addFormServer: { |
| | | opacity: 100, |
| | | serveType: "WMS", |
| | | type: 2, |
| | | }, |
| | | filterText: "", // 关键字过滤 |
| | | currentData: "", // 当前数据 |
| | | currentNode: "", // 当前节点 |
| | | rightClickMenuStyle: {}, // 右键菜单样式 |
| | | handleTreeCheck: [], // 默认选中键 |
| | | layerId: [ |
| | | "m_pipeline", |
| | | "th_strategic_channel", |
| | | "bs_project", |
| | | "m_sitepoint", |
| | | ], |
| | | treeData: [], |
| | | defaultProps: { |
| | | treeData: [], // 树数据 |
| | | defaultProps: { // 默认属性值 |
| | | children: "children", |
| | | label: "cnName", |
| | | }, |
| | | options: [{ |
| | | value: "WMS", |
| | | label: "WMS", |
| | | }, { |
| | | value: "WFS", |
| | | label: "WFS", |
| | | }, |
| | | ], |
| | | childOption: [], |
| | | mptLayer: [], |
| | | optionts: [], |
| | | proValue: null, |
| | | mptLayer: [], // Mpt图层 |
| | | menus: [] // 菜单项 |
| | | }; |
| | | }, |
| | | watch: { |
| | |
| | | }, |
| | | }, |
| | | mounted () { |
| | | this.getMenus() |
| | | this.getMenus(); |
| | | this.$bus.$on("treeDataCopy", (res) => { |
| | | this.$store.state.treeData = this.treeData; |
| | | this.$store.state.checkedKeys = this.$refs.tree.getCheckedKeys(); |
| | |
| | | // 获取菜单 |
| | | async getMenus () { |
| | | let data = await project_selectDirAll(); |
| | | if (data && data.code == 200) this.optionts = data.result; |
| | | if (data && data.code == 200) this.menus = data.result; |
| | | }, |
| | | // 初始化图层 |
| | | async layersStart () { |
| | |
| | | } |
| | | } |
| | | |
| | | if (obj.WMS.length) this.setChangeWMS(obj.WMS, checked); |
| | | if (obj.Tileset.length) this.setChangeTileset(obj.Tileset, checked); |
| | | this.setChangeDEM(obj.DEM, checked); |
| | | if (obj.TMS.length) this.setChangeTMS(obj.TMS, checked); |
| | | if (obj.Mpt.length) this.setChangeMpt(obj.Mpt, checked); |
| | | if (obj.DEM.length) this.setChangeDEM(obj.DEM, checked); |
| | | if (obj.Tileset.length) this.setChangeTileset(obj.Tileset, checked); |
| | | if (obj.WMS.length) this.setChangeWMS(obj.WMS, checked); |
| | | }, |
| | | // 获取子节点 |
| | | getNodes (data, arr) { |
| | |
| | | cullRequestsWhileMovingMultiplier: 10, // 值越小能够更快的剔除:60 |
| | | preloadWhenHidden: true, |
| | | preferLeaves: true, // 预装子节点:false |
| | | maximumMemoryUsage: 512, // 内存分配变小有利于内存回收,提升性能体验 |
| | | maximumMemoryUsage: 768, // 内存分配变小有利于内存回收,提升性能体验 |
| | | progressiveResolutionHeightFraction: 0.5, // 数值偏于0能够让初始加载变得模糊 |
| | | dynamicScreenSpaceErrorDensity: 0.5, // 数值加大,能让周边加载变快 |
| | | dynamicScreenSpaceErrorFactor: 2, // 动态屏幕空间误差的系数 |
| | |
| | | }, |
| | | // 添加TMS图层 |
| | | addTMSLayers (layers) { |
| | | let url = res.url; |
| | | if (res.url.indexOf("{host}") != -1) { |
| | | url = res.url.replace("{host}", iisHost); |
| | | } |
| | | for (let i in layers) { |
| | | let res = layers[i]; |
| | | res.url = res.url.indexOf("{host}") > -1 ? res.url.replace("{host}", iisHost) : res.url; |
| | | |
| | | if (res.pubid) { |
| | | this.setQueryPubid(res); |
| | | } else { |
| | | let layer = Viewer.imageryLayers.addImageryProvider( |
| | | new Cesium.UrlTemplateImageryProvider({ |
| | | url: url, |
| | | maximumLevel: 22, |
| | | }) |
| | | ); |
| | | if (res.pubid) { |
| | | this.setTMSLayerByPubid(res); |
| | | continue; |
| | | } |
| | | |
| | | let layer = Viewer.imageryLayers.addImageryProvider(new Cesium.UrlTemplateImageryProvider({ |
| | | url: res.url, |
| | | maximumLevel: 22, |
| | | })); |
| | | layer.id = res.id; |
| | | layer.name = res.cnName; |
| | | this.setChangeWMS(); |
| | | } |
| | | }, |
| | | // 切换Mpt |
| | |
| | | }, |
| | | // 添加Mpt图层 |
| | | addMptLayers (layers) { |
| | | if (res.url.indexOf("{host}") != -1) { |
| | | res.url = res.url.replace("{host}", iisHost); |
| | | } |
| | | let url = res.url.split(';') |
| | | for (let i in layers) { |
| | | let res = layers[i]; |
| | | if (res.url.indexOf("{host}") > -1) res.url = res.url.replace("{host}", iisHost); |
| | | let urls = res.url.split(';') |
| | | |
| | | let layer = sgworld.Creator.createImageryProvider(res.cnName, "wms", { |
| | | url: url[0], |
| | | layers: url[1] |
| | | }, "0", undefined, true, ""); |
| | | this.mptLayer.push(layer) |
| | | setTimeout(() => { |
| | | this.setChangeWMS(); |
| | | }, 500); |
| | | let layer = sgworld.Creator.createImageryProvider(res.cnName, "wms", { |
| | | url: urls[0], |
| | | layers: urls[1] |
| | | }, "0", undefined, true, ""); |
| | | this.mptLayer.push(layer); |
| | | } |
| | | }, |
| | | // 切换DEM |
| | | setChangeDEM (layers, checked) { |
| | | let ids = this.getCheckNodesIds(), arr = [], isDel = false, useSG = false; |
| | | debugger |
| | | let ids = this.getCheckNodesIds(), arr = []; |
| | | for (let i in layers) { |
| | | let layer = layers[i]; |
| | | if (ids.indexOf(layer.id) != -1) { |
| | | arr.push(layer.url); |
| | | continue; |
| | | } |
| | | |
| | | if (window.Viewer.terrainProvider._layers[0].resource._url == layer.url) isDel = true; // 删除DEM |
| | | } |
| | | |
| | | if (!arr.length && isDel) useSG = true; // demLayer |
| | | if (arr.length) this.addDEMLayers(arr[0], useSG); |
| | | let url = arr.length ? arr[arr.length - 1] : null; |
| | | this.addDEMLayers(url, null == url); |
| | | }, |
| | | // 添加DEM图层 |
| | | addDEMLayer (url, useSG) { |
| | | addDEMLayers (url, useSG) { |
| | | if (useSG) { |
| | | if (Viewer.terrainProvider._isMPT) return; |
| | | |
| | | let option = { |
| | | url: window.sceneConfig.SGUrl, |
| | | layerName: window.sceneConfig.mptName, |
| | | requestVertexNormals: true |
| | | }; |
| | | window.terrainLayer = sgworld.Creator.sfsterrainprovider("", option, "", true, ""); |
| | | } else { |
| | | window.terrainLayer = new Cesium.CesiumTerrainProvider({ |
| | | url: url, |
| | | requestVertexNormals: true |
| | | }); |
| | | sgworld.Creator.sfsterrainprovider("", option, "", true, ""); |
| | | return; |
| | | } |
| | | Viewer.terrainProvider = terrainLayer; |
| | | |
| | | if (url.indexOf("{host}") > -1) url = url.replace("{host}", iisHost); |
| | | Viewer.terrainProvider = new Cesium.CesiumTerrainProvider({ |
| | | url: url, |
| | | requestVertexNormals: true |
| | | }); |
| | | }, |
| | | // 设置Tileset参数 |
| | | async setTilesetArgs (tileset, res) { |
| | |
| | | tileset._root.transform = matrix; |
| | | // Viewer.flyTo(tileset); |
| | | }, |
| | | async setQueryPubid (res) { |
| | | const data = await comprehensive_selectPubById({ id: res.pubid }) |
| | | if (data.code != 200) { |
| | | // |
| | | } else { |
| | | let url = data.result.url; |
| | | if (res.url.indexOf("{host}") != -1) { |
| | | url = res.url.replace("{host}", iisHost); |
| | | } |
| | | let min = data.result.min; |
| | | let max = data.result.max; |
| | | let layer; |
| | | if (max > 0) { |
| | | layer = Viewer.imageryLayers.addImageryProvider( |
| | | new Cesium.UrlTemplateImageryProvider({ |
| | | url: url, |
| | | minimumLevel: min, |
| | | maximumLevel: max, |
| | | }) |
| | | ); |
| | | } else { |
| | | layer = Viewer.imageryLayers.addImageryProvider( |
| | | new Cesium.UrlTemplateImageryProvider({ |
| | | url: url, |
| | | minimumLevel: min, |
| | | }) |
| | | ); |
| | | // 根据Pubid设置TMS图层 |
| | | async setTMSLayerByPubid (res) { |
| | | const data = await comprehensive_selectPubById({ id: res.pubid }); |
| | | if (!data || data.code != 200) return; |
| | | |
| | | let provider = data.result.max > 0 ? |
| | | new Cesium.UrlTemplateImageryProvider({ |
| | | url: res.url, |
| | | minimumLevel: data.result.min, |
| | | maximumLevel: data.result.max |
| | | }) : |
| | | new Cesium.UrlTemplateImageryProvider({ |
| | | url: res.url, |
| | | minimumLevel: data.result.min |
| | | }); |
| | | |
| | | let layer = Viewer.imageryLayers.addImageryProvider(provider); |
| | | layer.name = res.cnName; |
| | | |
| | | // if (data.result.geom) { |
| | | // let wkt = this.$wkt.parse(data.result.geom); |
| | | // Viewer.camera.flyTo({ |
| | | // destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[1], wkt.coordinates[0], 2000) |
| | | // }); |
| | | // } |
| | | }, |
| | | // 切换项目 |
| | | prjChanged (code) { |
| | | this.$store.state.pigCode = code; |
| | | if (code) { |
| | | this.isBusy = true; |
| | | let checkedLayers = this.getCheckedLayersByCode(code); |
| | | |
| | | let checkedKeys = []; |
| | | for (let i in checkedLayers) { |
| | | checkedKeys.push(checkedLayers[i].id); |
| | | } |
| | | |
| | | layer.name = res.cnName; |
| | | if (data.result.geom) { |
| | | // let wkt = this.$wkt.parse(data.result.geom); |
| | | // Viewer.camera.flyTo({ |
| | | // destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[1], wkt.coordinates[0], 2000), |
| | | // }); |
| | | } |
| | | this.setChangeWMS(); |
| | | this.$refs.tree.setCheckedKeys(checkedKeys); |
| | | sessionStorage.setItem("checkedLayers", JSON.stringify(checkedLayers)); |
| | | this.isBusy = false; |
| | | } |
| | | |
| | | for (let i = 0, c = this.treeData.length; i < c; i++) { |
| | | this.handleCheckChange(this.treeData[i], true); |
| | | } |
| | | }, |
| | | async setproChange (res) { |
| | | if (res) { |
| | | this.setCheeckedLayer = this.$refs.tree.getCheckedKeys(); |
| | | this.$store.state.pigCode = res; |
| | | let st_code = this.optionts.filter(rs => { |
| | | if (rs.code == res) { |
| | | return rs |
| | | } |
| | | }) |
| | | |
| | | let val = this.$store.state.oldTree.filter(rs => { |
| | | if (rs.enName == st_code[0].code) { |
| | | return rs |
| | | } |
| | | }) |
| | | this.removeAllLayer(); |
| | | let obj = { |
| | | dirid: res, |
| | | pageIndex: 1, |
| | | pageSize: 10, |
| | | } |
| | | |
| | | const data = await project_selectByDirid(obj); |
| | | if (data.code != 200) { |
| | | this.$message.error("列表获取失败"); |
| | | return; |
| | | } |
| | | |
| | | if (data.result[0]) { |
| | | let geom = data.result[0].geom |
| | | if (geom) { |
| | | let wkt = this.$wkt.parse(geom) |
| | | Viewer.camera.flyTo({ |
| | | destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[0].toFixed(6), wkt.coordinates[1].toFixed(6), 5000), |
| | | }); |
| | | } |
| | | } |
| | | //this.cannelTerrainLayer(); |
| | | //this.setTerrainMptLayer(); |
| | | //清空图层树选中状态 |
| | | this.$refs.tree.setCheckedKeys([]); |
| | | if (val.length > 0) { |
| | | if (val[0].type == 1 && val[0].isProject == 1) {//项目分类 |
| | | let std_check = []; |
| | | for (let i in val) { |
| | | let std_val = this.getNewTree([this.$refs.tree.getNode(val[i].id).data], []) |
| | | for (let j in std_val) { |
| | | std_check.push(std_val[j]) |
| | | } |
| | | } |
| | | let value = this.$store.state.isProjectLayer; |
| | | for (let i in value) { |
| | | |
| | | std_check.push(value[i]) |
| | | } |
| | | this.setProjectLayer(std_check); |
| | | } else { |
| | | this.setChangeProLayer(); |
| | | } |
| | | } else { |
| | | this.setChangeProLayer(); |
| | | } |
| | | } else { |
| | | this.removeAllLayer(); |
| | | this.$store.state.pigCode = null; |
| | | this.$refs.tree.setCheckedKeys(this.setCheeckedLayer); |
| | | let std = []; |
| | | for (let i in this.setCheeckedLayer) { |
| | | std.push(this.$refs.tree.getNode(this.setCheeckedLayer[i]).data) |
| | | } |
| | | this.setProjectLayer(std); |
| | | // 根据项目编码获取选中图层 |
| | | getCheckedLayersByCode (code) { |
| | | let layers = []; |
| | | for (let i = 0, c = this.treeData.length; i < c; i++) { |
| | | this.getCheckedChildLayersByCode(this.treeData[i], code, layers, false); |
| | | } |
| | | |
| | | return layers; |
| | | }, |
| | | removeAllLayer () { |
| | | for (let j in Viewer.scene.primitives._primitives) { |
| | | Viewer.scene.primitives.remove(Viewer.scene.primitives._primitives[j]) |
| | | } |
| | | for (let i in window.Viewer.dataSources._dataSources) { |
| | | window.Viewer.dataSources.remove( |
| | | window.Viewer.dataSources._dataSources[i] |
| | | ); |
| | | } |
| | | for (let i = 0; i < window.Viewer.imageryLayers._layers.length; i++) { |
| | | let val_id = window.Viewer.imageryLayers._layers[i].id; |
| | | if (val_id == 'TMS') { |
| | | window.Viewer.imageryLayers.remove( |
| | | window.Viewer.imageryLayers._layers[i] |
| | | ); |
| | | } |
| | | } |
| | | for (let i in this.mptLayer) { |
| | | this.mptLayer[i].deleteObject(); |
| | | this.mptLayer.splice(i, 1) |
| | | } |
| | | this.mptLayer = []; |
| | | }, |
| | | setProjectLayer (res) { |
| | | let layerid = []; |
| | | for (let j in res) { |
| | | layerid.push(res[j].id) |
| | | } |
| | | this.$refs.tree.setCheckedKeys(layerid); |
| | | // let value = this.$refs.tree.getCheckedNodes(); |
| | | // this.$bus.$emit("showMenuLayer", value); |
| | | let listWMS = []; |
| | | let listWFS = []; |
| | | let listTileset = []; |
| | | let listTMS = []; |
| | | let listMpt = []; |
| | | for (let i in res) { |
| | | if (res[i].type == 2) { |
| | | switch (res[i].serveType) { |
| | | case 'WMS': |
| | | listWMS.push(res[i]) |
| | | break; |
| | | case 'WFS': |
| | | listWFS.push(res[i]) |
| | | break; |
| | | case '3DML': |
| | | case 'Tileset': |
| | | listTileset.push(res[i]) |
| | | break; |
| | | case 'Mpt': |
| | | listMpt.push(res[i]) |
| | | break; |
| | | case 'TMS': |
| | | listTMS.push(res[i]) |
| | | break; |
| | | // 根据项目编码获取选中子图层 |
| | | getCheckedChildLayersByCode (data, code, layers, isPrj) { |
| | | if (data.children && data.children.length) { |
| | | for (let i = 0, c = data.children.length; i < c; i++) { |
| | | let layer = data.children[i]; |
| | | if (layer.children && layer.children.length) { |
| | | let flag = layer.type == 1 && layer.isProject && layer.enName == code; |
| | | this.getCheckedChildLayersByCode(layer, code, layers, flag); |
| | | continue; |
| | | } |
| | | |
| | | if (layer.type == 2 && (layer.isProject || isPrj)) { |
| | | layers.push(layer); |
| | | } |
| | | } |
| | | return; |
| | | } |
| | | // this.setChangeProLayer(); |
| | | this.setChangeWMS(listWMS, true); |
| | | this.setChangeWFS(listWFS, true); |
| | | this.setChangeTileset(listTileset, true); |
| | | this.setChangeTMS(listTMS, true); |
| | | this.setChangeMpt(listMpt, true); |
| | | }, |
| | | getNewTree (obj, result) { |
| | | for (const i in obj) { |
| | | console.log(obj[i].cnName) |
| | | result.push(obj[i]) |
| | | if (obj[i].children && obj[i].children.length > 0) { |
| | | this.getNewTree(obj[i].children, result) |
| | | } |
| | | } |
| | | return result |
| | | }, |
| | | setChangeProLayer () { |
| | | let value = this.$store.state.isProjectLayer; |
| | | if (value.length != 0) { |
| | | |
| | | let std = []; |
| | | for (let i in value) { |
| | | std.push(value[i].id) |
| | | } |
| | | this.$refs.tree.setCheckedKeys(std); |
| | | this.$bus.$emit("showMenuLayer", value); |
| | | if (data.type == 2 && (data.isProject || isPrj)) { |
| | | layers.push(data); |
| | | } |
| | | }, |
| | | // 添加WFS图层 * |