import { getToken } from "@/utils/auth";
|
//配置文件地址
|
// import config from "../../../../public/config/config";
|
|
const rightServer = {
|
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);
|
var urlTemplateImageryProvider = new Cesium.UrlTemplateImageryProvider({
|
url: url + '/{z}/{x}/{reverseY}.png',
|
});
|
let img_layer = window.rightViewer.imageryLayers.addImageryProvider(urlTemplateImageryProvider);
|
this.layerList.push({ id: res.id, layerData: img_layer, type: "tms" });
|
},
|
//加载WMTS服务
|
setAddWmtsLayer(res) {
|
var url = this.getLayrUrl(res);
|
var urlTemplateImageryProvider = new Cesium.WebMapTileServiceImageryProvider({
|
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,
|
}),
|
});
|
let img_layer = window.rightViewer.imageryLayers.addImageryProvider(urlTemplateImageryProvider);
|
this.layerList.push({
|
id: res.id,
|
layerData: img_layer,
|
type: "wmts",
|
});
|
},
|
//加载地形服务
|
setAddTearrinLayer(res) {
|
this.setChangeTearrinLayer();
|
var url = this.getLayrUrl(res);
|
window.terrainLayer = new Cesium.CesiumTerrainProvider({
|
url: url,
|
});
|
window.rightViewer.terrainProvider = window.terrainLayer;
|
this.layerList.push({ id: res.id, type: "dem" });
|
},
|
//加载WMS服务
|
setAddWmsLayer(res) {
|
var url = this.getLayrUrl(res);
|
var img_layer = window.rightViewer.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 = window.rightViewer.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.rightViewer.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.rightViewer.imageryLayers.remove(e.layerData);
|
break;
|
case "tms":
|
window.rightViewer.imageryLayers.remove(e.layerData);
|
break;
|
case "dem":
|
window.rightViewer.terrainProvider = new Cesium.EllipsoidTerrainProvider(
|
{}
|
);
|
break;
|
case "tileset":
|
window.rightViewer.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.rightViewer.imageryLayers.addImageryProvider(layer);
|
this.layerList.push({ id: res.id, layerData: img_layer, type: "wmts" });
|
},
|
addGeoServerMmsLayers(layer, url) {
|
var that = this
|
var getFeatureInfoFormat = new SmartEarth.Cesium.GetFeatureInfoFormat("html", null, function (html) {
|
that.getFeatureInfo(html)
|
});
|
let wmslayer = new SmartEarth.Cesium.WebMapServiceImageryProvider({
|
url: url,
|
layers: layer.toString(),
|
getFeatureInfoParameters: { info_format: 'text/html' },
|
enablePickFeatures: true,
|
getFeatureInfoFormats: [getFeatureInfoFormat],
|
parameters: {
|
transparent: true,
|
format: "image/png",
|
srs: "EPSG:104903",
|
styles: "",
|
},
|
tileWidth: 512,
|
tileHeight: 512,
|
});
|
wmslayer.name = `Wms_Layer_geo`;
|
let img_layer = window.rightViewer.imageryLayers.addImageryProvider(wmslayer);
|
this.layerList.push({ id: 1001011, layerData: img_layer, type: "wmts" });
|
},
|
|
delLayerAll() {
|
this.layerList.forEach((e, i) => {
|
switch (e.type) {
|
case "wmts":
|
window.rightViewer.imageryLayers.remove(e.layerData);
|
break;
|
case "tms":
|
window.rightViewer.imageryLayers.remove(e.layerData);
|
break;
|
case "dem":
|
window.rightViewer.terrainProvider = new Cesium.EllipsoidTerrainProvider(
|
{}
|
);
|
break;
|
case "tileset":
|
window.rightViewer.scene.primitives.remove(e.layerData)
|
break;
|
}
|
this.layerList.splice(i, 1);
|
});
|
|
},
|
|
};
|
export default rightServer;
|