import { getToken } from "@/utils/auth";
|
//配置文件地址
|
import config from "./config";
|
|
const server = {
|
layerList: [],
|
addTreeData(treeNode) {
|
if (!treeNode.checked) {
|
this.delLayer(treeNode.id);
|
return;
|
}
|
//判断是否为代理
|
if (treeNode.proxy) {
|
this.addProxyAddress(treeNode);//有代理
|
} else {
|
this.addUrlAddress(treeNode);//无代理
|
}
|
},
|
//代理地址
|
addProxyAddress(res) {
|
//判断数据类型
|
switch (res.data) {
|
case 1://数字正射影像图
|
this.setDataType(res);
|
break;
|
case 2://场景地形数据
|
this.setTerrainData(res);
|
break;
|
case 3://数字高程模型(晕渲图)
|
this.setDataType(res);
|
break;
|
case 4://单波段栅格数据
|
this.setDataType(res);
|
break;
|
case 5://多光谱栅格数据
|
this.setDataType(res);
|
break;
|
case 6://高光谱栅格数据
|
this.setDataType(res);
|
break;
|
case 7://矢量图层
|
this.setVectorData(res);
|
break;
|
case 8://三维模型
|
this.setModelData(res);
|
break;
|
}
|
},
|
//普通地址
|
addUrlAddress(res) {
|
switch (res.category) {
|
case 0://其他
|
|
break;
|
case 1://GisServer
|
this.addProxyAddress(res);
|
break;
|
case 2://GeoServer
|
this.addGeoServerAddress(res);
|
break;
|
case 3://数简
|
this.addProxyAddress(res);
|
break;
|
}
|
|
},
|
//Geoserver服务
|
addGeoServerAddress(res) {
|
//判断数据类型
|
switch (res.data) {
|
case 1://数字正射影像图
|
this.setGeoDataType(res);
|
break;
|
case 2://场景地形数据
|
this.setTerrainData(res);
|
break;
|
case 3://数字高程模型(晕渲图)
|
this.setGeoDataType(res);
|
break;
|
case 4://单波段栅格数据
|
this.setGeoDataType(res);
|
break;
|
case 5://多光谱栅格数据
|
this.setGeoDataType(res);
|
break;
|
case 6://高光谱栅格数据
|
this.setGeoDataType(res);
|
break;
|
case 7://矢量图层
|
this.setGeoVectorData(res);
|
break;
|
case 8://三维模型
|
this.setModelData(res);
|
break;
|
}
|
},
|
setGeoDataType(res) {
|
switch (res.type) {
|
case 0://URL
|
break;
|
case 1://TMS
|
this.setAddTmsLayer(res);
|
break;
|
case 2://WMTS
|
this.setAddWmtsLayer(res);
|
break;
|
case 3://WMS
|
this.setAddGeoWmsLayer(res);
|
break;
|
}
|
},
|
setGeoVectorData(res) {
|
switch (res.type) {
|
case 0://URL
|
break;
|
case 3://WMS
|
this.setAddGeoWmsLayer(res);
|
break;
|
case 4://WFS
|
|
break;
|
}
|
},
|
|
|
|
|
|
setDataType(res) {
|
switch (res.type) {
|
case 0://URL
|
break;
|
case 1://TMS
|
this.setAddTmsLayer(res);
|
break;
|
case 2://WMTS
|
this.setAddWmtsLayer(res);
|
break;
|
case 3://WMS
|
this.setAddWmsLayer(res);
|
break;
|
}
|
},
|
|
setTerrainData(res) {
|
switch (res.type) {
|
case 0://URL
|
this.setAddTearrinLayer(res)
|
break;
|
case 1://TMS
|
this.setAddTearrinLayer(res);
|
break;
|
}
|
},
|
setVectorData(res) {
|
switch (res.type) {
|
case 0://URL
|
|
break;
|
case 3://WMS
|
this.setAddWmsLayer(res);
|
break;
|
case 4://WFS
|
|
break;
|
}
|
},
|
setModelData(res) {
|
switch (res.type) {
|
case 0://Tileset
|
this.setAddModelLayer(res);
|
break;
|
case 3://WMS
|
this.setAddModelLayer(res);
|
break;
|
case 5://WFS
|
|
break;
|
}
|
},
|
//获取服务地址
|
getLayrUrl(res) {
|
var url;
|
if (res.proxy) {
|
const token = getToken()
|
url = config.proxy + res.proxy.replaceAll("{token}", token)
|
} else {
|
url = res.url;
|
}
|
return url
|
},
|
//加载TMS服务
|
setAddTmsLayer(res) {
|
var url = this.getLayrUrl(res)
|
let img_layer = earthCtrl.Creator.createUrlTemplateImageryProvider(
|
"tms服务",
|
{
|
url: Cesium.buildModuleUrl(url + "/{z}/{x}/{y}.png"),
|
},
|
"0",
|
undefined,
|
true,
|
""
|
);
|
this.layerList.push({ id: res.id, layerData: img_layer, type: "tms" });
|
},
|
//加载WMTS服务
|
setAddWmtsLayer(res) {
|
var url = this.getLayrUrl(res)
|
var urlTemplateImageryProvider = earthCtrl.factory.createImageryLayer({
|
sourceType: "wmts",
|
url: url,
|
layer: "",
|
format: "image/png",
|
tileMatrixSetID: "GoogleCRS84Quad01",
|
tileMatrixLabels: [
|
"0",
|
"1",
|
"2",
|
"3",
|
"4",
|
"5",
|
"6",
|
"7",
|
"8",
|
"9",
|
"10",
|
"11",
|
"12",
|
"13",
|
"14",
|
"15",
|
"16",
|
"17",
|
"18",
|
],
|
style: "",
|
tilingScheme: new Cesium.GeographicTilingScheme({
|
ellipsoid: Cesium.Ellipsoid.MOON,
|
}),
|
});
|
this.layerList.push({
|
id: res.id,
|
layerData: urlTemplateImageryProvider._primitive,
|
type: "wmts",
|
});
|
},
|
//加载地形服务
|
setAddTearrinLayer(res) {
|
this.setChangeTearrinLayer();
|
var url = this.getLayrUrl(res)
|
window.terrainLayer = new Cesium.CesiumTerrainProvider({
|
url: url
|
});
|
Viewer.terrainProvider = window.terrainLayer
|
this.layerList.push({ id: res.id, type: "dem", });
|
},
|
//加载WMS服务
|
setAddWmsLayer(res) {
|
var url = this.getLayrUrl(res)
|
var img_layer = sgworld.Creator.createImageryProvider('giserver', "wms", {
|
url: url,
|
layers: '',
|
parameters: {
|
format: "image/png",
|
transparent: true,
|
}
|
}, "0", undefined, true, "");
|
this.layerList.push({
|
id: res.id,
|
layerData: img_layer,
|
type: "wmts",
|
});
|
|
},
|
//加载模型服务
|
setAddModelLayer(res) {
|
var url = this.getLayrUrl(res);
|
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: 768, // 内存分配变小有利于内存回收,提升性能体验
|
progressiveResolutionHeightFraction: 0.5, // 数值偏于0能够让初始加载变得模糊
|
dynamicScreenSpaceErrorDensity: 0.5, // 数值加大,能让周边加载变快
|
dynamicScreenSpaceErrorFactor: 2, // 动态屏幕空间误差的系数
|
dynamicScreenSpaceError: true, // 减少离相机较远的屏幕空间错误:false,全屏加载完之后才清晰化房屋
|
})
|
|
);
|
tileset.readyPromise.then((tileset) => {
|
tileset.id = res.id;
|
});
|
this.layerList.push({ id: res.id, layerData: tileset, type: "tileset" });
|
},
|
//地形移除事件
|
setChangeTearrinLayer() {
|
this.layerList.forEach((e, i) => {
|
switch (e.type) {
|
case "dem":
|
window.Viewer.terrainProvider = new Cesium.EllipsoidTerrainProvider(
|
{}
|
);
|
this.layerList.splice(i, 1);
|
break;
|
}
|
})
|
},
|
|
//清除图层
|
delLayer(code) {
|
this.layerList.forEach((e, i) => {
|
if (e.id === code) {
|
switch (e.type) {
|
case "wmts":
|
window.Viewer.imageryLayers.remove(e.layerData);
|
break;
|
case "tms":
|
window.Viewer.imageryLayers.remove(e.layerData);
|
break;
|
case "dem":
|
window.Viewer.terrainProvider = new Cesium.EllipsoidTerrainProvider(
|
{}
|
);
|
break;
|
case "tileset":
|
window.Viewer.scene.primitives.remove(e.layerData)
|
break;
|
}
|
this.layerList.splice(i, 1);
|
}
|
});
|
},
|
//加载GeoServer-WMS服务
|
setAddGeoWmsLayer(res) {
|
var url = this.getLayrUrl(res);
|
let layer = new SmartEarth.Cesium.WebMapServiceImageryProvider({
|
url: url,
|
layers: res.tab,
|
parameters: {
|
transparent: true,
|
format: "image/png",
|
srs: "EPSG:104903",
|
styles: "",
|
},
|
tileWidth: 512,
|
tileHeight: 512,
|
});
|
layer.name = `Wms_Layer${res.id}`;
|
let img_layer = window.Viewer.imageryLayers.addImageryProvider(layer);
|
this.layerList.push({ id: res.id, layerData: img_layer, type: "wmts" });
|
},
|
};
|
export default server;
|