import mapConfig from './mapConfig'; import { zhangzitou_selectAll } from '@/api/mapView/map.js'; import WKT from 'terraformer-wkt-parser'; // 服务加载 const mapServer = { serveType: null, layerList: [], addLayer(res) { const obj = this.getLayerChecked(res); if (obj) return; this.serveType = res.serveType; switch (this.serveType) { case 'tdMap': this.addTdLayer(res); break; case 'WMS': this.addWMSLayer(res); break; case 'Tileset': this.addTilesetLayer(res); break; case 'WFS': this.addWFSLayer(res); break; } }, addWFSLayer(res) { zhangzitou_selectAll({ limit: 1000000, page: 1, }).then((response) => { if (response.data.code != 200) return; const pois = response.data.result.pois; const cnName = res.cnName + '_' + res.id; const modelLayer = new Cesium.PrimitiveCollection(); modelLayer.name = cnName; Viewer.scene.primitives.add(modelLayer); pois.map((item) => { var geom = WKT.parse(item.geom); var style = { longitude: geom.coordinates[0], latitude: geom.coordinates[1], altitude: 0, heading: 0, pitch: 0, roll: 0, }; const modelMatrix = mapConfig.getModelMatrix(style); const url = '/glb/' + item.type + '.glb'; modelLayer.add( Cesium.Model.fromGltf({ id: item.id, url: url, scale: 1, minimumPixelSize: 20, maximumScale: 20, modelMatrix: modelMatrix, primitive: item, }) ); }); this.layerList.push({ id: res.id, name: cnName, layer: modelLayer, serveType: this.serveType, }); }); }, addTdLayer(res) { const url = res.url + config.tdToken; Viewer.imageryLayers.addImageryProvider( new Cesium.UrlTemplateImageryProvider({ url: url, }) ); }, getLayerChecked(res) { const obj = this.layerList.filter((item) => { if (item.id == res.id) { return item; } }); const boolen = obj.length > 0 ? true : false; return boolen; }, addWMSLayer(res) { const serverUrl = config.geoServer; const that = this; var getFeatureInfoFormat = new Cesium.GetFeatureInfoFormat('html', null, function (html) { that.getFeatureInfo(html); }); const layer = new Cesium.WebMapServiceImageryProvider({ url: serverUrl.url + serverUrl.wms, layers: res.url, getFeatureInfoParameters: { info_format: 'text/html' }, enablePickFeatures: true, getFeatureInfoFormats: [getFeatureInfoFormat], parameters: { transparent: true, format: 'image/png', srs: 'EPSG:4490', styles: '', cql_filter: '', }, tileWidth: 512, tileHeight: 512, }); const imageLayer = Viewer.imageryLayers.addImageryProvider(layer); const cnName = res.cnName + '_' + res.id; imageLayer.name = cnName; imageLayer.id = res.id; this.layerList.push({ id: res.id, name: cnName, layer: imageLayer, serveType: this.serveType, }); }, addTilesetLayer(res) { let url = res.url.indexOf('{host}') > -1 ? res.url.replace('{host}', iisHost) : res.url; var height = 0; if (res.bak) { height = JSON.parse(res.bak).height; } var model = earthCtrl.factory.create3DTilesets({ url: url, option: { height: height, id: res.id, }, }); const cnName = res.cnName + '_' + res.id; model.item.readyPromise.then((item) => { mapConfig.userSceneFlyTo(item); this.layerList.push({ id: res.id, name: cnName, layer: model, serveType: this.serveType, }); }); }, 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); 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) this.layerList.splice(index, 1); } } }); }, async getFeatureInfo(res) { console.log(res); }, }; export default mapServer;