<template>
|
<div
|
@click="showLeftMenu"
|
:class="{ leftmenu: !isShowLeftPanel, leftmenu_active: isShowLeftPanel }"
|
class="leftmenustyle"
|
>
|
<span
|
class="closeLeftMenu"
|
v-if="isShowLeftPanel"
|
@click.stop="hideLeftMenu"
|
>×</span
|
>
|
<img class="openLeftMenu" v-else src="@/assets/img/left/souselist4.png" />
|
|
<div class="layerTreeContainer" v-show="isShowLeftPanel">
|
<div class="switchbox">
|
<el-radio-group v-model="radio" @change="getright">
|
<el-radio :label="1">组织机构</el-radio>
|
<el-radio :label="2">业务要素</el-radio>
|
</el-radio-group>
|
<!-- <div @click="setTreeDataChange(1)">业务</div>
|
<div @click="setTreeDataChange(2)">业务</div> -->
|
</div>
|
<hr />
|
<!-- <div style="padding: 5px">
|
<el-button size="small" @click="setTreeDataChange(1)">图层1</el-button>
|
<el-button size="small" @click="setTreeDataChange(2)">图层2</el-button>
|
</div> -->
|
<div class="layerTree">
|
<el-tree
|
:data="treeData"
|
node-key="id"
|
ref="tree"
|
:default-checked-keys="arr"
|
style="min-width: 160px"
|
show-checkbox
|
:render-content="renderContent"
|
:default-expanded-keys="defaultExpanded"
|
@check="check"
|
></el-tree>
|
</div>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import Bj2000TilingScheme from "@/assets/js/Bj2000TilingScheme.js";
|
import UrlTemplateImageryProviderBJ2000 from "@/assets/js/UrlTemplateImageryProviderBJ2000.js";
|
let bj2000SATE;
|
let bj2000Shiliang;
|
let lishiyingxiang;
|
|
import axios from "axios";
|
import common from "@/components/common";
|
import Bus from "../tools/Bus";
|
import { getmenu } from "../../api/api";
|
import keys from "@/assets/poiKeys1";
|
import store from "@/utils/store";
|
|
let colorTool;
|
let projectTreeData = [];
|
let clusterItemList = [];
|
|
//添加工程树数据
|
function addTreeData(data, layer) {
|
var d = {};
|
for (var key in data) {
|
d[key] = data[key];
|
}
|
d.item = layer;
|
projectTreeData.push(d);
|
}
|
|
//通过id获取指定元素
|
function _getTreeData(id) {
|
for (var i = 0; i < projectTreeData.length; i++) {
|
if (
|
projectTreeData[i].id === id ||
|
(projectTreeData[i].datatype === "entity" &&
|
projectTreeData[i].item &&
|
projectTreeData[i].item.entity &&
|
projectTreeData[i].item.entity.id === id) ||
|
(projectTreeData[i].datatype === "editEntity" &&
|
projectTreeData[i].item &&
|
projectTreeData[i].item[projectTreeData[i].type] &&
|
projectTreeData[i].item[projectTreeData[i].type].id === id)
|
) {
|
return projectTreeData[i];
|
}
|
}
|
}
|
|
//转换sg颜色
|
function getSGColor(color) {
|
let _color = parseInt(color).toString(16);
|
if (_color.length === 2) {
|
_color = "0000" + _color;
|
} else if (_color.length === 4) {
|
_color = "00" + _color;
|
}
|
_color = "#" + _color.slice(4) + _color.slice(2, 4) + _color.slice(0, 2);
|
return _color;
|
}
|
|
//解析XML
|
function getXMLData(xml, isColor) {
|
let xml2json = $.xml2json($.parseXML(xml));
|
let data = {
|
value: undefined,
|
defaultValue: isColor
|
? getSGColor(xml2json.DefaultValue)
|
: xml2json.DefaultValue,
|
};
|
|
if (xml2json && !xml2json.Class.length) {
|
data.value = xml2json.Class.Value;
|
} else if (xml2json && xml2json.Class.length) {
|
let Value = {
|
Condition: undefined,
|
Value: {},
|
};
|
xml2json.Class.forEach((item) => {
|
let condition = item.Condition.replace(/\"/g, "");
|
let eli = condition.replace("<", "").replace(">", "").split("=");
|
if (!Value.Condition) {
|
eli[0] = eli[0].replace("[", "").replace("]", "");
|
Value.Condition = eli[0];
|
}
|
Value.Value[eli[1]] = isColor ? getSGColor(item.Value) : item.Value;
|
});
|
data.value = Value;
|
}
|
return data;
|
}
|
|
//获取sg样式配置
|
async function getSGStyle(type, json, name) {
|
let de;
|
!colorTool && (colorTool = sgworld.Core.gradientColor());
|
|
await axios
|
.get(json)
|
.then(
|
(response) => {
|
let _data = response.data;
|
if (_data && typeof _data === "string") {
|
_data = JSON.parse(_data);
|
}
|
let style = _data.filter((item) => {
|
return item.LayerName === name;
|
});
|
if (type === "point") {
|
let data = style[0];
|
style = data.Point;
|
style.Line_Color = getSGColor(style.Line_Color);
|
style.Image_Color = getSGColor(style.Image_Color);
|
style.Text_Color = getSGColor(style.Text_Color);
|
style.Background_Color = getSGColor(style.Background_Color);
|
|
let color = colorTool.colorRgb(
|
defaultValue(style.Text_Color, "#ffffff")
|
);
|
let bgColor = colorTool.colorRgb(
|
defaultValue(style.Background_Color, "#010101")
|
);
|
de = {
|
label: {
|
text: {
|
defaultValue: defaultValue(
|
style.Text.match(/<Value>(\S*)<\/Value>/)[1],
|
style.Text.match(/<DefaultValue>(\S*)<\/DefaultValue>/)[1]
|
),
|
},
|
scaleMPP: { defaultValue: style.Scale },
|
fillColor: {
|
defaultValue: {
|
red: color[0] / 255,
|
green: color[1] / 255,
|
blue: color[2] / 255,
|
alpha: 1,
|
},
|
},
|
scaleByDistance: {
|
near: 0,
|
nearValue: 1,
|
far: 800000000,
|
farValue: 1,
|
},
|
minViewingHeight: { defaultValue: "0" },
|
font: { defaultValue: style.Text_Size },
|
family: { defaultValue: defaultValue(style.Font, "Arial") },
|
backgroundColor: {
|
defaultValue: {
|
red: bgColor[0] / 255,
|
green: bgColor[1] / 255,
|
blue: bgColor[2] / 255,
|
alpha: 1,
|
},
|
},
|
scale: defaultValue(style.TextScale, 1.5),
|
backgroundOpacity: { defaultValue: style.Background_Opacity },
|
italic: { defaultValue: style.Italic },
|
bold: { defaultValue: style.Bold },
|
limitGrowth: { defaultValue: "1" },
|
textRelativeToImage: { defaultValue: "0" },
|
showText: { defaultValue: "0" },
|
textAlignment: { defaultValue: "17" },
|
pixelOffset: new Cesium.Cartesian2(
|
defaultValue(style.offsetX, 0),
|
defaultValue(style.offsetY, style.Image_file ? -10 : 0)
|
),
|
outlineColor: Cesium.Color.fromCssColorString(
|
defaultValue(style.Line_Color, "#ffffff")
|
),
|
outlineWidth: defaultValue(style.outlineWidth, 2),
|
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
|
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
|
},
|
lineToGround: { defaultValue: style.Line_to_Ground },
|
lineToGroundLength: { defaultValue: style.Line_Length },
|
lineToGroundColor: {
|
defaultValue: { red: 1, green: 1, blue: 1, alpha: 1 },
|
},
|
altitudeMethod: 0,
|
altitudeOffset: { defaultValue: "0" },
|
clampToGround: defaultValue(style.clampToGround, true),
|
pointHeight: defaultValue(style.pointHeight, undefined),
|
minimumLevel: defaultValue(style.level_min, 0),
|
maximumLevel: defaultValue(style.level_max, 22),
|
position_x: data.position_x,
|
position_y: data.position_y,
|
position_z: data.position_z == 0 ? 10000 : data.position_z,
|
urls: data.Server,
|
layer: data.ServerName,
|
};
|
if (style.Line_Color) {
|
de.label && (de.label.style = Cesium.LabelStyle.FILL_AND_OUTLINE);
|
}
|
if (style.Image_file) {
|
de.billboard = {
|
image: style.Image_file,
|
scale: defaultValue(style.ImageScale, 1),
|
scaleMPP: { defaultValue: style.Scale },
|
scaleByDistance: {
|
near: 0,
|
nearValue: 1,
|
far: 800000000,
|
farValue: 1,
|
},
|
minViewingHeight: { defaultValue: "0" },
|
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
|
};
|
}
|
} else if (type === "polyline") {
|
let data = style[0];
|
style = data.Line;
|
style.Line_Color = getSGColor(style.Line_Color);
|
if (style.Line_Width) {
|
if (style.Line_Width.length === 2) {
|
style.Line_Width /= 10;
|
} else if (style.Line_Width.length === 3) {
|
style.Line_Width /= 100;
|
}
|
}
|
let color = colorTool.colorRgb(
|
defaultValue(style.Line_Color, "#ff0000")
|
);
|
de = {
|
polyline: {
|
material: {
|
red: color[0] / 255,
|
green: color[1] / 255,
|
blue: color[2] / 255,
|
alpha: 1,
|
},
|
lineOpacity: parseInt(defaultValue(style.Line_Opacity, 1)),
|
width: parseInt(defaultValue(style.Line_Width, 4)),
|
near: style.Near,
|
far: style.Far,
|
clampToGround: defaultValue(style.clampToGround, true),
|
},
|
minimumLevel: defaultValue(style.level_min, 0),
|
maximumLevel: defaultValue(style.level_max, 22),
|
position_x: data.position_x,
|
position_y: data.position_y,
|
position_z: data.position_z == 0 ? 10000 : data.position_z,
|
urls: data.Server,
|
layer: data.ServerName,
|
};
|
} else if (type === "polygon") {
|
let data = style[0];
|
style = data.data;
|
|
style.fill = Cesium.Color.fromCssColorString(style.fill);
|
style.outlineColor = Cesium.Color.fromCssColorString(
|
style.outlineColor
|
);
|
de = {
|
polygon: {
|
outlineColor: {
|
defaultValue: style.outlineColor,
|
},
|
outlineWidth: style.outlineWidth,
|
fill: { defaultValue: style.fill.alpha },
|
extrudedHeight: style.extrudedHeight || 0,
|
height: style.height,
|
outline: style.outline,
|
material: {
|
defaultValue: style.fill,
|
},
|
clampToGround: !style.extrudedHeight ? true : false,
|
fromKml: true,
|
},
|
altitudeMethod: 2,
|
altitudeOffset: { defaultValue: "0" },
|
minimumLevel: defaultValue(style.level_min, 0),
|
maximumLevel: defaultValue(style.level_max, 22),
|
position_x: data.position_x,
|
position_y: data.position_y,
|
position_z: data.position_z == 0 ? 10000 : data.position_z,
|
urls: data.Server,
|
layer: data.ServerName,
|
};
|
}
|
},
|
(response) => {
|
console.log("获取样式配置失败!");
|
}
|
)
|
.catch(function (error) {
|
console.log(error);
|
});
|
return de;
|
}
|
|
// 根据样式文件 转为样式
|
function GetStyleByStyleJson(json) {
|
if (json instanceof Array) {
|
json = json[0];
|
}
|
let entity = { label: {}, billboard: {} };
|
//字体颜色
|
if (json.TextColor.indexOf("Classification") > -1) {
|
entity.label.fillColor = getXMLData(json.TextColor, true);
|
} else {
|
entity.label.fillColor = getSGColor(json.TextColor);
|
}
|
|
//字体大小
|
if (json.TextSize.indexOf && json.TextSize.indexOf("Classification") > -1) {
|
json.TextSize = getXMLData(json.TextSize);
|
json.TextSize.defaultValue =
|
Math.abs(parseInt(json.TextSize.defaultValue)) + "px " + json.Font;
|
for (let key in json.TextSize.value.Value) {
|
json.TextSize.value.Value[key] =
|
Math.abs(parseInt(json.TextSize.value.Value[key])) + "px " + json.Font;
|
}
|
entity.label.font = json.TextSize;
|
} else {
|
entity.label.font = json.TextSize + "px " + json.Font;
|
}
|
//字体风格
|
// if (json.Font.indexOf("Classification") > -1) {
|
// json.Font = getXMLData(json.Font);
|
// entity.label.fontFamily = json.Font;
|
// }
|
// entity.label.sacle = json.Scale;
|
|
entity.label.showBackground = !!parseInt(json.BackgroundOpacity);
|
if (entity.label.showBackground) {
|
if (json.BackgroundColor.indexOf("Classification") > -1) {
|
entity.label.backgroundColor = getXMLData(json.BackgroundColor, true);
|
} else {
|
entity.label.backgroundColor = getSGColor(json.BackgroundColor);
|
}
|
}
|
|
entity.near = json.MinVisibilityDistance;
|
entity.far = json.MaxVisibilityDistance;
|
|
if (json.Text && json.Text.indexOf("Classification") > -1) {
|
entity.label.text = getXMLData(json.Text);
|
} else {
|
entity.label.text = json.Text;
|
}
|
|
if (json.Imagefile && json.Imagefile.indexOf("Classification") > -1) {
|
entity.billboard.image = getXMLData(json.Imagefile);
|
} else {
|
entity.billboard.image = json.Imagefile;
|
}
|
|
if (entity.billboard.image && entity.label.text) {
|
entity.imageData = {
|
horizontalOrigin: Cesium.HorizontalOrigin.RIGHT,
|
};
|
entity.labelData = {
|
horizontalOrigin: Cesium.HorizontalOrigin.LEFT,
|
};
|
}
|
|
return entity;
|
}
|
|
//获取矢量切片注记点样式
|
async function getVectorStyleFromSG(treeNode, json) {
|
let de;
|
|
await axios.get(json).then((res) => {
|
let entitystyle = GetStyleByStyleJson(res.data);
|
|
de = {
|
id: treeNode.id,
|
level_min: defaultValue(treeNode.minimumLevel, 10),
|
level_max: defaultValue(treeNode.maximumLevel, 22),
|
fillColor: defaultValue(entitystyle.label.fillColor, "#ffffff"),
|
outlineColor: defaultValue(entitystyle.label.outlineColor, "#ffffff"),
|
backgroundColor: defaultValue(
|
entitystyle.label.backgroundColor,
|
"#ffffff"
|
),
|
heightReference: defaultValue(treeNode.heightReference, 1),
|
pointHeight: defaultValue(treeNode.pointHeight, undefined),
|
showBackground: defaultValue(entitystyle.label.showBackground, false),
|
outlineWidth: defaultValue(entitystyle.label.outlineWidth, 1),
|
text: entitystyle.label.text,
|
image: entitystyle.billboard.image,
|
font: entitystyle.label.font,
|
near: entitystyle.near,
|
far: entitystyle.far,
|
disableDepthTestDistance: Number.POSITIVE_INFINITY,
|
scale: entitystyle.label.scale,
|
labelData: entitystyle.labelData,
|
imageData: entitystyle.imageData,
|
};
|
});
|
return de;
|
}
|
|
function defaultValue(a, b) {
|
return a !== undefined ? a : b;
|
}
|
|
export default {
|
name: "leftmenu",
|
data() {
|
return {
|
isShowLeftPanel: false,
|
activeName: "first",
|
alldisabled: [],
|
arr: [], //用来保存资源目录中默认选中的节点id
|
SmartEarthToken: undefined,
|
treeData: [],
|
radio: 1,
|
defaultExpanded: [],
|
defaultCheck: [],
|
treeChangeFlag: 1,
|
};
|
},
|
mounted() {
|
this.$store.commit("selectedLayer", []);
|
window.ProjectTree = this.$refs.tree;
|
|
//获取token并请求加载图层数据
|
this.SmartEarthToken = common.smartearthtoken;
|
this.$nextTick(() => {
|
// getmenu().then((response) => {
|
// // // 得到默认选中的数据的id
|
// // this.parseJson(response.data); //场景配置
|
// // this.treeData = response.data;
|
// // this.setDefaultCheck(response.data);
|
// // setTimeout(() => {
|
// // this.randomSelectLayer();
|
// // let selectedLayers = this.$refs.tree.getCheckedNodes();
|
// // // .filter((item) => item.sourceType == "cluster");
|
// // this.$store.commit("selectedLayer", selectedLayers);
|
// // }, 1000);
|
// });
|
this.getLayersData("./static/layers.json");
|
// axios.get("./static/layers.json").then(
|
// (response) => {
|
// // console.log(response.data);
|
// // 得到默认选中的数据的id
|
// this.parseJson(response.data.children);
|
// //场景配置
|
// this.treeData = response.data && response.data.children;
|
// this.setDefaultCheck(response.data);
|
|
// setTimeout(() => {
|
// // let dom = document.querySelectorAll(".custom_hide");
|
// // dom.forEach((item, i) => {
|
// // // console.log(item);
|
// // item.parentNode.parentNode.style.display = "none";
|
// // });
|
// // this.randomSelectLayer();
|
// let selectedLayers = this.$refs.tree.getCheckedNodes();
|
|
// let filterSelectLayers = selectedLayers;
|
// let filist = filterSelectLayers.filter((p) => {
|
// return !p.children;
|
// });
|
// let legendlist = [];
|
// for (var i = 0; i < filist.length; i++) {
|
// var getkeyList = keys[filist[i].id];
|
// if (getkeyList && getkeyList.list && getkeyList.list.length > 0) {
|
// for (var j = 0; j < getkeyList.list.length; j++) {
|
// legendlist.push(getkeyList.list[j]);
|
// }
|
// }
|
// }
|
// store.setPoplayerListAction(legendlist);
|
// // .filter((item) => item.sourceType == "cluster");
|
// this.$store.commit("selectedLayer", selectedLayers);
|
// }, 1000);
|
// },
|
// (response) => {
|
// console.log("获取场景配置失败!");
|
// }
|
// );
|
});
|
|
// Bus.$on("checkedTileset", () => {
|
// this.$refs.tree.setChecked("shijingsanwei", true, true);
|
// });
|
Bus.$on("shenlan2D", () => {
|
this.clearSwitchLayer(["shenlan2D"]);
|
});
|
Bus.$on("heijin2D", () => {
|
this.clearSwitchLayer(["heijin2D"]);
|
});
|
Bus.$on("baise2D", () => {
|
this.clearSwitchLayer(["baise2D"]);
|
});
|
Bus.$on("switch2D", () => {
|
this.clearSwitchLayer(["0CAAD18E", "48EB9EB7"]);
|
});
|
Bus.$on("switch3D", () => {
|
this.clearSwitchLayer(["shijingsanwei"]);
|
});
|
Bus.$on("switchImage", () => {
|
// this.clearSwitchLayer(["C0698021"]);
|
this.clearSwitchLayer([""]);
|
});
|
|
Bus.$on("showSPJK", () => {
|
this.$refs.tree.setChecked("zhianjiankong", true, true);
|
this.setChecked("zhianjiankong", true);
|
});
|
//关闭菜单弹窗
|
Bus.$on("closeMenuPop", (data) => {
|
if (data) {
|
this.isShowLeftPanel = false;
|
}
|
});
|
// Bus.$on("switchImage", () => {
|
|
// this.$refs.tree.setChecked("shijingsanwei", true, true);
|
// });
|
},
|
methods: {
|
getLayersData(url) {
|
axios.get(url).then(
|
(response) => {
|
// console.log(response.data);
|
// 得到默认选中的数据的id
|
this.parseJson(response.data.children);
|
//场景配置
|
this.treeData = response.data && response.data.children;
|
this.setDefaultCheck(response.data);
|
this.$nextTick(() => {
|
let selectedLayers = this.$refs.tree.getCheckedNodes();
|
if (url == "./static/layers2.json") {
|
selectedLayers.forEach((e) => {
|
this.setVisiable(e, false);
|
this.$refs.tree.setChecked(e, false, false);
|
// sgworld.ProjectTree.setVisibility(e.id, false);
|
});
|
}
|
let filterSelectLayers = selectedLayers;
|
let filist = filterSelectLayers.filter((p) => {
|
return !p.children;
|
});
|
let legendlist = [];
|
for (var i = 0; i < filist.length; i++) {
|
var getkeyList = keys[filist[i].id];
|
if (getkeyList && getkeyList.list && getkeyList.list.length > 0) {
|
for (var j = 0; j < getkeyList.list.length; j++) {
|
legendlist.push(getkeyList.list[j]);
|
}
|
}
|
}
|
store.setPoplayerListAction(legendlist);
|
// .filter((item) => item.sourceType == "cluster");
|
this.$store.commit("selectedLayer", selectedLayers);
|
});
|
},
|
(response) => {
|
console.log("获取场景配置失败!");
|
}
|
);
|
},
|
setTreeDataChange(res) {
|
if (this.treeChangeFlag == res) return;
|
this.clearAllViewerlayer();
|
this.treeChangeFlag = res;
|
switch (res) {
|
case 1: //图层
|
this.getLayersData("./static/layers.json");
|
break;
|
case 2: //图层2
|
this.getLayersData("./static/layers2.json");
|
break;
|
}
|
},
|
clearAllViewerlayer() {
|
let layerNode = this.$refs.tree.getCheckedNodes();
|
layerNode.forEach((e) => {
|
this.setVisiable(e, false);
|
this.$refs.tree.setChecked(e, false, false);
|
// sgworld.ProjectTree.setVisibility(e.id, false);
|
});
|
},
|
getright(val) {
|
switch (val) {
|
case 1:
|
this.setTreeDataChange(1);
|
break;
|
case 2:
|
this.setTreeDataChange(2);
|
break;
|
}
|
},
|
// randomSelectLayer() {
|
// const initLayers = [
|
// "GuiHuaDanYuanHuaFenTu",
|
// "XingZhengQuHuaTu",
|
// "GuiHuaFanWeiShiYiTu",
|
// "ZhuYaoGongNengQuGuiHuaShiYiTu",
|
// ];
|
// var randomItem =
|
// initLayers[Math.floor(Math.random() * initLayers.length)];
|
// this.$refs.tree.setChecked(randomItem, true, true);
|
// this.setChecked(randomItem, true);
|
// },
|
|
layerState(nval, ovaL) {
|
if (nval) {
|
// sgworld.ProjectTree.setVisibility("fssh_3dmodel_ZL01T", false);
|
//图层数勾选加载数据;
|
this.$refs.tree.setCheckedKeys(nval);
|
let layer = this.$refs.tree.getCheckedNodes();
|
if (ovaL) {
|
ovaL.forEach((e) => {
|
sgworld.ProjectTree.setVisibility(e, false);
|
});
|
}
|
layer.forEach((e) => {
|
this.handleCheckChange(e, { checkedKeys: [e.id] });
|
});
|
}
|
},
|
treeFormatData(source) {
|
let cloneData = JSON.parse(JSON.stringify(source)); // 对源数据深度克隆
|
return cloneData.filter((father) => {
|
// 循环所有项
|
let branchArr = cloneData.filter((child) => father.gid == child.pid); // 对比ID,分别上下级菜单,并返回数据
|
branchArr.length > 0 ? (father.children = branchArr) : ""; // 给父级添加一个children属性,并赋值
|
return father.pid == 0; // 返回一级菜单
|
});
|
},
|
showLeftMenu() {
|
if (!this.isShowLeftPanel) this.isShowLeftPanel = true;
|
},
|
hideLeftMenu() {
|
this.isShowLeftPanel = false;
|
},
|
clearSwitchLayer(n) {
|
if (window.panoramaHandler) {
|
window.panoramaHandler.destroy();
|
window.panoramaLayer.deleteObject();
|
window.panoramaHandler = undefined;
|
}
|
let layerId = [
|
"0CAAD18E",
|
"48EB9EB7",
|
// "C0698021",
|
"shijingsanwei",
|
"zhianjiankong",
|
"heijin2D",
|
"shenlan2D",
|
"baise2D",
|
];
|
let layer1 = this.$refs.tree.getCheckedNodes();
|
layerId.forEach((e) => {
|
//删除
|
if (e != "shijingsanwei") {
|
layer1.forEach((v) => {
|
if (v.id == e) {
|
this.$refs.tree.setChecked(e, false, false);
|
sgworld.ProjectTree.setVisibility(e, false);
|
}
|
});
|
}
|
// 新增
|
n.forEach((i) => {
|
if (e == i) {
|
if (i !== "jiejing") {
|
this.$refs.tree.setChecked(i, true, true);
|
this.setChecked(i, true);
|
}
|
}
|
});
|
});
|
let layer = this.$refs.tree.getCheckedNodes();
|
// 单独写了一个隐藏b3d模型才能隐藏掉
|
let even = layer.filter((e) => {
|
return e.id == "shijingsanwei";
|
});
|
n.forEach((e) => {
|
if (e != "shijingsanwei") {
|
if (even.length != 0) {
|
even[0].children.forEach((v) => {
|
this.$refs.tree.setChecked(v.id, false, false);
|
sgworld.ProjectTree.setVisibility(v.id, false);
|
});
|
}
|
}
|
});
|
|
// try {
|
// this.$refs.tree.setChecked("0CAAD18E", false, false);
|
// this.$refs.tree.setChecked("48EB9EB7", false, false);
|
// this.$refs.tree.setChecked("C0698021", false, false);
|
// this.$refs.tree.setChecked("shijingsanwei", false, false);
|
// this.$refs.tree.setChecked("zhianjiankong", false, false);
|
// this.setChecked("0CAAD18E", false);
|
// this.setChecked("48EB9EB7", false);
|
// this.setChecked("C0698021", false);
|
// this.setChecked("shijingsanwei", false);
|
// this.setChecked("zhianjiankong", false);
|
// } catch (e) {}
|
},
|
// yhadd
|
closeJm() {
|
this.$parent.$parent.$parent.isShowResMenu = false;
|
},
|
|
// 递归遍历json,得到checked:true的数据的id,添加到arr中
|
parseJson(jsonObj) {
|
// 声明变量count,记录disabled存在的节点的全部数据
|
var count = 0;
|
|
for (var v in jsonObj) {
|
var element = jsonObj[v];
|
if (element.expanded) {
|
this.defaultExpanded.push(element.id);
|
}
|
if (element.children == undefined || element.children.length == 0) {
|
if (element._children == undefined || element._children.length == 0) {
|
if (element.checked) {
|
this.arr.push(element.id);
|
}
|
if (element.urls == undefined || element.urls == "") {
|
element.disabled = true;
|
count++;
|
}
|
} else {
|
this.parseJson(element._children);
|
}
|
} else {
|
this.parseJson(element.children);
|
}
|
}
|
if (count !== 0) {
|
// 添加含有disabled属性的节点数组,
|
this.alldisabled.push(jsonObj);
|
}
|
},
|
// yhadd
|
close() {
|
//弹出框收缩按钮
|
this.$parent.zyml = false;
|
},
|
async setDefaultCheck(node) {
|
this.ergodicNode(node);
|
this.$refs.tree.setCheckedKeys(this.defaultCheck);
|
// setTimeout(()=>{
|
// this.$refs.tree.setCheckedKeys(['tc3857']);
|
// },1000)
|
},
|
ergodicNode(node) {
|
if (node.expanded) {
|
this.defaultExpanded.push(node.id);
|
}
|
if (node.checked && !node.children) {
|
this.defaultCheck.push(node.id);
|
if (!node.isAdd) {
|
if (node._children) {
|
if (node.thisView) {
|
if (node._children[0].children) {
|
node._children[0].children.forEach((item) => {
|
this.addTreeData(item);
|
});
|
} else {
|
this.addTreeData(node._children[0]);
|
}
|
} else {
|
node._children.forEach((item) => {
|
this.addTreeData(item);
|
});
|
}
|
} else {
|
this.addTreeData(node);
|
}
|
}
|
}
|
if (node.children && node.children.length) {
|
node.children.forEach((item) => {
|
this.ergodicNode(item);
|
});
|
}
|
},
|
|
setChecked(id) {
|
var checkedKeys = this.$refs.tree.getCheckedKeys();
|
let isCheck = checkedKeys.indexOf(id) > -1;
|
let treeNode = this.$refs.tree.getNode(id);
|
if (treeNode && treeNode.data) {
|
this.setVisiable(treeNode.data, isCheck);
|
}
|
},
|
check(treeNode, data) {
|
//关闭右侧信息弹窗
|
Bus.$emit("closeRightPop", true);
|
// 打勾选中
|
let isCheck = data.checkedKeys.indexOf(treeNode.id) > -1;
|
this.setVisiable(treeNode, isCheck);
|
//选中之后传给vuex
|
let selectedLayers = this.$refs.tree.getCheckedNodes();
|
let filterSelectLayers = selectedLayers;
|
let filist = filterSelectLayers.filter((p) => {
|
return !p.children;
|
});
|
let legendlist = [];
|
for (var i = 0; i < filist.length; i++) {
|
var getkeyList = keys[filist[i].id];
|
if (getkeyList && getkeyList.list && getkeyList.list.length > 0) {
|
for (var j = 0; j < getkeyList.list.length; j++) {
|
legendlist.push(getkeyList.list[j]);
|
}
|
}
|
}
|
|
store.setPoplayerListAction(legendlist);
|
Bus.$emit("closeLegendPop", true);
|
|
this.$store.commit("selectedLayer", selectedLayers);
|
},
|
disabledFn(params) {
|
// debugger
|
// if (this.updateFlag) {
|
return params;
|
// }
|
},
|
setVisiable(treeNode, checked) {
|
if (treeNode.sourceType == "BJ2000") {
|
this.createCustomTMS(treeNode, checked);
|
} else if (treeNode.sourceType == "BJ54") {
|
this.createCustom54(treeNode, checked);
|
}
|
if (checked !== undefined) {
|
treeNode.checked = checked;
|
} else {
|
treeNode.checked = !treeNode.checked;
|
}
|
if (treeNode.children) {
|
treeNode.children.forEach((item) => {
|
this.setVisiable(item, treeNode.checked);
|
});
|
return;
|
} else if (treeNode._children) {
|
if (treeNode.thisView === "ewzj") {
|
treeNode._children[0].checked = treeNode.checked;
|
if (treeNode._children[0].children) {
|
treeNode._children[0].children.forEach((item) => {
|
item.checked = treeNode.checked;
|
this.addTreeData(item);
|
});
|
} else {
|
this.addTreeData(treeNode._children[0]);
|
}
|
} else if (treeNode.thisView === "swzj") {
|
for (let i = 1; i < treeNode._children.length; i++) {
|
treeNode._children[i].checked = treeNode.checked;
|
}
|
treeNode._children.forEach((item, index) => {
|
index !== 0 && this.addTreeData(item);
|
});
|
} else if (!treeNode.thisView) {
|
treeNode._children.forEach((item, index) => {
|
item.checked = treeNode.checked;
|
if (item.children) {
|
item.children.forEach((_item) => {
|
_item.checked = item.checked;
|
this.addTreeData(_item);
|
});
|
} else {
|
this.addTreeData(item);
|
}
|
});
|
}
|
return;
|
}
|
|
if (!treeNode.isAdd) {
|
this.addTreeData(treeNode);
|
return;
|
}
|
|
let data = _getTreeData(treeNode.id);
|
if (data) {
|
data.item &&
|
data.item.setVisibility &&
|
data.item.setVisibility(treeNode.checked);
|
data.item &&
|
data.item.setVisible &&
|
data.item.setVisible(treeNode.checked);
|
data.item &&
|
data.item.show !== undefined &&
|
(data.item.show = treeNode.checked);
|
if (data.datatype === "particle") {
|
data.item.forEach((item) => {
|
item.show = treeNode.checked;
|
});
|
}
|
} else {
|
if (
|
treeNode.id &&
|
treeNode.id.indexOf &&
|
treeNode.id.indexOf("---") > -1
|
) {
|
var ids = id.split("---");
|
ids.forEach((item) => {
|
sgworld.ProjectTree.setVisibility(item, treeNode.checked);
|
});
|
} else {
|
sgworld.ProjectTree.setVisibility(treeNode.id, treeNode.checked);
|
|
var dd = Viewer.dataSources._dataSources.filter((item) => {
|
return item.name == treeNode.id;
|
});
|
if (dd && dd.length > 0) {
|
dd[0].show = treeNode.checked;
|
}
|
//判断勾选的是否为聚合
|
var jhdd = clusterItemList.filter((item) => {
|
return item.name == treeNode.id;
|
});
|
if (jhdd && jhdd.length > 0) {
|
jhdd[0].dataSource.show = treeNode.checked;
|
}
|
}
|
}
|
},
|
props(data) {
|
if (data.class === "imageLayer") {
|
window.treeObj = {
|
rightClickData: data,
|
};
|
layerOpen("影像", {
|
width: 320,
|
height: 310,
|
url: "./static/html/layerProp.html",
|
fn: {
|
end: function () {},
|
},
|
});
|
} else if (data._children) {
|
if (data.thisView === "ewzj") {
|
data.thisView = "swzj";
|
data.name = "三维注记";
|
data._children[0].checked = false;
|
for (let i = 1; i < data._children.length; i++) {
|
data._children[i].checked = data.checked;
|
}
|
data._children.forEach((item) => {
|
if (item.children) {
|
item.children.forEach((_item) => {
|
_item.checked = item.checked;
|
this.addTreeData(_item);
|
});
|
} else {
|
this.addTreeData(item);
|
}
|
});
|
} else if (data.thisView === "swzj") {
|
data.thisView = "ewzj";
|
data.name = "二维注记";
|
data._children[0].checked = data.checked;
|
for (let i = 1; i < data._children.length; i++) {
|
data._children[i].checked = false;
|
}
|
data._children.forEach((item) => {
|
if (item.children) {
|
item.children.forEach((_item) => {
|
_item.checked = item.checked;
|
this.addTreeData(_item);
|
});
|
} else {
|
this.addTreeData(item);
|
}
|
});
|
}
|
}
|
},
|
flyTo(treeNode) {
|
if (treeNode.children) return;
|
if (treeNode._children && treeNode._children[0]) {
|
this.flyTo(treeNode._children[0]);
|
return;
|
}
|
if (treeNode && treeNode.flyTo) {
|
if (treeNode && treeNode.flyTo.length === 3) {
|
sgworld.Navigate.flyToPosition(
|
treeNode.flyTo[0],
|
treeNode.flyTo[1],
|
treeNode.flyTo[2]
|
);
|
} else if (treeNode && treeNode.flyTo.length === 4) {
|
sgworld.Navigate.flyToPointsInterest({
|
destination: Cesium.Rectangle.fromDegrees(
|
treeNode.flyTo[0],
|
treeNode.flyTo[1],
|
treeNode.flyTo[2],
|
treeNode.flyTo[3]
|
),
|
});
|
} else {
|
sgworld.Navigate.flyToPointsInterest({
|
destination: Cesium.Cartesian3.fromDegrees(
|
treeNode.flyTo[0],
|
treeNode.flyTo[1],
|
treeNode.flyTo[2]
|
),
|
orientation: {
|
heading: treeNode.flyTo[3],
|
pitch: treeNode.flyTo[4],
|
roll: treeNode.flyTo[5],
|
},
|
});
|
}
|
return;
|
}
|
let data = sgworld.ProjectTree.getObject(treeNode.id);
|
data && data.item
|
? sgworld.Navigate.flyToObj(data.item)
|
: sgworld.Navigate.flyToObj(data);
|
if (data && data.datatype === "editEntity") {
|
data && data.item && sgworld.Navigate.flyToObj(data.item[data.type]);
|
}
|
},
|
renderContent(h, { node, data, store }) {
|
if (data.icon) {
|
return (
|
<span class="TreeNodeClass" on-dblclick={() => this.flyTo(data)}>
|
<span class="typeIcon">
|
<img src={data.icon} />
|
</span>
|
<span class="treeName" style="font-size:16px">
|
{data.name}
|
</span>
|
</span>
|
);
|
} else if (data.disabled) {
|
return (
|
<span
|
class="TreeNodeClass custom_hide"
|
on-dblclick={() => this.flyTo(data)}
|
>
|
<span class="treeName" style="font-size:16px">
|
{data.name}
|
</span>
|
</span>
|
);
|
} else {
|
if (data.children) {
|
return (
|
<span class="TreeNodeClass" on-dblclick={() => this.flyTo(data)}>
|
<span class="treeName" style="font-size:16px">
|
{data.name}
|
</span>
|
</span>
|
);
|
} else {
|
return (
|
<span
|
class="TreeNodeClass"
|
style="flex: 1;display: flex;align-items: center;justify-content: space-between;"
|
on-dblclick={() => this.flyTo(data)}
|
>
|
<span class="treeName" style="font-size:16px">
|
{data.name}
|
</span>
|
</span>
|
);
|
}
|
}
|
},
|
async addTreeData(treeNode) {
|
// if (treeNode.disabled) return;
|
let _data = sgworld.ProjectTree.getObject(treeNode.id);
|
let pID = 0;
|
|
if (_data) {
|
sgworld.ProjectTree.setVisibility(treeNode.id, treeNode.checked);
|
return;
|
} else {
|
_data = _getTreeData(treeNode.id);
|
if (_data) {
|
_data.item &&
|
_data.item.setVisibility &&
|
_data.item.setVisibility(treeNode.checked);
|
_data.item &&
|
_data.item.setVisible &&
|
_data.item.setVisible(treeNode.checked);
|
_data.item &&
|
_data.item.show !== undefined &&
|
(_data.item.show = treeNode.checked);
|
if (_data.datatype === "particle") {
|
_data.item.forEach((item) => {
|
item.show = treeNode.checked;
|
});
|
}
|
return;
|
}
|
}
|
if (!treeNode.urls || treeNode.isAdd) return;
|
treeNode.isAdd = true;
|
|
let layer;
|
treeNode.token &&
|
treeNode.token === "SmartEarthToken" &&
|
(treeNode.token = this.SmartEarthToken);
|
switch (treeNode.sourceType) {
|
case "tms":
|
layer = sgworld.Creator.createImageryProvider(
|
treeNode.name,
|
"tms",
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
fileExtension: treeNode.img || "png",
|
enablePickFeatures: false,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
undefined,
|
true,
|
""
|
);
|
|
break;
|
case "local-map":
|
// 添加本地地图
|
if (treeNode.tms) {
|
layer = sgworld.Creator.createImageryProvider(
|
treeNode.name,
|
"tms",
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
fileExtension: treeNode.img || "png",
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
tilingScheme:
|
treeNode.tileType === "Geo"
|
? new Cesium.GeographicTilingScheme()
|
: new Cesium.WebMercatorTilingScheme(),
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
} else {
|
layer = sgworld.Creator.createUrlTemplateImageryProvider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: `${treeNode.urls}/${treeNode.tile || "{z}/{x}/{y}"}.${
|
treeNode.img || "png"
|
}`,
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
tilingScheme:
|
treeNode.tileType === "Geo"
|
? new Cesium.GeographicTilingScheme()
|
: new Cesium.WebMercatorTilingScheme(),
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
}
|
break;
|
case "kml":
|
// 添加kml数据
|
layer = sgworld.Creator.addKmlLayer(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
},
|
true
|
);
|
break;
|
case "google":
|
// 添加谷歌地图
|
layer = sgworld.Creator.createUrlTemplateImageryProvider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
alpha: treeNode.alpha,
|
tilingScheme: sgworld.Core.getOffsetTilingScheme(),
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "BJ54":
|
layer = sgworld.Creator.createUrlTemplateImageryProvider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
alpha: treeNode.alpha,
|
tilingScheme: sgworld.Core.getOffsetTilingScheme(),
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "arcgis":
|
// arcgis地图
|
layer = sgworld.Creator.createArcGisImageryLayer(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
usePreCachedTilesIfAvailable: treeNode.GCJ02 ? false : true, // 是否使用服务的内置的切片方案,偏移纠正需要使用如下自定义的方案
|
tilingScheme: treeNode.GCJ02
|
? sgworld.Core.getOffsetTilingScheme()
|
: undefined, // 偏移纠正
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "mapbox":
|
// mapbox地图
|
layer = sgworld.Creator.createImageryProvider(
|
treeNode.name,
|
"MapBox",
|
{
|
id: treeNode.id,
|
name: treeNode.name,
|
level: treeNode.Level,
|
enablePickFeatures: false,
|
mapId: treeNode.mapId,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
alpha: treeNode.alpha,
|
accessToken:
|
treeNode.token ||
|
"pk.eyJ1IjoibWFyc2dpcyIsImEiOiJja2Fod2xlanIwNjJzMnhvMXBkMnNqcjVpIn0.WnxikCaN2KV_zn9tLZO77A",
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "tdmap":
|
// 天地图
|
layer = sgworld.Creator.createWebMapTileServerImageLayer(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: 18,
|
style: treeNode.style,
|
layer: treeNode.layer,
|
format: treeNode.format,
|
enablePickFeatures: false,
|
tileMatrixSetID: "tiff",
|
show: true,
|
subdomains: ["t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"],
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "yzsate":
|
layer = sgworld.Creator.createWebMapTileServerImageLayer(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
layer: treeNode.layer,
|
enablePickFeatures: false,
|
show: true,
|
tileMatrixSetID: treeNode.ttileMatrixSetId
|
? treeNode.ttileMatrixSetId
|
: "Sate_2019",
|
tilingScheme: new Cesium.WebMercatorTilingScheme({
|
rectangleSouthwestInMeters: new Cesium.Cartesian2(0, -229396.5),
|
rectangleNortheastInMeters: new Cesium.Cartesian2(
|
917580,
|
688193.5
|
),
|
//rectangleSouthwestInMeters:new Cesium.Cartesian2(0,0) ,
|
// rectangleNortheastInMeters:new Cesium.Cartesian2(20037508.3427892, 20037508.3427892),
|
numberOfLevelZeroTilesX: 4,
|
numberOfLevelZeroTilesY: 4,
|
projection: new Cesium.GeographicProjection(),
|
}),
|
},
|
pID,
|
undefined,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "yzmap":
|
layer = sgworld.Creator.createWebMapTileServerImageLayer(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
layer: treeNode.layer,
|
enablePickFeatures: false,
|
show: true,
|
},
|
pID,
|
undefined,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "cluster":
|
layer = this.initCluster(treeNode);
|
break;
|
case "yztile":
|
layer = new YZWMS(treeNode);
|
sgworld._Viewer.imageryLayers.addImageryProvider(layer);
|
break;
|
case "tdt_label":
|
// 天地图三维注记
|
layer = sgworld.Creator.GeoWTFS({
|
token: treeNode.token || "c53eb074c3fcba5ac86103d4d711bbe8",
|
url: treeNode.urls,
|
subdomains: ["0", "1", "2", "3", "4", "5", "6", "7"],
|
});
|
break;
|
case "txmap":
|
// 腾讯地图
|
layer = sgworld.Creator.createUrlTemplateImageryProvider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
level: treeNode.Level,
|
enablePickFeatures: false,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: 18,
|
alpha: treeNode.alpha,
|
tilingScheme: sgworld.Core.getOffsetTilingScheme(), // 偏移纠正
|
customTags: {
|
sx: (_imageryProvider, x) => {
|
return x >> 4;
|
},
|
sy: (_imageryProvider, _x, y, level) => {
|
return ((1 << level) - y) >> 4;
|
},
|
},
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "gdmap":
|
// 高德地图
|
layer = sgworld.Creator.createUrlTemplateImageryProvider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: 18,
|
tilingScheme: sgworld.Core.getOffsetTilingScheme(), // 偏移纠正
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "bdmap":
|
// 百度地图
|
layer = sgworld.Creator.createImageryProvider(
|
treeNode.name,
|
"BaiduMap",
|
{
|
id: treeNode.id,
|
level: treeNode.Level,
|
enablePickFeatures: false,
|
style: treeNode.style,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "cesiumblack":
|
// cesiumIon黑夜地图
|
layer = sgworld.Creator.createImageryProvider(
|
treeNode.name,
|
"cesiumBlack",
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
flipXY: true,
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "osm":
|
// osm地图
|
layer = sgworld.Creator.createImageryProvider(
|
treeNode.name,
|
"OpenStreetMap",
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "wmts":
|
// wmts影像
|
layer = sgworld.Creator.createWebMapTileServerImageLayer(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
level: treeNode.Level,
|
style: treeNode.style,
|
layer: treeNode.layer,
|
enablePickFeatures: false,
|
format: treeNode.format,
|
tileMatrixSetID: treeNode.srs,
|
tilingScheme:
|
treeNode.tileType === "Geo"
|
? new Cesium.GeographicTilingScheme()
|
: new Cesium.WebMercatorTilingScheme(),
|
show: true,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "gis_wmts":
|
// gisserver wmst影像
|
layer = sgworld.Creator.createUrlTemplateImageryProvider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: Cesium.buildModuleUrl(
|
treeNode.urls + "/{z}/{x}/{reverseY}.png"
|
),
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "wmts_zj":
|
// 行列号差两倍的wmts
|
var geotil = new Cesium.GeographicTilingScheme({
|
rectangle: Cesium.Rectangle.MAX_VALUE,
|
});
|
if (treeNode.addLevel && treeNode.addLevel === 2) {
|
geotil.positionToTileXY = function (position, level, result) {
|
level > 0 && level++;
|
var rectangle = this._rectangle;
|
if (!Cesium.Rectangle.contains(rectangle, position)) {
|
// outside the bounds of the tiling scheme
|
return undefined;
|
}
|
|
var xTiles = this.getNumberOfXTilesAtLevel(level);
|
var yTiles = this.getNumberOfYTilesAtLevel(level);
|
|
var xTileWidth = rectangle.width / xTiles;
|
var yTileHeight = rectangle.height / yTiles;
|
|
var longitude = position.longitude;
|
if (rectangle.east < rectangle.west) {
|
longitude += Cesium.Math.TWO_PI;
|
}
|
|
var xTileCoordinate =
|
((longitude - rectangle.west) / xTileWidth) | 0;
|
if (xTileCoordinate >= xTiles) {
|
xTileCoordinate = xTiles - 1;
|
}
|
|
var yTileCoordinate =
|
((rectangle.north - position.latitude) / yTileHeight) | 0;
|
if (yTileCoordinate >= yTiles) {
|
yTileCoordinate = yTiles - 1;
|
}
|
|
if (!Cesium.defined(result)) {
|
return new Cesium.Cartesian2(xTileCoordinate, yTileCoordinate);
|
}
|
|
result.x = xTileCoordinate;
|
result.y = yTileCoordinate;
|
return result;
|
};
|
geotil.tileXYToRectangle = function (x, y, level, result) {
|
level > 0 && level++;
|
var rectangle = this._rectangle;
|
|
var xTiles = this.getNumberOfXTilesAtLevel(level);
|
var yTiles = this.getNumberOfYTilesAtLevel(level);
|
|
var xTileWidth = rectangle.width / xTiles;
|
var west = x * xTileWidth + rectangle.west;
|
var east = (x + 1) * xTileWidth + rectangle.west;
|
|
var yTileHeight = rectangle.height / yTiles;
|
var north = rectangle.north - y * yTileHeight;
|
var south = rectangle.north - (y + 1) * yTileHeight;
|
|
if (!Cesium.defined(result)) {
|
result = new Cesium.Rectangle(west, south, east, north);
|
}
|
|
result.west = west;
|
result.south = south;
|
result.east = east;
|
result.north = north;
|
return result;
|
};
|
}
|
layer = sgworld.Creator.createWebMapTileServerImageLayer(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
layer: treeNode.layer,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
style: "default",
|
tileMatrixSetID: "esritilematirx",
|
format: "image/png",
|
tilingScheme: geotil,
|
addLevel: treeNode.addLevel || 1, //层级加一
|
enablePickFeatures: false,
|
show: true,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "wms":
|
case "wmsc":
|
// wms数据
|
var parameters = {
|
service: "WMS",
|
format: "image/png",
|
transparent: true,
|
};
|
if (treeNode.removeNullValue) {
|
if (treeNode.nullvalue) {
|
treeNode.nullvalue = treeNode.nullvalue.replace("rgb(", "");
|
treeNode.nullvalue = treeNode.nullvalue.replace(")", "");
|
}
|
parameters.nullvalue = sgworld.Core.defaultValue(
|
treeNode.nullvalue,
|
"0,0,0"
|
);
|
parameters.nulltolerance = sgworld.Core.defaultValue(
|
treeNode.nulltolerance,
|
0
|
);
|
}
|
treeNode.token && (treeNode.urls += "?token=" + treeNode.token);
|
if (treeNode.sourceType === "wmsc") {
|
layer = sgworld.Creator.createCacheImageryProvider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls || "",
|
layers: treeNode.layer || "",
|
level: treeNode.Level,
|
enablePickFeatures: false,
|
cacheUrl: treeNode.cacheUrl || treeNode.urls,
|
fileExtension: treeNode.fileExtension,
|
cacheMaxLevel: treeNode.cacheMaxLevel || 16,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
treeNode.checked,
|
""
|
);
|
} else {
|
layer = sgworld.Creator.createImageryProvider(
|
treeNode.name,
|
"wms",
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
layers: treeNode.layer || "",
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
enablePickFeatures: false,
|
parameters: parameters,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
}
|
break;
|
case "wmse":
|
// layer = sgworld.Creator.CreateWMSImageFeatureLayer(
|
// treeNode.name,
|
// {
|
// id: treeNode.id,
|
// url: treeNode.urls,
|
// queryParameters: {
|
// layers: treeNode.layer || "",
|
// nowtime: new Date().getTime(),
|
// },
|
// },
|
// {
|
|
// },
|
// "0",
|
// true,
|
// function () {}
|
// );
|
layer = sgworld.Creator.createImageryProvider(
|
treeNode.name,
|
"wms",
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
enablePickFeatures: false,
|
|
layers: treeNode.layer || "",
|
alpha: treeNode.alpha,
|
parameters: {
|
format: "image/png",
|
transparent: true,
|
},
|
},
|
"0",
|
undefined,
|
true,
|
""
|
);
|
break;
|
case "wfs":
|
// wfs数据
|
// console.log(treeNode);
|
layer = sgwfs.CreateWfs(treeNode.class, treeNode);
|
break;
|
case "yinjing":
|
axios
|
.get(
|
treeNode.urls +
|
"?version=1.3.0&request=GetFeature&format=json&typename=" +
|
treeNode.layer
|
)
|
.then((data) => {
|
let features = data.data.features;
|
features.forEach((feature) => {
|
let geom = feature.geometry.coordinates;
|
let properties = feature.properties;
|
let point = new SmartEarth.Degrees(geom[0], geom[1], 0);
|
let imgUrl;
|
// console.log(point);
|
if (feature.featureType == "窨井") {
|
switch (feature.properties["井类型"]) {
|
case "雨水井": //员工
|
imgUrl =
|
SmartEarthRootUrl +
|
"Workers/image/csyxj/切片/雨水井盖.png";
|
break;
|
case "电力井":
|
imgUrl =
|
SmartEarthRootUrl +
|
"Workers/image/csyxj/切片/电力井盖.png";
|
break;
|
case "交通井":
|
imgUrl =
|
SmartEarthRootUrl +
|
"Workers/image/csyxj/切片/交通井盖.png";
|
break;
|
case "路灯井":
|
imgUrl =
|
SmartEarthRootUrl +
|
"Workers/image/csyxj/切片/路灯井盖.png";
|
break;
|
case "通信井":
|
imgUrl =
|
SmartEarthRootUrl +
|
"Workers/image/csyxj/切片/通信井盖.png";
|
break;
|
case "污水井":
|
imgUrl =
|
SmartEarthRootUrl +
|
"Workers/image/csyxj/切片/污水井盖.png";
|
break;
|
case "监控井":
|
imgUrl =
|
SmartEarthRootUrl +
|
"Workers/image/csyxj/切片/监控井盖.png";
|
break;
|
case "燃气井":
|
imgUrl =
|
SmartEarthRootUrl +
|
"Workers/image/csyxj/切片/燃气井盖.png";
|
break;
|
case "热力井":
|
imgUrl =
|
SmartEarthRootUrl +
|
"Workers/image/csyxj/切片/热力井盖.png";
|
break;
|
default:
|
imgUrl = treeNode.image;
|
break;
|
}
|
}
|
|
var position = sgworld.Creator.CreatePosition(
|
geom[0],
|
geom[1],
|
0
|
);
|
var label = sgworld.Creator.CreateLabel(
|
position,
|
feature.properties["count"],
|
feature.featureType == "窨井" ? imgUrl : treeNode.image,
|
{
|
imageScale: 0.5,
|
disableDepthTestDistance: "Infinity",
|
minimumLevel: 16,
|
maximumLevel: 22,
|
// 无视遮挡
|
disableDepthTestDistance: Infinity,
|
},
|
0,
|
"文本"
|
);
|
});
|
});
|
break;
|
case "geojson":
|
if (treeNode.class === "point") {
|
treeNode.disableDepthTestDistance === "Infinity" &&
|
(treeNode.disableDepthTestDistance = Number.POSITIVE_INFINITY);
|
|
de = {
|
id: treeNode.id,
|
fillColor: sgworld.Core.defaultValue(treeNode.color, "#ffffff"),
|
color: sgworld.Core.defaultValue(treeNode.imageColor, undefined),
|
outlineColor: sgworld.Core.defaultValue(
|
treeNode.outlineColor,
|
"#ffffff"
|
),
|
backgroundColor: sgworld.Core.defaultValue(
|
treeNode.backgroundColor,
|
"#ffffff"
|
),
|
heightReference: sgworld.Core.defaultValue(
|
treeNode.heightReference,
|
0
|
),
|
pointHeight: sgworld.Core.defaultValue(
|
treeNode.pointHeight,
|
undefined
|
),
|
near: sgworld.Core.defaultValue(treeNode.near, 0),
|
far: sgworld.Core.defaultValue(treeNode.far, 99999999999),
|
bold: treeNode.bold,
|
italic: treeNode.italic,
|
showBackground: treeNode.showBackground,
|
outlineWidth: sgworld.Core.defaultValue(treeNode.outlineWidth, 1),
|
text: treeNode.text,
|
image: treeNode.image,
|
font_size: treeNode.size,
|
font_family: sgworld.Core.defaultValue(
|
treeNode.font_family,
|
"微软雅黑"
|
),
|
disableDepthTestDistance: sgworld.Core.defaultValue(
|
treeNode.disableDepthTestDistance,
|
undefined
|
),
|
labelData: treeNode.labelData,
|
imageData: treeNode.imageData,
|
};
|
|
if (
|
treeNode.text &&
|
treeNode.image &&
|
!treeNode.labelData &&
|
!treeNode.imageData
|
) {
|
de.labelData = {
|
horizontalOrigin: Cesium.HorizontalOrigin.LEFT,
|
pixelOffset: new Cesium.Cartesian2(20, 0),
|
};
|
de.imageData = {
|
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
|
pixelOffset: new Cesium.Cartesian2(0, 0),
|
};
|
}
|
layer = sgworld.Creator.createLabelPointGeoJsonFeatureLayer(
|
treeNode.name,
|
treeNode.urls,
|
de,
|
"0",
|
treeNode.checked
|
);
|
} else if (treeNode.class === "polyline") {
|
de = {
|
id: treeNode.id,
|
layertype: "polylinelayer",
|
material: sgworld.Core.defaultValue(treeNode.color, "#ffffff"),
|
outlineColor: sgworld.Core.defaultValue(
|
treeNode.outlineColor,
|
"#ffffff"
|
),
|
outlineWidth: sgworld.Core.defaultValue(treeNode.outlineWidth, 0),
|
height: sgworld.Core.defaultValue(treeNode.height, undefined),
|
width: sgworld.Core.defaultValue(treeNode.width, 2),
|
clampToGround: sgworld.Core.defaultValue(
|
treeNode.clampToGround,
|
true
|
),
|
classificationType: treeNode.classificationType,
|
dash: sgworld.Core.defaultValue(treeNode.dash, false),
|
dashLength: sgworld.Core.defaultValue(treeNode.dashLength, 20),
|
gapColor: sgworld.Core.defaultValue(
|
treeNode.gapColor,
|
"rgba(0,0,0,0)"
|
),
|
near: sgworld.Core.defaultValue(treeNode.near, 0),
|
far: sgworld.Core.defaultValue(treeNode.far, Infinity),
|
};
|
|
layer = sgworld.Creator.createPolylineGeoJsonFeatureLayer(
|
treeNode.name,
|
treeNode.urls,
|
de,
|
"0",
|
treeNode.checked
|
);
|
} else if (treeNode.class === "polylineVolume") {
|
de = {
|
id: treeNode.id,
|
material: sgworld.Core.defaultValue(treeNode.color, "#ff0000"),
|
slttype: "0",
|
number: "4",
|
exradius: "1",
|
inradius: "1",
|
orth_width: "2",
|
orth_height: "2",
|
radius: sgworld.Core.defaultValue(treeNode.radius, 5),
|
cornerType: "0",
|
heightReference: "0",
|
height: sgworld.Core.defaultValue(treeNode.lineHeight, 0),
|
near: "0",
|
far: "99999999999",
|
radiusScale: treeNode.radiusScale,
|
connect: true,
|
};
|
layer = sgworld.Creator.createpolylineVolumeGeojsonPrimitiveLayer(
|
treeNode.name,
|
treeNode.urls,
|
de,
|
"0",
|
true,
|
function (data) {
|
if (treeNode.flow) {
|
let lines = data.entities.values;
|
lines.forEach((line) => {
|
line.polylineVolume.material =
|
sgworld.Core.getTrailLinkMaterial(
|
sgworld.Core.defaultValue(treeNode.color, "#ff0000"),
|
"../static/images/smoke.png",
|
9000
|
);
|
});
|
}
|
}
|
);
|
} else if (treeNode.class === "model") {
|
de = {
|
id: treeNode.id,
|
collect: 0,
|
uri: sgworld.Core.defaultValue(treeNode.model, ""),
|
file: "",
|
color: sgworld.Core.defaultValue(treeNode.color, "#ffffff"),
|
scale: sgworld.Core.defaultValue(treeNode.scale, 1),
|
heightReference: 0,
|
height: sgworld.Core.defaultValue(treeNode.height, 0),
|
near: "0",
|
far: "99999999999",
|
};
|
layer = sgworld.Creator.createModelPointGeoJsonFeatureLayer(
|
treeNode.name,
|
treeNode.urls,
|
de,
|
"0",
|
true
|
);
|
} else if (treeNode.class === "polygon") {
|
treeNode.disableDepthTestDistance === "Infinity" &&
|
(treeNode.disableDepthTestDistance = Number.POSITIVE_INFINITY);
|
|
de = {
|
id: treeNode.id,
|
material: sgworld.Core.defaultValue(treeNode.color, "#ff0000"),
|
height: sgworld.Core.defaultValue(treeNode.height, 0),
|
outlineColor: sgworld.Core.defaultValue(
|
treeNode.outlineColor,
|
"#ff0000"
|
),
|
extrudedHeight: sgworld.Core.defaultValue(
|
treeNode.extrudedHeight,
|
0
|
),
|
outlineWidth: sgworld.Core.defaultValue(treeNode.outlineWidth, 0),
|
outline: sgworld.Core.defaultValue(treeNode.outline, true),
|
clampToGround: sgworld.Core.defaultValue(
|
treeNode.clampToGround,
|
treeNode.extrudedHeight === undefined &&
|
treeNode.height === undefined
|
),
|
classificationType: treeNode.classificationType,
|
near: sgworld.Core.defaultValue(treeNode.near, 0),
|
far: sgworld.Core.defaultValue(treeNode.far, Infinity),
|
|
text: treeNode.text,
|
font: sgworld.Core.defaultValue(treeNode.font, "微软雅黑"),
|
labelNear: treeNode.labelNear,
|
labelFar: treeNode.labelFar,
|
fontSize: sgworld.Core.defaultValue(treeNode.size, "18px"),
|
italic: treeNode.italic,
|
bold: treeNode.bold,
|
pixelOffset: new Cesium.Cartesian2(
|
sgworld.Core.defaultValue(treeNode.offsetX, 0),
|
sgworld.Core.defaultValue(treeNode.offsetY, 0)
|
),
|
labelOutlineWidth: 2,
|
disableDepthTestDistance: treeNode.disableDepthTestDistance,
|
|
water: treeNode.water,
|
};
|
layer = sgworld.Creator.createPolygonGeoJsonFeatureLayer(
|
treeNode.name,
|
treeNode.urls,
|
de,
|
"0",
|
treeNode.checked
|
);
|
}
|
break;
|
case "pathLayer":
|
layer = sgworld.Creator.createPathLayer({
|
id: treeNode.id,
|
url: treeNode.url,
|
color: treeNode.color || "#0033FF", //线的颜色
|
width: treeNode.width || 4.0, //线的宽度
|
pointColor: treeNode.pointColor || "#FFFFFF", //移动点的颜色
|
speed: treeNode.speed || 5,
|
far: treeNode.far || 5000,
|
});
|
break;
|
case "vector": {
|
let urls = {
|
url: treeNode.urls,
|
layer: treeNode.layer,
|
srs: treeNode.srs,
|
};
|
if (
|
treeNode.class === "point" ||
|
treeNode.class === "label" ||
|
treeNode.class === "image"
|
) {
|
treeNode.disableDepthTestDistance === "Infinity" &&
|
(treeNode.disableDepthTestDistance = Number.POSITIVE_INFINITY);
|
if (treeNode.style) {
|
// de = getVectorStyleFromSG(treeNode, treeNode.style);
|
} else {
|
de = {
|
id: treeNode.id,
|
level_min: sgworld.Core.defaultValue(treeNode.minimumLevel, 10),
|
level_max: sgworld.Core.defaultValue(treeNode.maximumLevel, 22),
|
fillColor: sgworld.Core.defaultValue(treeNode.color, "#ffffff"),
|
color: sgworld.Core.defaultValue(
|
treeNode.imageColor,
|
undefined
|
),
|
outlineColor: sgworld.Core.defaultValue(
|
treeNode.outlineColor,
|
"#ffffff"
|
),
|
backgroundColor: sgworld.Core.defaultValue(
|
treeNode.backgroundColor,
|
"#ffffff"
|
),
|
heightReference: sgworld.Core.defaultValue(
|
treeNode.heightReference,
|
0
|
),
|
pointHeight: sgworld.Core.defaultValue(
|
treeNode.pointHeight,
|
undefined
|
),
|
near: sgworld.Core.defaultValue(treeNode.near, 0),
|
far: sgworld.Core.defaultValue(treeNode.far, 99999999999),
|
bold: treeNode.bold,
|
italic: treeNode.italic,
|
showBackground: treeNode.showBackground,
|
outlineWidth: sgworld.Core.defaultValue(
|
treeNode.outlineWidth,
|
1
|
),
|
text: treeNode.text,
|
image: treeNode.image,
|
font_size: treeNode.size,
|
font_family: sgworld.Core.defaultValue(
|
treeNode.font_family,
|
"微软雅黑"
|
),
|
disableDepthTestDistance: sgworld.Core.defaultValue(
|
treeNode.disableDepthTestDistance,
|
undefined
|
),
|
labelData: treeNode.labelData,
|
imageData: treeNode.imageData,
|
};
|
}
|
|
if (
|
treeNode.text &&
|
treeNode.image &&
|
!treeNode.labelData &&
|
!treeNode.imageData
|
) {
|
de.labelData = {
|
horizontalOrigin: Cesium.HorizontalOrigin.LEFT,
|
pixelOffset: new Cesium.Cartesian2(20, 0),
|
};
|
de.imageData = {
|
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
|
pixelOffset: new Cesium.Cartesian2(0, 0),
|
};
|
}
|
urls.upperLevelLimit = de.level_max;
|
urls.lowerLevelLimit = de.level_min;
|
layer = sgworld.Creator.createLabelImageGeoJsonFeatureLayerProvider(
|
treeNode.name,
|
urls,
|
de,
|
"0",
|
treeNode.checked,
|
function () {}
|
);
|
} else if (treeNode.class === "polylineVolume") {
|
de = {
|
id: treeNode.id,
|
level_min: sgworld.Core.defaultValue(treeNode.minimumLevel, 10),
|
level_max: sgworld.Core.defaultValue(treeNode.maximumLevel, 22),
|
material: sgworld.Core.defaultValue(treeNode.color, "#ff0000"),
|
slttype: "0",
|
number: "4",
|
exradius: "1",
|
inradius: "1",
|
orth_width: "2",
|
orth_height: "2",
|
radius: sgworld.Core.defaultValue(treeNode.radius, 0.5),
|
cornerType: "0",
|
heightReference: "0",
|
height: sgworld.Core.defaultValue(treeNode.height, 0),
|
near: sgworld.Core.defaultValue(treeNode.near, 0),
|
far: sgworld.Core.defaultValue(treeNode.far, 99999999999),
|
radiusScale: treeNode.radiusScale,
|
};
|
urls.upperLevelLimit = de.level_max;
|
urls.lowerLevelLimit = de.level_min;
|
layer = sgworld.Creator.createVolumeGeoJsonFeatureLayerProvider(
|
treeNode.name,
|
urls,
|
de,
|
"0",
|
treeNode.checked,
|
function () {}
|
);
|
} else if (treeNode.class === "polyline") {
|
de = {
|
id: treeNode.id,
|
layertype: "polylinelayer",
|
level_min: sgworld.Core.defaultValue(treeNode.minimumLevel, 10),
|
level_max: sgworld.Core.defaultValue(treeNode.maximumLevel, 22),
|
material: sgworld.Core.defaultValue(treeNode.color, "#ffffff"),
|
outlineColor: sgworld.Core.defaultValue(
|
treeNode.outlineColor,
|
"#ffffff"
|
),
|
outlineWidth: sgworld.Core.defaultValue(treeNode.outlineWidth, 0),
|
height: sgworld.Core.defaultValue(treeNode.height, undefined),
|
width: sgworld.Core.defaultValue(treeNode.width, 2),
|
clampToGround: sgworld.Core.defaultValue(
|
treeNode.clampToGround,
|
true
|
),
|
classificationType: treeNode.classificationType,
|
dash: sgworld.Core.defaultValue(treeNode.dash, false),
|
dashLength: sgworld.Core.defaultValue(treeNode.dashLength, 20),
|
gapColor: sgworld.Core.defaultValue(
|
treeNode.gapColor,
|
"rgba(0,0,0,0)"
|
),
|
near: sgworld.Core.defaultValue(treeNode.near, 0),
|
far: sgworld.Core.defaultValue(treeNode.far, Infinity),
|
};
|
urls.upperLevelLimit = de.level_max;
|
urls.lowerLevelLimit = de.level_min;
|
|
layer =
|
sgworld.Creator.createPrimitivePolylineVectorGeoJsonFeatureLayerProvider(
|
treeNode.name,
|
urls,
|
de,
|
"0",
|
treeNode.checked,
|
function () {}
|
);
|
} else if (treeNode.class === "polygon") {
|
de = {
|
id: treeNode.id,
|
layertype: "polygonlayer",
|
level_min: sgworld.Core.defaultValue(treeNode.minimumLevel, 10),
|
level_max: sgworld.Core.defaultValue(treeNode.maximumLevel, 22),
|
material: sgworld.Core.defaultValue(treeNode.color, "#ff0000"),
|
heightReference: "1",
|
height: sgworld.Core.defaultValue(treeNode.height, 0),
|
extrudedHeight: sgworld.Core.defaultValue(
|
treeNode.extrudedHeight,
|
0
|
),
|
extrudedHeightReference: "1",
|
clampToGround: sgworld.Core.defaultValue(
|
treeNode.clampToGround,
|
false
|
),
|
classificationType: treeNode.classificationType,
|
near: sgworld.Core.defaultValue(treeNode.near, 0),
|
far: sgworld.Core.defaultValue(treeNode.far, Infinity),
|
};
|
urls.upperLevelLimit = de.level_max;
|
urls.lowerLevelLimit = de.level_min;
|
layer =
|
sgworld.Creator.createGeoJsonFeatureLayerProviderOptimization(
|
treeNode.name,
|
urls,
|
de,
|
"0",
|
treeNode.checked,
|
function () {}
|
);
|
} else if (treeNode.class === "model") {
|
de = {
|
id: treeNode.id,
|
level_min: sgworld.Core.defaultValue(treeNode.minimumLevel, 10),
|
level_max: sgworld.Core.defaultValue(treeNode.maximumLevel, 22),
|
collect: 0,
|
uri: sgworld.Core.defaultValue(treeNode.model, ""),
|
file: "",
|
color: sgworld.Core.defaultValue(treeNode.color, "#ffffff"),
|
scale: sgworld.Core.defaultValue(treeNode.scale, 1),
|
heightReference: 0,
|
height: sgworld.Core.defaultValue(treeNode.height, 0),
|
near: "0",
|
far: "99999999999",
|
};
|
//模型点
|
urls.upperLevelLimit = de.level_max;
|
urls.lowerLevelLimit = de.level_min;
|
layer = sgworld.Creator.createModelGeoJsonFeatureLayerProvider(
|
treeNode.name,
|
urls,
|
de,
|
"0",
|
treeNode.checked,
|
function () {}
|
);
|
}
|
layer && (treeNode.id = layer.treeobj.id);
|
break;
|
}
|
case "terrain":
|
layer = sgworld.Creator.createTerrain(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
requestVertexNormals: true,
|
url: treeNode.urls,
|
},
|
"0",
|
true,
|
""
|
);
|
break;
|
case "sgsterrain":
|
layer = sgworld.Creator.sfsterrainprovider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
layerName: treeNode.layer,
|
requestVertexNormals: true,
|
url: treeNode.urls || "",
|
token: treeNode.token,
|
cacheUrl: treeNode.cacheUrl,
|
cacheLevel: treeNode.cacheLevel,
|
},
|
"0",
|
true,
|
""
|
);
|
break;
|
case "sgsterrain7.1":
|
layer = sgworld.Creator.sfsterrainprovider71(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
layerName: treeNode.layer,
|
requestVertexNormals: true,
|
url: treeNode.urls,
|
token: treeNode.token,
|
cacheUrl: treeNode.cacheUrl,
|
cacheLevel: treeNode.cacheLevel,
|
},
|
"0",
|
true,
|
""
|
);
|
break;
|
case "arcgisterrain":
|
layer = sgworld.Creator.createArcGISTerrain(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
requestVertexNormals: true,
|
url: treeNode.urls,
|
},
|
"0",
|
true,
|
""
|
);
|
break;
|
case "CesiumGlobeTerrain":
|
layer = sgworld.Creator.createCesiumTerrain(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
requestVertexNormals: true,
|
},
|
"0",
|
true,
|
""
|
);
|
break;
|
case "b3dm":
|
layer = sgworld.Creator.create3DTilesets(
|
treeNode.name,
|
treeNode.urls,
|
{
|
id: treeNode.id,
|
Level: treeNode.Level,
|
maximumScreenSpaceError:
|
treeNode.maximumScreenSpaceError &&
|
parseInt(treeNode.maximumScreenSpaceError),
|
maximumMemoryUsage:
|
treeNode.maximumMemoryUsage &&
|
parseInt(treeNode.maximumMemoryUsage),
|
geometricError:
|
treeNode.geometricError && parseInt(treeNode.geometricError),
|
},
|
{
|
groundCenter: treeNode.Center,
|
groundheight: 1,
|
heading: treeNode.heading,
|
pitch: treeNode.pitch,
|
roll: treeNode.roll,
|
effects: treeNode.effects || false,
|
effectsMaxHeight: treeNode.effectsMaxHeight || 150,
|
colors: treeNode.alpha
|
? "rgba(255,255,255," + treeNode.alpha + ")"
|
: treeNode.color || undefined,
|
},
|
"0",
|
true
|
);
|
break;
|
case "s3m":
|
layer = sgworld.Creator.createS3MLayer(
|
treeNode.urls,
|
sgworld._Viewer.scene,
|
function () {}
|
);
|
break;
|
case "gltf":
|
var position = [treeNode.lon, treeNode.lat, treeNode.height];
|
layer = sgworld.Creator.createModel(
|
position,
|
treeNode.urls,
|
{
|
id: treeNode.id,
|
scale: treeNode.scale || 1,
|
heading: treeNode.heading,
|
pitch: treeNode.pitch,
|
roll: treeNode.roll,
|
},
|
"0",
|
treeNode.name,
|
""
|
);
|
break;
|
case "SimpleGraphic":
|
treeNode.type = treeNode.class;
|
layer = sgworld.Creator.SimpleGraphic.addFeature(treeNode);
|
break;
|
case "videoPolygon":
|
layer = sgworld.Creator.addVideoPolygon(treeNode.positions, {
|
url: treeNode.url,
|
angle: treeNode.angle,
|
});
|
break;
|
case "MilitaryPlotting":
|
if (!treeNode.feature.id) {
|
treeNode.feature.id = treeNode.id;
|
}
|
if (!treeNode.feature.name) {
|
treeNode.feature.name = treeNode.name;
|
}
|
layer = sgworld.Creator.MilitaryPlotting.addFeature(treeNode.feature);
|
break;
|
case "ParticleEffect":
|
layer = sgworld.Analysis.createParticleEffect(
|
treeNode.name,
|
treeNode.position,
|
{
|
translation: Cesium.Cartesian3.fromElements(0, 0, 0), //平移
|
}
|
);
|
layer.name = treeNode.name;
|
break;
|
case "FlowField":
|
layer = sgworld.Creator.createTrailLine(
|
treeNode.positions,
|
treeNode.style
|
);
|
layer.boundingSphere = Cesium.BoundingSphere.fromPoints(
|
treeNode.positions
|
);
|
|
break;
|
case "MobileWall":
|
layer = sgworld.Creator.createTrailLineWall(
|
treeNode.LineInterpolation.positions,
|
treeNode.style
|
);
|
layer.boundingSphere = Cesium.BoundingSphere.fromPoints(
|
treeNode.LineInterpolation.positions
|
);
|
break;
|
case "link":
|
layer = sgworld.Creator.createLinkPro(
|
sgworld.Core.toDegrees(treeNode.posisitons[0]),
|
sgworld.Core.toDegrees(treeNode.posisitons[1]),
|
{
|
clampToGround: true,
|
}
|
);
|
break;
|
case "DiffusionSource":
|
layer = sgworld.Analysis.createMultiCircleScan(
|
treeNode.position,
|
treeNode.maxRadius,
|
treeNode.maxRadius.color,
|
3000,
|
true
|
);
|
break;
|
case "RiskDiffusion":
|
case "CircularDiffusion":
|
layer = sgworld.Analysis.createCircleScan(
|
treeNode.position,
|
treeNode.maxRadius,
|
treeNode.color,
|
3000,
|
true
|
);
|
break;
|
case "FanDiffusion":
|
layer = sgworld.Analysis.createSectorScan(
|
treeNode.position,
|
treeNode.distance,
|
"#ff0000",
|
60,
|
treeNode.angle,
|
true,
|
4000,
|
true
|
);
|
break;
|
case "RadarMask":
|
layer = sgworld.Creator.createRectangularSensor(
|
treeNode.position,
|
treeNode.cylinder
|
);
|
break;
|
case "DynamicSatellite":
|
let dtwxzsData = sgworld.Creator.createConeRadar(treeNode.position, {
|
color: "#7b9ef7",
|
radius: 200000,
|
});
|
let weixin = sgworld.Creator.createModel(
|
treeNode.position,
|
window.SmartEarthRootUrl + "Workers/Model/weixin.gltf",
|
{ scale: 15 },
|
"0",
|
"卫星"
|
);
|
layer = { dtwxzsData, weixin };
|
layer.sourceType = "DynamicSatellite";
|
break;
|
case "excavate":
|
var position = [treeNode.lon, treeNode.lat, treeNode.height];
|
layer = sgworld.Creator.createModel(
|
position,
|
treeNode.urls,
|
{
|
id: treeNode.id,
|
scale: treeNode.scale || 1,
|
},
|
pID,
|
treeNode.name,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
}
|
if (treeNode.sourceType !== "gltf" && (treeNode.lon || treeNode.lat)) {
|
treeNode.flyTo = [
|
treeNode.lon,
|
treeNode.lat,
|
defaultValue(treeNode.height, 10000),
|
];
|
}
|
if (treeNode.minx && treeNode.miny && treeNode.maxx && treeNode.maxy) {
|
treeNode.flyTo = [
|
treeNode.minx,
|
treeNode.miny,
|
treeNode.maxx,
|
treeNode.maxy,
|
];
|
}
|
if (treeNode.sourceType === "wfs") {
|
addTreeData(treeNode, layer);
|
}
|
if (treeNode.baseLayer) {
|
layer.item.baseLayer = true;
|
}
|
},
|
// clusterLayer(treeNode) {
|
// // var cluGeojson = new SmartEarth.ClusterLayer(sgworld.Viewer, {
|
// // pixelRange: 10,
|
// // gradient: {
|
// // 0.0001: "rgb(0,191,255)",
|
// // 0.001: "rgb(143,255,7)",
|
// // // 0.001: "rgb(0,128,0)",
|
// // 0.01: "rgb(255,165,0)",
|
// // 0.1: "rgb(255,0,0)",
|
|
// // // img1: treeNode.img1,
|
// // // img2: treeNode.img2,
|
// // // img3: treeNode.img3,
|
// // // img4: treeNode.img4,
|
// // // img5: treeNode.img5,
|
// // },
|
// // id: treeNode.id,
|
// // style: "circle",
|
// // });
|
// // cluGeojson.dataSource.clustering.minimumClusterSize = 4;
|
|
// // axios
|
// // .get(
|
// // treeNode.urls +
|
// // "?version=1.3.0&request=GetFeature&format=json&typename=" +
|
// // treeNode.layer
|
// // )
|
// // .then((data) => {
|
// // // console.log(data);
|
|
// // let features = data.data.features;
|
// // features.forEach((feature) => {
|
// // let geom = feature.geometry.coordinates;
|
// // let properties = feature.properties;
|
// // let point = new SmartEarth.Degrees(geom[0], geom[1], 0);
|
// // let imgUrl;
|
// // if (feature.featureType == "yz井数据") {
|
// // switch (feature.properties["井类型"]) {
|
// // // case "雨水井": //员工
|
// // // imgUrl = SmartEarthRootUrl + "Workers/image/csyxj/ysj.png";
|
// // // break;
|
// // // case "电力井":
|
// // // imgUrl = SmartEarthRootUrl + "Workers/image/csyxj/dlj.png";
|
// // // break;
|
// // // case "交通井":
|
// // // imgUrl = SmartEarthRootUrl + "Workers/image/csyxj/jtj.png";
|
// // // break;
|
// // // case "路灯井":
|
// // // imgUrl = SmartEarthRootUrl + "Workers/image/csyxj/jkj.png";
|
// // // break;
|
// // // case "通信井":
|
// // // imgUrl =
|
// // // SmartEarthRootUrl + "Workers/image/csyxj/fdsylj.png";
|
// // // break;
|
// // default:
|
// // imgUrl = treeNode.image;
|
// // break;
|
// // }
|
// // }
|
|
// // let entitie = cluGeojson.add(point, {
|
// // // image: imgUrl,
|
// // image:
|
// // feature.featureType == "yz井数据" ? imgUrl : treeNode.image,
|
// // });
|
// // entitie.properties = properties;
|
// // entitie.tag = treeNode.id;
|
// // });
|
|
// // // let features1 = [];
|
// // // features.forEach((feature) => {
|
// // // let geom = feature.geometry.coordinates;
|
// // // features1.push(new SmartEarth.Degrees(geom[0], geom[1]));
|
// // // });
|
|
// // // features1.forEach((feature) => {
|
// // // let entitie = cluGeojson.add(feature, {
|
// // // image: SmartEarthRootUrl + "Workers/image/mark1.png",
|
// // // });
|
// // // entitie.properties = { name: 111 };
|
// // // });
|
|
// // // let features1 = [];
|
// // // for (let i = 0; i < 10000; i++) {
|
// // // let lon = 117.06473220386574 + Math.random() * 0.4;
|
// // // let lat = 31.69299112169982 + Math.random() * 0.3;
|
// // // features1.push(new SmartEarth.Degrees(lon, lat));
|
// // // }
|
// // // features1.forEach((feature) => {
|
// // // let entitie = cluGeojson.add(feature, {
|
// // // image: SmartEarthRootUrl + "Workers/image/mark1.png",
|
// // // });
|
// // // entitie.properties = { name: 111 };
|
// // // });
|
// // // console.log(features1);
|
|
// // cluGeojson.dataSource.show = treeNode.checked;
|
// // return cluGeojson;
|
// // });
|
|
// this.initCluster(treeNode);
|
// },
|
|
initCluster(treeNode) {
|
this.$set(treeNode, "disabled", true); //给treeNode添加disabled属性
|
|
let that = this;
|
let imgUrl;
|
new Cesium.GeoJsonDataSource.load(
|
treeNode.urls +
|
"?version=1.3.0&request=GetFeature&format=json&typename=" +
|
treeNode.layer
|
).then((dataSource) => {
|
that.$set(treeNode, "disabled", false);
|
Viewer.dataSources.add(dataSource);
|
clusterItemList.push({ name: treeNode.id, dataSource: dataSource });
|
// window.clusterItem = dataSource;
|
// 设置聚合参数
|
dataSource.clustering.enabled = true;
|
window.dataClustering = dataSource.clustering;
|
dataSource.clustering.pixelRange = 20;
|
dataSource.clustering.minimumClusterSize = 20;
|
|
// foreach用于调用数组的每个元素,并将元素传递给回调函数。
|
dataSource.entities.values.forEach((entity) => {
|
if (entity.featureType == "yz井数据") {
|
switch (feature.properties["井类型"]) {
|
default:
|
imgUrl = treeNode.image;
|
break;
|
}
|
}
|
// 将点拉伸一定高度,防止被地形压盖
|
entity.position._value.z += 50.0;
|
// 使用大小为64*64的icon,缩小展示poi
|
entity.billboard = {
|
image: entity.featureType == "yz井数据" ? imgUrl : treeNode.image,
|
scale: treeNode.imageScale,
|
// width: 50,
|
// height: 50,
|
distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
|
0,
|
5000.0
|
),
|
disableDepthTestDistance: Number.POSITIVE_INFINITY,
|
};
|
entity.tag = treeNode.id;
|
// entity.label = {
|
// // text: "POI",
|
// font: "bold 15px Microsoft YaHei",
|
// // 竖直对齐方式
|
// verticalOrigin: Cesium.VerticalOrigin.CENTER,
|
// // 水平对齐方式
|
// horizontalOrigin: Cesium.HorizontalOrigin.LEFT,
|
// // 偏移量
|
// pixelOffset: new Cesium.Cartesian2(15, 0),
|
// };
|
});
|
|
// 添加监听函数
|
dataSource.clustering.clusterEvent.addEventListener(function (
|
clusteredEntities,
|
cluster
|
) {
|
// 关闭自带的显示聚合数量的标签
|
|
cluster.label.show = true;
|
cluster.label.color = Cesium.Color.WHITE;
|
cluster.label.outlineColor = Cesium.Color.BLACK;
|
cluster.label.outlineWidth = 3.0;
|
cluster.label.style = Cesium.LabelStyle.FILL_AND_OUTLINE;
|
cluster.label.eyeOffset = new Cesium.Cartesian3(0, 0, -100);
|
cluster.label.disableDepthTestDistance = Number.POSITIVE_INFINITY;
|
cluster.billboard.disableDepthTestDistance = Number.POSITIVE_INFINITY;
|
cluster.billboard.show = true;
|
cluster.billboard.id = cluster.label.id;
|
cluster.billboard.horizontalOrigin = Cesium.HorizontalOrigin.LEFT;
|
cluster.billboard.verticalOrigin = Cesium.VerticalOrigin.CENTER;
|
var reg1 = new RegExp(",", "g");
|
cluster.label.text = cluster.label.text.replace(reg1, "");
|
// 根据聚合数量的多少设置不同层级的图片以及大小
|
if (clusteredEntities.length >= 10000) {
|
cluster.billboard.image = require("@/assets/img/right/test01.png");
|
cluster.billboard.pixelOffset = new Cesium.Cartesian2(-25, -10);
|
cluster.billboard.width = 142;
|
cluster.billboard.height = 142;
|
} else if (clusteredEntities.length >= 1000) {
|
cluster.billboard.image = require("@/assets/img/right/test01.png");
|
cluster.billboard.pixelOffset = new Cesium.Cartesian2(-35, -10);
|
// that.combineIconAndLabel(
|
// require("@/assets/img/right/test01.png"),
|
// clusteredEntities.length,
|
// 192,
|
// "test01"
|
// );
|
cluster.billboard.width = 135;
|
cluster.billboard.height = 135;
|
} else if (clusteredEntities.length >= 100) {
|
cluster.billboard.image = require("@/assets/img/right/test01.png");
|
cluster.billboard.pixelOffset = new Cesium.Cartesian2(-26, -10);
|
// that.combineIconAndLabel(
|
// require("@/assets/img/right/test01.png"),
|
// clusteredEntities.length,
|
// 192,
|
// "test01"
|
// );
|
cluster.billboard.width = 102;
|
cluster.billboard.height = 102;
|
}
|
// else if (clusteredEntities.length >= 40) {
|
// cluster.billboard.image = require("@/assets/img/right/test02.png");
|
// cluster.billboard.pixelOffset = new Cesium.Cartesian2(-0, 0);
|
// // that.combineIconAndLabel(
|
// // require("@/assets/img/right/test02.png"),
|
// // clusteredEntities.length,
|
// // 192,
|
// // "test02"
|
// // );
|
// cluster.billboard.width = 92;
|
// cluster.billboard.height = 92;
|
// }
|
// else if (clusteredEntities.length >= 20) {
|
// cluster.billboard.image = require("@/assets/img/right/test03.png");
|
// cluster.billboard.pixelOffset = new Cesium.Cartesian2(-15, 0);
|
// // that.combineIconAndLabel(
|
// // require("@/assets/img/right/test03.png"),
|
// // clusteredEntities.length,
|
// // 192,
|
// // "test03"
|
// // );
|
// cluster.billboard.width = 82;
|
// cluster.billboard.height = 82;
|
// }
|
else if (clusteredEntities.length >= 10) {
|
cluster.billboard.image = require("@/assets/img/right/test04.png");
|
cluster.billboard.pixelOffset = new Cesium.Cartesian2(-25, -10);
|
cluster.billboard.width = 82;
|
cluster.billboard.height = 82;
|
} else {
|
cluster.billboard.image = require("@/assets/img/right/test04.png");
|
cluster.billboard.pixelOffset = new Cesium.Cartesian2(-25, -10);
|
cluster.billboard.width = 62;
|
cluster.billboard.height = 62;
|
}
|
});
|
});
|
},
|
|
/**
|
* @description: 将图片和文字合成新图标使用
|
* @param {*} url:图片地址
|
* @param {*} label:文字
|
* @param {*} size:画布大小
|
* @return {*} 返回canvas
|
*/
|
combineIconAndLabel(url, label, size, val) {
|
// 创建画布对象
|
let canvas = document.createElement("canvas");
|
canvas.width = size;
|
canvas.height = size;
|
|
let ctx = canvas.getContext("2d");
|
let promise = new Cesium.Resource.fetchImage(url).then((image) => {
|
// 异常判断
|
try {
|
ctx.drawImage(image, 0, 0);
|
} catch (e) {
|
console.log(e);
|
}
|
// console.log("-----", ctx);
|
// 渲染字体
|
ctx.fillStyle = Cesium.Color.WHITE.toCssColorString();
|
if (val.indexOf("test01") != -1) {
|
ctx.font = "bold 30px Microsoft YaHei";
|
} else if (val.indexOf("test02") != -1) {
|
ctx.font = "bold 35px Microsoft YaHei";
|
} else if (val.indexOf("test03") != -1) {
|
ctx.font = "bold 35px Microsoft YaHei";
|
} else if (val.indexOf("test04") != -1) {
|
ctx.font = "bold 35px Microsoft YaHei";
|
}
|
ctx.textAlign = "center";
|
ctx.textBaseline = "middle";
|
ctx.fillText(label, size / 3, size / 2.7);
|
|
return canvas;
|
});
|
return promise;
|
},
|
createCustomTMS(treeNode, checked) {
|
if (checked) {
|
proj4.defs(
|
"EPSG:BJ2000",
|
`PROJCS["BJ2000",GEOGCS["GCS_China_Geodetic_Coordinate_System_2000",DATUM["D_China_2000",SPHEROID["CGCS2000",6378137.0,298.2572221016125]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["false_easting",800146.323386],PARAMETER["false_northing",-3819654.065068],PARAMETER["central_meridian",116.391111111],PARAMETER["scale_factor",1.0],PARAMETER["latitude_of_origin",0],UNIT["Meter",1.0]]`
|
);
|
const EPSGBJ2000 = proj4.defs("EPSG:BJ2000");
|
const topResolution = 52435.4584709169;
|
var resolutions = [];
|
for (let zoom = 0; zoom < 20; zoom++) {
|
resolutions.push(topResolution / Math.pow(2, zoom));
|
}
|
let customProvider = new UrlTemplateImageryProviderBJ2000({
|
//tms
|
SmartEarth: Cesium,
|
url: treeNode.urls,
|
//路网
|
tilingScheme: new Bj2000TilingScheme({
|
customEPSG: EPSGBJ2000,
|
proj: proj4,
|
SmartEarth: Cesium,
|
ellipsoid: Cesium.Ellipsoid.WGS84,
|
origin: [-4823200, 6183000],
|
tileWidth: 512,
|
tileHeight: 512,
|
resolutions: resolutions,
|
rectangleSouthwestInMeters: new Cesium.Cartesian2(
|
716637.9919559672,
|
546964.4106869339
|
),
|
rectangleNortheastInMeters: new Cesium.Cartesian2(
|
894455.6954487278,
|
728066.4921236223
|
),
|
}),
|
maximumLevel: 19,
|
tileHeight: 512,
|
tileWidth: 512,
|
});
|
if (treeNode.name == "北京2000影像") {
|
bj2000SATE =
|
window.Viewer.imageryLayers.addImageryProvider(customProvider);
|
} else if (treeNode.name == "北京2000矢量") {
|
bj2000Shiliang =
|
window.Viewer.imageryLayers.addImageryProvider(customProvider);
|
} else {
|
lishiyingxiang =
|
window.Viewer.imageryLayers.addImageryProvider(customProvider);
|
}
|
} else {
|
if (treeNode.name == "北京2000影像") {
|
window.Viewer.imageryLayers.remove(bj2000SATE, true);
|
} else if (treeNode.name == "北京2000矢量") {
|
window.Viewer.imageryLayers.remove(bj2000Shiliang, true);
|
} else {
|
window.Viewer.imageryLayers.remove(lishiyingxiang, true);
|
}
|
}
|
},
|
createCustom54(treeNode, checked) {
|
// debugger;
|
if (checked) {
|
proj4.defs(
|
"EPSG:BJ2000",
|
`PROJCS["BJ2000",GEOGCS["GCS_China_Geodetic_Coordinate_System_2000",DATUM["D_China_2000",SPHEROID["CGCS2000",6378137.0,298.2572221016125]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["false_easting",800146.323386],PARAMETER["false_northing",-3819654.065068],PARAMETER["central_meridian",116.391111111],PARAMETER["scale_factor",1.0],PARAMETER["latitude_of_origin",0],UNIT["Meter",1.0]]`
|
);
|
const EPSGBJ2000 = proj4.defs("EPSG:BJ2000");
|
const topResolution = 52435.4584709169;
|
var resolutions = [];
|
for (let zoom = 0; zoom < 20; zoom++) {
|
resolutions.push(topResolution / Math.pow(2, zoom));
|
}
|
let customProvider = new UrlTemplateImageryProviderBJ2000({
|
//tms
|
SmartEarth: Cesium,
|
url: treeNode.urls,
|
//路网
|
tilingScheme: new Bj2000TilingScheme({
|
customEPSG: EPSGBJ2000,
|
proj: proj4,
|
SmartEarth: Cesium,
|
ellipsoid: Cesium.Ellipsoid.WGS84,
|
origin: [-4823200, 6183000],
|
tileWidth: 512,
|
tileHeight: 512,
|
resolutions: resolutions,
|
rectangleSouthwestInMeters: new Cesium.Cartesian2(
|
716637.9919559672,
|
546964.4106869339
|
),
|
rectangleNortheastInMeters: new Cesium.Cartesian2(
|
894455.6954487278,
|
728066.4921236223
|
),
|
}),
|
maximumLevel: 19,
|
tileHeight: 512,
|
tileWidth: 512,
|
});
|
lishiyingxiang =
|
window.Viewer.imageryLayers.addImageryProvider(customProvider);
|
} else {
|
window.Viewer.imageryLayers.remove(lishiyingxiang, true);
|
}
|
},
|
},
|
};
|
</script>
|
<style scoped>
|
.openLeftMenu {
|
position: absolute;
|
height: 30px;
|
width: 30px;
|
left: 50%;
|
top: 50%;
|
transform: translate(-50%, -50%);
|
}
|
|
.tuyuanxinxi {
|
margin: 10px auto 0;
|
}
|
|
.closeLeftMenu {
|
color: #fff;
|
height: 42px;
|
width: 42px;
|
line-height: 37px;
|
font-size: 30px;
|
position: absolute;
|
text-align: center;
|
right: 0px;
|
top: 0px;
|
cursor: pointer;
|
transition: 1s;
|
z-index: 9999;
|
}
|
|
.closeLeftMenu:hover {
|
cursor: pointer;
|
transform: rotateZ(90deg);
|
}
|
|
.layerTree .el-tree /deep/ .el-checkbox__inner {
|
background-color: #2a5fbc;
|
border: 1px solid #69a8ff;
|
}
|
|
/* .layerTree .el-tree /deep/ .el-checkbox__input.is-checked .el-checkbox__inner,
|
.layerTree
|
.el-tree
|
/deep/
|
D.el-checkbox__input.is-indeterminate
|
.el-checkbox__inner
|
.leftmenustyle {
|
background-color: #22ffc8;
|
}
|
.layerTree .el-tree /deep/.el-checkbox__inner::after {
|
border: 1px solid #000;
|
} */
|
|
.leftmenustyle {
|
/* background-color: rgba(0, 0, 0, 0.5); */
|
height: 661px;
|
background-size: 100% 100%;
|
transition: all 0.15s linear;
|
/* border: 1px solid #c7c7c7; */
|
overflow: hidden;
|
/* box-shadow: 0px 0px 5px 2px #a8a8a8; */
|
}
|
|
.leftmenu {
|
background-image: url("~@/assets/img/new/treeClose.png");
|
background-size: 100% 100%;
|
width: 50px;
|
height: 50px;
|
border-radius: 5px;
|
cursor: pointer;
|
}
|
|
.leftmenu_active {
|
background-image: url("~@/assets/img/new/listbg.png");
|
background-size: 100% 100%;
|
width: 310px;
|
height: 600px;
|
border-radius: 5px 5px 5px 5px;
|
}
|
|
.leftmenustyle .el-radio {
|
color: #fff;
|
margin-right: 10px;
|
}
|
|
/* yhadd */
|
.layerTreeContainer {
|
position: absolute;
|
top: 35px;
|
left: 20px;
|
color: white;
|
width: 270px;
|
height: 550px;
|
overflow: hidden;
|
/* margin: 20px 0; */
|
}
|
|
.layerTree {
|
color: white;
|
height: 540px;
|
/* max-height: 355px; */
|
margin-bottom: 2px;
|
overflow-y: auto;
|
overflow-x: auto;
|
}
|
|
/* yhadd */
|
.el-tree {
|
background: transparent;
|
color: white;
|
height: 93%;
|
overflow: auto;
|
}
|
|
.el-tree /deep/ .el-tree-node__content {
|
background-color: transparent !important;
|
}
|
|
.el-tree /deep/ .el-tree-node__content:hover {
|
background-color: rgba(255, 255, 255, 0.4) !important;
|
}
|
|
.el-tree /deep/ .is-current > .el-tree-node__content {
|
background-color: rgba(255, 255, 255, 0.4) !important;
|
font-size: 14px;
|
}
|
|
.layerTree::-webkit-scrollbar {
|
/*滚动条整体样式*/
|
width: 4px;
|
/*高宽分别对应横竖滚动条的尺寸*/
|
height: 4px;
|
scrollbar-arrow-color: red;
|
}
|
|
.layerTree::-webkit-scrollbar-thumb {
|
border-radius: 5px;
|
-webkit-box-shadow: inset 0 0 5px rgba(255, 255, 255, 0.2);
|
box-shadow: inset 0 0 5px rgba(255, 255, 255, 0.2);
|
background: rgba(255, 255, 255, 0.5);
|
scrollbar-arrow-color: red;
|
}
|
|
.layerTree::-webkit-scrollbar-track {
|
-webkit-box-shadow: inset 0 0 5px rgba(218, 218, 218, 0.2);
|
box-shadow: inset 0 0 5px rgba(218, 218, 218, 0.2);
|
border-radius: 0;
|
background: rgba(218, 218, 218, 0.1);
|
}
|
|
.el-tree .TreeNodeClass {
|
width: 100%;
|
background-color: #bfa;
|
flex: 1;
|
display: flex;
|
align-items: center;
|
font-size: 14px;
|
padding-right: 8px;
|
justify-content: space-between !important;
|
}
|
</style>
|