| | |
| | | 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; |
| | |
| | | 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); |
| | | } |
| | |
| | | }); |
| | | }); |
| | | }, |
| | | 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 = { |
| | |
| | | const url = '/glb/' + item.type + '.glb'; |
| | | modelLayer.add( |
| | | Cesium.Model.fromGltf({ |
| | | id: item.id, |
| | | id: item, |
| | | url: url, |
| | | scale: 1, |
| | | minimumPixelSize: 20, |
| | |
| | | |
| | | addTdLayer(res) { |
| | | const url = res.url + config.tdToken; |
| | | Viewer.imageryLayers.addImageryProvider( |
| | | window.Viewer.imageryLayers.addImageryProvider( |
| | | new Cesium.UrlTemplateImageryProvider({ |
| | | url: url, |
| | | }) |
| | |
| | | }, |
| | | addWMSLayer(res) { |
| | | const serverUrl = config.geoServer; |
| | | const that = this; |
| | | const that = this; |
| | | var getFeatureInfoFormat = new Cesium.GetFeatureInfoFormat('html', null, function (html) { |
| | | that.getFeatureInfo(html); |
| | | }); |
| | |
| | | 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; |
| | |
| | | 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, |
| | |
| | | }); |
| | | 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, |
| | |
| | | }); |
| | | }); |
| | | }, |
| | | 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; |