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).coordinates;
|
const terrain = config.terrain;
|
if (terrain.isShow && terrain.isUrl) {
|
this.addTerrainGLB(geom);
|
} else {
|
this.addGLB(item, geom, modelLayer);
|
}
|
});
|
this.layerList.push({
|
id: res.id,
|
name: cnName,
|
layer: modelLayer,
|
serveType: this.serveType,
|
});
|
});
|
},
|
addTerrainGLB(geom) {
|
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);
|
// });
|
},
|
addGLB(item, geom, modelLayer) {
|
var style = {
|
longitude: geom[0],
|
latitude: geom[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,
|
})
|
);
|
},
|
|
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;
|