| | |
| | | } |
| | | |
| | | let checkKey = [], checkedLayers = []; |
| | | var layers = data.result.filter((lyr) => { |
| | | let layers = data.result.filter((lyr) => { |
| | | if (lyr.url && lyr.type == 2 && lyr.isShow == 1) { |
| | | checkKey.push(lyr.id); |
| | | if (lyr.serveType == "WMS") checkedLayers.push(lyr); |
| | |
| | | showLayerAttribute (data) { |
| | | this.rmListener(); |
| | | this.currentData = data ? data : this.currentData; |
| | | var layer = this.currentData.enName.replaceAll("_", ""); |
| | | let layer = this.currentData.enName.replaceAll("_", ""); |
| | | this.$store.state.mapSpaceQueryLayer = layer; |
| | | this.$store.state.showPopBoxFlag = true; |
| | | this.$store.state.mapPopBoxFlag = "2"; |
| | |
| | | async positioning () { |
| | | this.rmListener(); |
| | | if (["Tileset", "3DML"].indexOf(this.currentData.serveType) > -1) { |
| | | for (var i in Viewer.scene.primitives._primitives) { |
| | | for (let i in Viewer.scene.primitives._primitives) { |
| | | if (Viewer.scene.primitives._primitives[i].id == this.currentData.cnName) { |
| | | Viewer.flyTo(Viewer.scene.primitives._primitives[i]); |
| | | break; |
| | |
| | | } |
| | | |
| | | if (["TMS", "DOM", "DEM"].indexOf(this.currentData.serveType) > -1 && this.currentData.pubid) { |
| | | var data = await comprehensive_selectPubById({ id: this.currentData.pubid }); |
| | | let data = await comprehensive_selectPubById({ id: this.currentData.pubid }); |
| | | if (data.result && data.result.geom) { |
| | | var wkt = this.$wkt.parse(data.result.geom); |
| | | var height = this.getHeight(wkt.coordinates[2]); |
| | | let wkt = this.$wkt.parse(data.result.geom); |
| | | let height = this.getHeight(wkt.coordinates[2]); |
| | | Viewer.camera.flyTo({ |
| | | destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[1], wkt.coordinates[0], height), // 2000 |
| | | }); |
| | |
| | | // 钻孔柱状图 |
| | | async histogram () { |
| | | this.rmListener(); |
| | | var layer = this.currentData.enName.replaceAll("_", ""); |
| | | let layer = this.currentData.enName.replaceAll("_", ""); |
| | | this.$store.state.mapSpaceQueryLayer = layer; |
| | | this.$store.state.mapPopBoxFlag = "2"; |
| | | this.$store.state.showPopBoxFlag = true; |
| | |
| | | // 透明度 |
| | | pellucidity () { |
| | | this.rmListener(); |
| | | for (var j in Viewer.scene.primitives._primitives) { |
| | | for (let j in Viewer.scene.primitives._primitives) { |
| | | if (Viewer.scene.primitives._primitives[j].id == this.currentData.cnName) { |
| | | this.$store.state.setAlphaDity = this.currentData; |
| | | this.$bus.$emit("showPellucidity", true); |
| | |
| | | getNodes (data, arr) { |
| | | if (data.children) { |
| | | for (let i = 0, c = data.children.length; i < c; i++) { |
| | | var node = data.children[i]; |
| | | let node = data.children[i]; |
| | | if (node.children) { |
| | | this.getNodes(node, arr) |
| | | } else { |
| | |
| | | }, |
| | | // 获取节点ID |
| | | getCheckNodesIds () { |
| | | var nodes = this.$refs.tree.getCheckedNodes(); |
| | | |
| | | var ids = []; |
| | | for (var i in nodes) { |
| | | let nodes = this.$refs.tree.getCheckedNodes(); |
| | | let ids = []; |
| | | for (let i in nodes) { |
| | | ids.push(nodes[i].id); |
| | | } |
| | | |
| | |
| | | }, |
| | | // 切换WMS服务 |
| | | setChangeWMS (layers, checked) { |
| | | var value = this.$refs.tree.getCheckedNodes(); |
| | | let value = this.$refs.tree.getCheckedNodes(); |
| | | this.$bus.$emit("showMenuLayer", value); |
| | | }, |
| | | // 切换Tileset |
| | | setChangeTileset (layers, checked) { |
| | | let ids = this.getCheckNodesIds(), arr = []; |
| | | for (var i in layers) { |
| | | var layer = layers[i]; |
| | | for (let k in layers) { |
| | | let layer = layers[k]; |
| | | if (ids.indexOf(layer.id) > -1) { |
| | | arr.push(layer); |
| | | continue; |
| | | } |
| | | |
| | | for (var j in Viewer.scene.primitives._primitives) { |
| | | for (let j in Viewer.scene.primitives._primitives) { |
| | | if (Viewer.scene.primitives._primitives[j].id == layer.cnName) { |
| | | Viewer.scene.primitives.remove(Viewer.scene.primitives._primitives[j]); |
| | | break; |
| | | } |
| | | } |
| | | |
| | | var list = this.$store.state.setAlphaList; |
| | | for (var i = 0; i < list.length; i++) { |
| | | let list = this.$store.state.setAlphaList; |
| | | for (let i = 0; i < list.length; i++) { |
| | | if (list[i].name == layer.cnName) { |
| | | list.splice(i, 1); |
| | | } |
| | |
| | | }, |
| | | // 添加Tileset图层 |
| | | addTilesetLayers (layers) { |
| | | // |
| | | for (let i in layers) { |
| | | let res = layers[i]; |
| | | let url = res.url.indexOf("{host}") > -1 ? res.url.replace("{host}", iisHost) : modelUrl + "/" + res.url; |
| | | |
| | | let tileset = Viewer.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: 512, // 内存分配变小有利于内存回收,提升性能体验 |
| | | progressiveResolutionHeightFraction: 0.5, // 数值偏于0能够让初始加载变得模糊 |
| | | dynamicScreenSpaceErrorDensity: 0.5, // 数值加大,能让周边加载变快 |
| | | dynamicScreenSpaceErrorFactor: 2, // 动态屏幕空间误差的系数 |
| | | dynamicScreenSpaceError: true, // 减少离相机较远的屏幕空间错误:false,全屏加载完之后才清晰化房屋 |
| | | }) |
| | | ); |
| | | tileset.readyPromise.then((tileset) => { |
| | | tileset.id = res.cnName; |
| | | tileset.layerId = res.id; |
| | | tileset.pubid = res.pubid; |
| | | |
| | | if (res.serveType != '3DML') { |
| | | // Cesium.Matrix4.equals(a,b) 判断矩阵是否相等,整个根节点模型矩阵,该tileSet=>世界坐标系,单位矩阵对角线值为1.0的4*4矩阵 |
| | | if (!Cesium.Matrix4.equals(tileset.root.transform, Cesium.Matrix4.IDENTITY)) { |
| | | // 获取模型的世界坐标(笛卡尔),Cesium.Matrix4.getTranslation 通过仿射变换矩阵获取该tileSet的世界坐标 |
| | | const transformCenter = Cesium.Matrix4.getTranslation(tileset.root.transform, new Cesium.Cartesian3()); |
| | | // 将笛卡尔坐标转换为WGS84经纬度坐标(模型的) |
| | | const transformCartographic = Cesium.Cartographic.fromCartesian(transformCenter); |
| | | // 将笛卡尔坐标转换为WGS84经纬度坐标(截面的) |
| | | const boundingSphereCartographic = Cesium.Cartographic.fromCartesian(tileset.boundingSphere.center); |
| | | const height = boundingSphereCartographic.height - transformCartographic.height; |
| | | // 从一个Cartesian3对象生成Matrix4变换矩阵(裁切面的) |
| | | window.modelHeight = height; |
| | | } else { |
| | | window.modelHeight = 0; |
| | | } |
| | | this.setTilesetArgs(tileset, res); |
| | | } |
| | | }); |
| | | } |
| | | }, |
| | | // 切换TMS |
| | | setChangeTMS (layers, checked) { |
| | | let ids = this.getCheckNodesIds(), arr = []; |
| | | for (var i in layers) { |
| | | var layer = layers[i]; |
| | | for (let j in layers) { |
| | | let layer = layers[j]; |
| | | if (ids.indexOf(layer.id) > -1) { |
| | | arr.push(layer); |
| | | continue; |
| | | } |
| | | |
| | | for (var i = 0; i < window.Viewer.imageryLayers._layers.length; i++) { |
| | | for (let i = 0; i < window.Viewer.imageryLayers._layers.length; i++) { |
| | | if (window.Viewer.imageryLayers._layers[i].name == layer.cnName) { |
| | | window.Viewer.imageryLayers.remove(window.Viewer.imageryLayers._layers[i]); |
| | | break; |
| | |
| | | |
| | | if (arr.length) this.addTMSLayers(arr); |
| | | }, |
| | | // 添加Tile图层 |
| | | // 添加TMS图层 |
| | | addTMSLayers (layers) { |
| | | // |
| | | let url = res.url; |
| | | if (res.url.indexOf("{host}") != -1) { |
| | | url = res.url.replace("{host}", iisHost); |
| | | } |
| | | |
| | | if (res.pubid) { |
| | | this.setQueryPubid(res); |
| | | } else { |
| | | let layer = Viewer.imageryLayers.addImageryProvider( |
| | | new Cesium.UrlTemplateImageryProvider({ |
| | | url: url, |
| | | maximumLevel: 22, |
| | | }) |
| | | ); |
| | | layer.name = res.cnName; |
| | | this.setChangeWMS(); |
| | | } |
| | | }, |
| | | // 切换Mpt |
| | | setChangeMpt (layers, checked) { |
| | | let ids = this.getCheckNodesIds(), arr = []; |
| | | for (var i in layers) { |
| | | var layer = layers[i]; |
| | | for (let j in layers) { |
| | | let layer = layers[j]; |
| | | if (ids.indexOf(layer.id) != -1) { |
| | | arr.push(layer); |
| | | continue; |
| | | } |
| | | |
| | | for (var i in this.mptLayer) { |
| | | for (let i in this.mptLayer) { |
| | | if (this.mptLayer[i].treeobj.name == layer.cnName) { |
| | | this.mptLayer[i].deleteObject(); |
| | | this.mptLayer.splice(i, 1); |
| | |
| | | }, |
| | | // 添加Mpt图层 |
| | | addMptLayers (layers) { |
| | | // |
| | | if (res.url.indexOf("{host}") != -1) { |
| | | res.url = res.url.replace("{host}", iisHost); |
| | | } |
| | | let url = 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); |
| | | }, |
| | | // 切换DEM |
| | | setChangeDEM (layers, checked) { |
| | | let ids = this.getCheckNodesIds(), arr = [], isDel = false; |
| | | for (var i in layers) { |
| | | var layer = layers[i]; |
| | | let ids = this.getCheckNodesIds(), arr = [], isDel = false, useSG = false; |
| | | for (let i in layers) { |
| | | let layer = layers[i]; |
| | | if (ids.indexOf(layer.id) != -1) { |
| | | arr.push(layer.url); |
| | | continue; |
| | | } |
| | | |
| | | // 删除DEM |
| | | if (window.Viewer.terrainProvider._layers[0].resource._url == layer.url) { |
| | | isDel = true; |
| | | } |
| | | if (window.Viewer.terrainProvider._layers[0].resource._url == layer.url) isDel = true; // 删除DEM |
| | | } |
| | | |
| | | if (!arr.length && isDel) arr.push(demLayer); |
| | | if (arr.length) this.addDEMLayers(arr[0]); |
| | | if (!arr.length && isDel) useSG = true; // demLayer |
| | | if (arr.length) this.addDEMLayers(arr[0], useSG); |
| | | }, |
| | | // 添加DEM图层 |
| | | addDEMLayer (url) { |
| | | Viewer.terrainLayer = new Cesium.CesiumTerrainProvider({ |
| | | url: url, |
| | | requestVertexNormals: true |
| | | }); |
| | | }, |
| | | async setAddLayers (res) { |
| | | if (res.serveType == "WMS") { |
| | | var resource = geoServerURl; |
| | | if (res.resource != null && res.resource != undefined) { |
| | | resource = res.resource; |
| | | } |
| | | var imageryLayers = window.Viewer.scene.imageryLayers; |
| | | let layerWMS = new Cesium.WebMapServiceImageryProvider({ |
| | | url: resource, |
| | | layers: res.url, |
| | | parameters: { |
| | | transparent: true, |
| | | format: "image/png", |
| | | srs: "EPSG:4490", |
| | | styles: "", |
| | | }, |
| | | tileWidth: 512, |
| | | tileHeight: 512, |
| | | }); |
| | | layerWMS.name = res.cnName; |
| | | //透明度 |
| | | var tdtAnnoLayer = imageryLayers.addImageryProvider(layerWMS); |
| | | if (res.opacity) { |
| | | tdtAnnoLayer.alpha = parseInt(res.opacity) / 100; |
| | | } |
| | | var layer2 = new Image({ |
| | | name: res.cnName, |
| | | source: new ImageWMS({ |
| | | crossOrigin: "anonymous", |
| | | url: resource, |
| | | params: { |
| | | FORMAT: "image/png", |
| | | VERSION: "1.1.1", |
| | | LAYERS: res.url, |
| | | }, |
| | | }), |
| | | }); |
| | | if (res.opacity) { |
| | | layer2.setOpacity(parseInt(res.opacity) / 100); |
| | | } |
| | | window.map.addLayer(layer2); |
| | | } else if (res.serveType == "WFS") { |
| | | var url = |
| | | res.resource + |
| | | "?service=WFS&version=1.0.0&request=GetFeature&typeName=" + |
| | | res.url + |
| | | "&outputFormat=application%2Fjson"; |
| | | $.ajax({ |
| | | url: url, |
| | | cache: false, |
| | | async: true, |
| | | success: function (data) { |
| | | var datasource = Cesium.GeoJsonDataSource.load(data, { |
| | | stroke: Cesium.Color.YELLOW, |
| | | fill: Cesium.Color.YELLOW.withAlpha(0.1), |
| | | alpha: 0.1, |
| | | strokeWidth: 8, |
| | | clampToGround: true, //是否贴地 |
| | | }); |
| | | datasource.then((data) => { |
| | | data.name = res.cnName; |
| | | window.Viewer.dataSources.add(data); |
| | | }); |
| | | }, |
| | | error: function (data) { |
| | | console.log("error"); |
| | | }, |
| | | }); |
| | | var vectorLayer = new VectorLayer({ |
| | | name: res.cnName, |
| | | source: new VectorSource({ |
| | | url: url, |
| | | format: new GeoJSON(), |
| | | }), |
| | | }); |
| | | window.map.addLayer(vectorLayer); |
| | | } else if (res.serveType == "Tileset" || res.serveType == "3DML") { |
| | | var url; |
| | | if (res.url.indexOf("{host}") != -1) { |
| | | url = res.url.replace("{host}", iisHost); |
| | | } else { |
| | | url = modelUrl + "/" + res.url |
| | | } |
| | | var tileset = Viewer.scene.primitives.add( |
| | | new Cesium.Cesium3DTileset({ |
| | | name: res.cnName, |
| | | url: url, //192.168.20.106,to4 |
| | | maximumScreenSpaceError: 64, // 最大屏幕空间错误:16 |
| | | maximumMemoryUsage: 768, // 最大内存:512 |
| | | dynamicScreenSpaceError: true, // 减少离相机较远的屏幕空间错误:false |
| | | skipLevelOfDetail: true, // 在遍历时候跳过详情:false |
| | | }) |
| | | ); |
| | | |
| | | tileset.readyPromise.then((tileset) => { |
| | | tileset.id = res.cnName; |
| | | tileset.layerId = res.id; |
| | | tileset.pubid = res.pubid; |
| | | if (res.serveType != '3DML') { |
| | | |
| | | // Cesium.Matrix4.equals(a,b)判断两个四维矩阵是否相等 |
| | | // 整个根节点模型矩阵,该tileSet=>世界坐标系 |
| | | // 单位矩阵,对角线值为1.0的4*4矩阵 |
| | | if (!Cesium.Matrix4.equals(tileset.root.transform, Cesium.Matrix4.IDENTITY)) { |
| | | // 获取模型的世界坐标(笛卡尔) |
| | | // Cesium.Matrix4.getTranslation 通过仿射变换矩阵获取该tileSet的世界坐标 |
| | | const transformCenter = Cesium.Matrix4.getTranslation( |
| | | tileset.root.transform, |
| | | new Cesium.Cartesian3() |
| | | ); |
| | | // 将笛卡尔坐标转换为WGS84经纬度坐标(模型的) |
| | | const transformCartographic = Cesium.Cartographic.fromCartesian( |
| | | transformCenter |
| | | ); |
| | | // 将笛卡尔坐标转换为WGS84经纬度坐标(截面的) |
| | | const boundingSphereCartographic = Cesium.Cartographic.fromCartesian( |
| | | tileset.boundingSphere.center |
| | | ); |
| | | const height = boundingSphereCartographic.height - transformCartographic.height; |
| | | // 从一个Cartesian3对象生成Matrix4变换矩阵(裁切面的) |
| | | window.modelHeight = height; |
| | | } else window.modelHeight = 0; |
| | | this.getTilesetArgs(tileset, res); |
| | | } |
| | | }); |
| | | this.$store.state.setAlphaList.push({ |
| | | name: res.cnName, |
| | | alpha: 1 |
| | | }) |
| | | window.model = tileset |
| | | } else if (res.serveType == "TMS") { |
| | | var url = res.url; |
| | | if (res.url.indexOf("{host}") != -1) { |
| | | url = res.url.replace("{host}", iisHost); |
| | | } |
| | | |
| | | if (res.pubid) { |
| | | this.setQueryPubid(res); |
| | | } else { |
| | | |
| | | var layer = Viewer.imageryLayers.addImageryProvider( |
| | | new Cesium.UrlTemplateImageryProvider({ |
| | | url: url, |
| | | maximumLevel: 22, |
| | | }) |
| | | ); |
| | | layer.name = res.cnName; |
| | | this.setChangeWMS(); |
| | | } |
| | | |
| | | } else if (res.serveType == "Mpt") { |
| | | |
| | | if (res.url.indexOf("{host}") != -1) { |
| | | res.url = res.url.replace("{host}", iisHost); |
| | | } |
| | | var url = res.url.split(';') |
| | | |
| | | var layer = sgworld.Creator.createImageryProvider(res.cnName, "wms", { |
| | | url: url[0], |
| | | layers: url[1] |
| | | }, "0", undefined, true, ""); |
| | | this.mptLayer.push(layer) |
| | | setTimeout(() => { |
| | | this.setChangeWMS(); |
| | | }, 500); |
| | | } |
| | | }, |
| | | async getTilesetArgs (tileset, res) { |
| | | if (res.pubid > 0) { |
| | | const data = await comprehensive_selectPubById({ id: res.pubid }) |
| | | if (data.code != 200) { |
| | | // |
| | | } else { |
| | | if (res.serveType != '3DML') { |
| | | this.reload(tileset, data.result.json) |
| | | } else { |
| | | this.tileSet(tileset, parseFloat(res.elev)) |
| | | } |
| | | } |
| | | addDEMLayer (url, useSG) { |
| | | if (useSG) { |
| | | let option = { |
| | | url: window.sceneConfig.SGUrl, |
| | | layerName: window.sceneConfig.mptName, |
| | | requestVertexNormals: true |
| | | }; |
| | | window.terrainLayer = sgworld.Creator.sfsterrainprovider("", option, "", true, ""); |
| | | } else { |
| | | this.tileSet(tileset, parseFloat(res.elev)) |
| | | window.terrainLayer = new Cesium.CesiumTerrainProvider({ |
| | | url: url, |
| | | requestVertexNormals: true |
| | | }); |
| | | } |
| | | Viewer.terrainProvider = terrainLayer; |
| | | }, |
| | | // 设置Tileset参数 |
| | | async setTilesetArgs (tileset, res) { |
| | | if (res.serveType == '3DML' || !res.pubid) { |
| | | this.setTilesetHeigth(tileset, parseFloat(res.elev)); |
| | | return; |
| | | } |
| | | |
| | | const data = await comprehensive_selectPubById({ id: res.pubid }) |
| | | if (data.code == 200) this.setTilesetCoord(tileset, data.result.json); |
| | | }, |
| | | // 设置Tileset高度 |
| | | setTilesetHeigth (tileset, height) { |
| | | //3dtile模型的边界球体 |
| | | let boundingSphere = tileset.boundingSphere; |
| | | //迪卡尔空间直角坐标=>地理坐标(弧度制) |
| | | let cartographic_original = Cesium.Cartographic.fromCartesian(boundingSphere.center); |
| | | //地理坐标(弧度制)=>迪卡尔空间直角坐标 |
| | | let Cartesian3_original = Cesium.Cartesian3.fromRadians(cartographic_original.longitude, cartographic_original.latitude, cartographic_original.height); |
| | | let Cartesian3_offset = Cesium.Cartesian3.fromRadians(cartographic_original.longitude, cartographic_original.latitude, height); |
| | | //获得地面和offset的转换 |
| | | let translation = Cesium.Cartesian3.subtract(Cartesian3_offset, Cartesian3_original, new Cesium.Cartesian3()); |
| | | //修改模型矩阵 |
| | | tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation); |
| | | // Viewer.flyTo(tileset); |
| | | }, |
| | | // 设置Tileset坐标 |
| | | setTilesetCoord (tileset, json) { |
| | | let vm = JSON.parse(json); |
| | | let pos = Cesium.Cartesian3.fromDegrees(vm.lon, vm.lat, vm.height); |
| | | let converter = Cesium.Transforms.eastNorthUpToFixedFrame; |
| | | let hpr = new Cesium.HeadingPitchRoll(Cesium.Math.toRadians(vm.yaw), 0, 0); |
| | | let matrix = Cesium.Transforms.headingPitchRollToFixedFrame(pos, hpr, Cesium.Ellipsoid.WGS84, converter); |
| | | tileset._root.transform = matrix; |
| | | // Viewer.flyTo(tileset); |
| | | }, |
| | | async setQueryPubid (res) { |
| | | const data = await comprehensive_selectPubById({ id: res.pubid }) |
| | | if (data.code != 200) { |
| | | // |
| | | } else { |
| | | var url = data.result.url; |
| | | let url = data.result.url; |
| | | if (res.url.indexOf("{host}") != -1) { |
| | | url = res.url.replace("{host}", iisHost); |
| | | } |
| | | var min = data.result.min; |
| | | var max = data.result.max; |
| | | var layer; |
| | | let min = data.result.min; |
| | | let max = data.result.max; |
| | | let layer; |
| | | if (max > 0) { |
| | | layer = Viewer.imageryLayers.addImageryProvider( |
| | | new Cesium.UrlTemplateImageryProvider({ |
| | |
| | | |
| | | layer.name = res.cnName; |
| | | if (data.result.geom) { |
| | | // var wkt = this.$wkt.parse(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(); |
| | | } |
| | | }, |
| | | reload (tileset, res) { |
| | | var vm = JSON.parse(res) |
| | | var pos = Cesium.Cartesian3.fromDegrees(vm.lon, vm.lat, vm.height); |
| | | var converter = Cesium.Transforms.eastNorthUpToFixedFrame; |
| | | var hpr = new Cesium.HeadingPitchRoll(Cesium.Math.toRadians(vm.yaw), 0, 0); |
| | | var matrix = Cesium.Transforms.headingPitchRollToFixedFrame(pos, hpr, Cesium.Ellipsoid.WGS84, converter); |
| | | tileset._root.transform = matrix; |
| | | // Viewer.flyTo(tileset); |
| | | }, |
| | | tileSet (tileset, height) { |
| | | //3dtile模型的边界球体 |
| | | var boundingSphere = tileset.boundingSphere; |
| | | //迪卡尔空间直角坐标=>地理坐标(弧度制) |
| | | var cartographic_original = Cesium.Cartographic.fromCartesian(boundingSphere.center); |
| | | //地理坐标(弧度制)=>迪卡尔空间直角坐标 |
| | | var Cartesian3_original = Cesium.Cartesian3.fromRadians(cartographic_original.longitude, cartographic_original.latitude, cartographic_original.height); |
| | | var Cartesian3_offset = Cesium.Cartesian3.fromRadians(cartographic_original.longitude, cartographic_original.latitude, height); |
| | | //获得地面和offset的转换 |
| | | var translation = Cesium.Cartesian3.subtract(Cartesian3_offset, Cartesian3_original, new Cesium.Cartesian3()); |
| | | //修改模型矩阵 |
| | | tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation); |
| | | // Viewer.flyTo(tileset); |
| | | }, |
| | | async setproChange (res) { |
| | | if (res) { |
| | | this.setCheeckedLayer = this.$refs.tree.getCheckedKeys(); |
| | | this.$store.state.pigCode = res; |
| | | var st_code = this.optionts.filter(rs => { |
| | | let st_code = this.optionts.filter(rs => { |
| | | if (rs.code == res) { |
| | | return rs |
| | | } |
| | | }) |
| | | |
| | | var val = this.$store.state.oldTree.filter(rs => { |
| | | let val = this.$store.state.oldTree.filter(rs => { |
| | | if (rs.enName == st_code[0].code) { |
| | | return rs |
| | | } |
| | | }) |
| | | this.removeAllLayer(); |
| | | var obj = { |
| | | let obj = { |
| | | dirid: res, |
| | | pageIndex: 1, |
| | | pageSize: 10, |
| | |
| | | } |
| | | |
| | | if (data.result[0]) { |
| | | var geom = data.result[0].geom |
| | | let geom = data.result[0].geom |
| | | if (geom) { |
| | | var wkt = this.$wkt.parse(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.cannelTerrainLayer(); |
| | | //this.setTerrainMptLayer(); |
| | | //清空图层树选中状态 |
| | | this.$refs.tree.setCheckedKeys([]); |
| | | if (val.length > 0) { |
| | | if (val[0].type == 1 && val[0].isProject == 1) {//项目分类 |
| | | var std_check = []; |
| | | for (var i in val) { |
| | | var std_val = this.getNewTree([this.$refs.tree.getNode(val[i].id).data], []) |
| | | for (var j in std_val) { |
| | | 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]) |
| | | } |
| | | } |
| | | var value = this.$store.state.isProjectLayer; |
| | | for (var i in value) { |
| | | let value = this.$store.state.isProjectLayer; |
| | | for (let i in value) { |
| | | |
| | | std_check.push(value[i]) |
| | | } |
| | |
| | | this.removeAllLayer(); |
| | | this.$store.state.pigCode = null; |
| | | this.$refs.tree.setCheckedKeys(this.setCheeckedLayer); |
| | | var std = []; |
| | | for (var i in this.setCheeckedLayer) { |
| | | let std = []; |
| | | for (let i in this.setCheeckedLayer) { |
| | | std.push(this.$refs.tree.getNode(this.setCheeckedLayer[i]).data) |
| | | } |
| | | this.setProjectLayer(std); |
| | | } |
| | | }, |
| | | removeAllLayer () { |
| | | for (var j in Viewer.scene.primitives._primitives) { |
| | | for (let j in Viewer.scene.primitives._primitives) { |
| | | Viewer.scene.primitives.remove(Viewer.scene.primitives._primitives[j]) |
| | | } |
| | | for (var i in window.Viewer.dataSources._dataSources) { |
| | | for (let i in window.Viewer.dataSources._dataSources) { |
| | | window.Viewer.dataSources.remove( |
| | | window.Viewer.dataSources._dataSources[i] |
| | | ); |
| | | } |
| | | for (var i = 0; i < window.Viewer.imageryLayers._layers.length; i++) { |
| | | var val_id = window.Viewer.imageryLayers._layers[i].id; |
| | | 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 (var i in this.mptLayer) { |
| | | for (let i in this.mptLayer) { |
| | | this.mptLayer[i].deleteObject(); |
| | | this.mptLayer.splice(i, 1) |
| | | } |
| | | this.mptLayer = []; |
| | | }, |
| | | setProjectLayer (res) { |
| | | var layerid = []; |
| | | for (var i in res) { |
| | | layerid.push(res[i].id) |
| | | let layerid = []; |
| | | for (let j in res) { |
| | | layerid.push(res[j].id) |
| | | } |
| | | this.$refs.tree.setCheckedKeys(layerid); |
| | | // var value = this.$refs.tree.getCheckedNodes(); |
| | | // let value = this.$refs.tree.getCheckedNodes(); |
| | | // this.$bus.$emit("showMenuLayer", value); |
| | | var listWMS = []; |
| | | var listWFS = []; |
| | | var listTileset = []; |
| | | var listTMS = []; |
| | | var listMpt = []; |
| | | for (var i in res) { |
| | | 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': |
| | |
| | | } |
| | | return result |
| | | }, |
| | | cannelTerrainLayer () { |
| | | //清空地形 |
| | | if (window.terrainMptLayer) { |
| | | window.terrainMptLayer.deleteObject(); |
| | | window.terrainMptLayer = null; |
| | | } |
| | | if (window.terrainDemLayer) { |
| | | Viewer.terrainProvider = new Cesium.EllipsoidTerrainProvider(); |
| | | window.terrainDemLayer = null; |
| | | } |
| | | }, |
| | | setTerrainMptLayer () { |
| | | // //默认地形MPT |
| | | // var option = { |
| | | // url: window.sceneConfig.SGUrl, |
| | | // layerName: window.sceneConfig.mptName, |
| | | // requestVertexNormals: true, |
| | | // }; |
| | | // window.terrainMptLayer = sgworld.Creator.sfsterrainprovider("", option, "", true, ""); |
| | | window.terrainDemLayer = new Cesium.CesiumTerrainProvider({ |
| | | // url: LFData + '/3d/terrain/dem20230321' |
| | | url: demLayer |
| | | }); |
| | | Viewer.terrainProvider = window.terrainDemLayer |
| | | }, |
| | | setChangeProLayer () { |
| | | var value = this.$store.state.isProjectLayer; |
| | | let value = this.$store.state.isProjectLayer; |
| | | if (value.length != 0) { |
| | | |
| | | var std = []; |
| | | for (var i in value) { |
| | | let std = []; |
| | | for (let i in value) { |
| | | std.push(value[i].id) |
| | | } |
| | | this.$refs.tree.setCheckedKeys(std); |
| | | this.$bus.$emit("showMenuLayer", value); |
| | | } |
| | | }, |
| | | // 添加WFS图层 * |
| | | addWFSLayers (res) { |
| | | let url = |
| | | res.resource + |
| | | "?service=WFS&version=1.0.0&request=GetFeature&typeName=" + |
| | | res.url + |
| | | "&outputFormat=application%2Fjson"; |
| | | $.ajax({ |
| | | url: url, |
| | | cache: false, |
| | | async: true, |
| | | success: function (data) { |
| | | let datasource = Cesium.GeoJsonDataSource.load(data, { |
| | | stroke: Cesium.Color.YELLOW, |
| | | fill: Cesium.Color.YELLOW.withAlpha(0.1), |
| | | alpha: 0.1, |
| | | strokeWidth: 8, |
| | | clampToGround: true, //是否贴地 |
| | | }); |
| | | datasource.then((data) => { |
| | | data.name = res.cnName; |
| | | window.Viewer.dataSources.add(data); |
| | | }); |
| | | }, |
| | | error: function (data) { |
| | | console.log("error"); |
| | | }, |
| | | }); |
| | | let vectorLayer = new VectorLayer({ |
| | | name: res.cnName, |
| | | source: new VectorSource({ |
| | | url: url, |
| | | format: new GeoJSON(), |
| | | }), |
| | | }); |
| | | window.map.addLayer(vectorLayer); |
| | | } |
| | | }, |
| | | }; |
| | | </script> |