From 703703929e97b94ca1c1c5e35a578e5fe9d4cfea Mon Sep 17 00:00:00 2001 From: suerprisePlus <15810472099@163.com> Date: 星期一, 30 九月 2024 09:58:04 +0800 Subject: [PATCH] 代码修改 --- src/assets/js/mapSdk/mapServe.js | 105 +++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 82 insertions(+), 23 deletions(-) diff --git a/src/assets/js/mapSdk/mapServe.js b/src/assets/js/mapSdk/mapServe.js index 89bd349..8a2dc92 100644 --- a/src/assets/js/mapSdk/mapServe.js +++ b/src/assets/js/mapSdk/mapServe.js @@ -1,11 +1,14 @@ -import mapConfig from './mapConfig'; +import mapConfig from './mapConfig.js'; import { zhangzitou_selectAll } from '@/api/mapView/map.js'; import WKT from 'terraformer-wkt-parser'; +import store from '@/store'; + // 鏈嶅姟鍔犺浇 const mapServer = { serveType: null, layerList: [], addLayer(res) { + const obj = this.getLayerChecked(res); if (obj) return; this.serveType = res.serveType; @@ -34,12 +37,12 @@ const cnName = res.cnName + '_' + res.id; const modelLayer = new Cesium.PrimitiveCollection(); modelLayer.name = cnName; - Viewer.scene.primitives.add(modelLayer); + window.Viewer.scene.primitives.add(modelLayer); pois.map((item) => { var geom = WKT.parse(item.geom).coordinates; const terrain = config.terrain; if (terrain.isShow && terrain.isUrl) { - this.addTerrainGLB(geom); + this.addTerrainGLB(item, geom, modelLayer); } else { this.addGLB(item, geom, modelLayer); } @@ -52,16 +55,33 @@ }); }); }, - addTerrainGLB(geom) { + addTerrainGLB(item, geom, modelLayer) { var positions = [Cesium.Cartographic.fromDegrees(geom[0], geom[1])]; - var promise = Cesium.sampleTerrainMostDetailed(Viewer.terrainProvider, positions); - promise.then(updatedPositions => { - console.log(updatedPositions); - }) - // SmartEarth.Cesium.when(promise, (updatedPositions) => { - // var terrainHeight = updatedPositions[0].height; - // console.log(terrainHeight); - // }); + var promise = Cesium.sampleTerrainMostDetailed(window.Viewer.terrainProvider, positions); + promise.then((updatedPositions) => { + var terrainHeight = updatedPositions[0].height; + var style = { + longitude: geom[0], + latitude: geom[1], + altitude: terrainHeight, + heading: 0, + pitch: 0, + roll: 0, + }; + const modelMatrix = mapConfig.getModelMatrix(style); + const url = '/glb/' + item.type + '.glb'; + modelLayer.add( + Cesium.Model.fromGltf({ + id: item, + url: url, + scale: 1, + minimumPixelSize: 20, + maximumScale: 20, + modelMatrix: modelMatrix, + primitive: item, + }) + ); + }); }, addGLB(item, geom, modelLayer) { var style = { @@ -76,7 +96,7 @@ const url = '/glb/' + item.type + '.glb'; modelLayer.add( Cesium.Model.fromGltf({ - id: item.id, + id: item, url: url, scale: 1, minimumPixelSize: 20, @@ -89,7 +109,7 @@ addTdLayer(res) { const url = res.url + config.tdToken; - Viewer.imageryLayers.addImageryProvider( + window.Viewer.imageryLayers.addImageryProvider( new Cesium.UrlTemplateImageryProvider({ url: url, }) @@ -106,7 +126,7 @@ }, addWMSLayer(res) { const serverUrl = config.geoServer; - const that = this; + const that = this; var getFeatureInfoFormat = new Cesium.GetFeatureInfoFormat('html', null, function (html) { that.getFeatureInfo(html); }); @@ -128,7 +148,7 @@ tileHeight: 512, }); - const imageLayer = Viewer.imageryLayers.addImageryProvider(layer); + const imageLayer = window.Viewer.imageryLayers.addImageryProvider(layer); const cnName = res.cnName + '_' + res.id; imageLayer.name = cnName; imageLayer.id = res.id; @@ -145,7 +165,7 @@ if (res.bak) { height = JSON.parse(res.bak).height; } - var model = earthCtrl.factory.create3DTilesets({ + var model = window.earthCtrl.factory.create3DTilesets({ url: url, option: { height: height, @@ -154,7 +174,9 @@ }); const cnName = res.cnName + '_' + res.id; model.item.readyPromise.then((item) => { - mapConfig.userSceneFlyTo(item); + if (res.id != 'baseModel') { + mapConfig.userSceneFlyTo(item); + } this.layerList.push({ id: res.id, name: cnName, @@ -163,26 +185,63 @@ }); }); }, - setTilesetArgs() {}, removeLayer(res) { const cnName = res.cnName + '_' + res.id; this.layerList.map((item, index) => { if (cnName == item.name && res.id == item.id) { if (item.serveType == 'WMS') { - Viewer.imageryLayers.remove(item.layer); + window.Viewer.imageryLayers.remove(item.layer); this.layerList.splice(index, 1); } else if (item.serveType == 'Tileset') { item.layer.deleteObject(); this.layerList.splice(index, 1); } else if (item.serveType == 'WFS') { - Viewer.scene.primitives.remove(item.layer); + window.Viewer.scene.primitives.remove(item.layer); this.layerList.splice(index, 1); } } }); }, - async getFeatureInfo(res) { - console.log(res); + async 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 str = html + .substr(html.indexOf('<td>'), html.lastIndexOf('</td>') - html.indexOf('<td>') + 5) + .replaceAll(' ', '') + .replaceAll('\n', '') + .split('</td>'); + var arr = []; + for (var i in std) { + var name, val; + name = std[i]; + val = str[i]; + if (name == '') { + continue; + } + if (name.indexOf('<th>') > -1) { + name = name.replaceAll('<th>', ''); + } + if (val.indexOf('<td>') > -1) { + val = val.replaceAll('<td>', ''); + } + if (name != '>') { + arr.push({ + name: name, + val: val, + }); + } + } + store.dispatch('mapLayers/changeMapInfo', []); + if (arr.length > 0) { + // this.$store.geet.mapInfo = arr; + store.dispatch('mapLayers/changeMapInfo', arr); + } }, }; export default mapServer; -- Gitblit v1.9.3