<template>
|
<div>
|
<div class="layerTreeContainer1">
|
<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"
|
@check="check"
|
>
|
</el-tree>
|
</div>
|
<!-- <img class="left-close" src="@/assets/img/ssan.png" @click="close" /> -->
|
</div>
|
</div>
|
</template>
|
|
<style scoped>
|
/* yhadd */
|
.el-tree {
|
background: transparent;
|
color: white;
|
}
|
.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;
|
}
|
.closeBtn {
|
color: white;
|
position: relative;
|
height: 42px;
|
line-height: 42px;
|
font-size: 17px;
|
padding-left: 10px;
|
}
|
.closeSpan {
|
position: absolute;
|
font-size: 30px;
|
right: 0;
|
/* color: gray; */
|
color: white;
|
transition: 1s;
|
}
|
hr {
|
width: 114%;
|
margin: 11px 0;
|
margin-left: -14px;
|
}
|
.closeSpan:hover {
|
cursor: pointer;
|
transform: rotateZ(90deg);
|
}
|
/* yhadd */
|
.layerTreeContainer1 {
|
color: white;
|
width: 320px;
|
height: 360px;
|
/* margin: 20px 0; */
|
position: absolute;
|
left: 30px;
|
bottom: 30px;
|
border-radius: 10px;
|
border: 1px solid rgba(200, 200, 200, 0.8);
|
background-color: rgba(0, 0, 0, 0.5);
|
}
|
|
.layerTree {
|
color: white;
|
max-height: 355px;
|
margin-bottom: 2px;
|
overflow-y: auto;
|
overflow-x: auto;
|
}
|
.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);
|
}
|
|
.left-close {
|
position: absolute;
|
bottom: 0;
|
right: 0;
|
cursor: pointer;
|
}
|
</style>
|
|
<script>
|
import axios from "axios";
|
import common from "@/components/common";
|
|
|
let colorTool;
|
let projectTreeData = [];
|
|
//添加工程树数据
|
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 = sgworld1.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: "layertree",
|
data() {
|
return {
|
wholeNode: [],
|
alldisabled: [],
|
arr: [], //用来保存资源目录中默认选中的节点id
|
SmartEarthToken: undefined,
|
active: false,
|
treeData: [],
|
defaultCheck: [],
|
};
|
},
|
mounted() {
|
window.ProjectTree = this.$refs.tree;
|
//获取token并请求加载图层数据
|
this.SmartEarthToken = common.smartearthtoken;
|
|
this.$nextTick(() => {
|
axios.get("./static/tudiguanli.json").then(
|
(response) => {
|
// 得到默认选中的数据的id
|
this.parseJson(response.data.children);
|
|
//场景配置
|
this.treeData = response.data && response.data.children;
|
this.setDefaultCheck(response.data);
|
},
|
(response) => {
|
console.log("获取场景配置失败!");
|
}
|
);
|
});
|
},
|
methods: {
|
// 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.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);
|
},
|
ergodicNode(node) {
|
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);
|
});
|
}
|
},
|
check(treeNode, data) {
|
let isCheck = data.checkedKeys.indexOf(treeNode.id) > -1;
|
this.setVisiable(treeNode, isCheck);
|
},
|
setVisiable(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) => {
|
sgworld1.ProjectTree.setVisibility(item, treeNode.checked);
|
});
|
} else {
|
sgworld1.ProjectTree.setVisibility(treeNode.id, 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) {
|
sgworld1.Navigate.flyToPosition(
|
treeNode.flyTo[0],
|
treeNode.flyTo[1],
|
treeNode.flyTo[2]
|
);
|
} else if (treeNode && treeNode.flyTo.length === 4) {
|
sgworld1.Navigate.flyToPointsInterest({
|
destination: Cesium.Rectangle.fromDegrees(
|
treeNode.flyTo[0],
|
treeNode.flyTo[1],
|
treeNode.flyTo[2],
|
treeNode.flyTo[3]
|
),
|
});
|
} else {
|
sgworld1.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 = sgworld1.ProjectTree.getObject(treeNode.id);
|
data && data.item
|
? sgworld1.Navigate.flyToObj(data.item)
|
: sgworld1.Navigate.flyToObj(data);
|
if (data && data.datatype === "editEntity") {
|
data && data.item && sgworld1.Navigate.flyToObj(data.item[data.type]);
|
}
|
},
|
renderContent(h, { node, data, store }) {
|
if (data.icon) {
|
return (
|
<span class="custom-tree-node" 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 {
|
return (
|
<span class="custom-tree-node" 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 = sgworld1.ProjectTree.getObject(treeNode.id);
|
let pID = 0;
|
|
if (_data) {
|
sgworld1.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 "local-map":
|
//添加本地json地图
|
layer = sgworld1.Creator.createUrlTemplateImageryProvider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls + "/{z}/{x}/{y}.png",
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
},
|
pID,
|
undefined,
|
treeNode.checked,
|
""
|
);
|
break;
|
case "kml":
|
//添加kml
|
layer = sgworld1.Creator.addKmlLayer(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
},
|
treeNode.checked
|
);
|
break;
|
case "google":
|
//添加谷歌地图
|
layer = sgworld1.Creator.createUrlTemplateImageryProvider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
},
|
pID,
|
undefined,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "arcgis":
|
layer = sgworld1.Creator.createArcGisImageryLayer(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
},
|
pID,
|
undefined,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "mapbox":
|
Cesium.MapboxApi.defaultAccessToken =
|
"pk.eyJ1IjoibWFyc2dpcyIsImEiOiJja2Fod2xlanIwNjJzMnhvMXBkMnNqcjVpIn0.WnxikCaN2KV_zn9tLZO77A";
|
layer = sgworld1.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,
|
},
|
pID,
|
undefined,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "tdmap":
|
layer = sgworld1.Creator.createWebMapTileServerImageLayer(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
style: treeNode.style,
|
layer: treeNode.layer,
|
format: treeNode.format,
|
enablePickFeatures: false,
|
tileMatrixSetID: "tiff",
|
show: true,
|
subdomains: ["t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"],
|
},
|
pID,
|
undefined,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "tdt_label":
|
layer = sgworld1.Creator.GeoWTFS({
|
token: treeNode.token || "837264f46e683ec982d452e78d71052e",
|
url: treeNode.urls,
|
subdomains: ["0", "1", "2", "3", "4", "5", "6", "7"],
|
});
|
break;
|
case "txmap":
|
layer = sgworld1.Creator.createUrlTemplateImageryProvider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
level: treeNode.Level,
|
enablePickFeatures: false,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
customTags: {
|
sx: function (imageryProvider, x, y, level) {
|
return x >> 4;
|
},
|
sy: function (imageryProvider, x, y, level) {
|
return ((1 << level) - y) >> 4;
|
},
|
},
|
},
|
pID,
|
undefined,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "gdmap":
|
layer = sgworld1.Creator.createUrlTemplateImageryProvider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
},
|
pID,
|
undefined,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "bdmap":
|
layer = sgworld1.Creator.createImageryProvider(
|
treeNode.name,
|
"BaiduMap",
|
{
|
id: treeNode.id,
|
level: treeNode.Level,
|
enablePickFeatures: false,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
},
|
pID,
|
undefined,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "cesiumblack":
|
layer = sgworld1.Creator.createImageryProvider(
|
treeNode.name,
|
"cesiumBlack",
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
credit: "Black Marble imagery courtesy NASA Earth Observatory",
|
flipXY: true,
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
},
|
pID,
|
undefined,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "osm":
|
layer = sgworld1.Creator.createImageryProvider(
|
treeNode.name,
|
"OpenStreetMap",
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
},
|
pID,
|
undefined,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "wmts":
|
layer = sgworld1.Creator.createWebMapTileServerImageLayer(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
level: treeNode.Level,
|
style: treeNode.style,
|
layer: treeNode.layer,
|
enablePickFeatures: false,
|
format: treeNode.format,
|
show: true,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
},
|
pID,
|
undefined,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "gis_wmts":
|
layer = sgworld1.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,
|
},
|
pID,
|
undefined,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "wmts_zj":
|
//行列号差两倍
|
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 = sgworld1.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,
|
},
|
pID,
|
undefined,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "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 = defaultValue(treeNode.nullvalue, "0,0,0");
|
parameters.nulltolerance = defaultValue(treeNode.nulltolerance, 0);
|
}
|
treeNode.token && (treeNode.urls += "?token=" + treeNode.token);
|
layer = sgworld1.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,
|
},
|
pID,
|
undefined,
|
treeNode.checked,
|
""
|
);
|
layer.item.alpha = defaultValue(treeNode.alpha, 1);
|
treeNode.id = layer.treeobj.id;
|
|
break;
|
case "wmsc":
|
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 = defaultValue(treeNode.nullvalue, "0,0,0");
|
parameters.nulltolerance = defaultValue(treeNode.nulltolerance, 0);
|
}
|
treeNode.token && (treeNode.urls += "?token=" + treeNode.token);
|
layer = sgworld1.Creator.createCacheImageryProvider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
layers: treeNode.layer,
|
level: treeNode.Level,
|
enablePickFeatures: false,
|
cacheUrl: treeNode.cacheUrl,
|
fileExtension: treeNode.fileExtension,
|
cacheMaxLevel: 16,
|
},
|
pID,
|
undefined,
|
treeNode.checked,
|
""
|
);
|
layer.item.alpha = defaultValue(treeNode.alpha, 1);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "wfs":
|
var de = {};
|
var color;
|
if (treeNode.class === "pointLayer") {
|
if (!treeNode.sgStyleJSON) {
|
color = colorTool.colorRgb(
|
defaultValue(treeNode.color, "#ffffff")
|
);
|
var bgColor = colorTool.colorRgb(
|
defaultValue(treeNode.bgColor, "#010101")
|
);
|
if (treeNode.text) {
|
de = {
|
label: {
|
text: {
|
defaultValue: defaultValue(treeNode.text, "标签"),
|
},
|
scaleMPP: {
|
defaultValue: "15000",
|
},
|
fillColor: {
|
defaultValue: {
|
red: color[0] / 255,
|
green: color[1] / 255,
|
blue: color[2] / 255,
|
alpha: 1,
|
},
|
},
|
scaleByDistance: {
|
near: 150,
|
nearValue: 1,
|
far: 800000,
|
farValue: 0.5,
|
},
|
minViewingHeight: {
|
defaultValue: "0",
|
},
|
font: {
|
defaultValue: "12",
|
},
|
family: {
|
defaultValue: defaultValue(treeNode.font, "Arial"),
|
},
|
backgroundColor: {
|
defaultValue: {
|
red: bgColor[0] / 255,
|
green: bgColor[1] / 255,
|
blue: bgColor[2] / 255,
|
alpha: 1,
|
},
|
},
|
scale: defaultValue(treeNode.scale, 2),
|
backgroundOpacity: {
|
defaultValue: treeNode.bgColor ? "0.5" : "0",
|
},
|
italic: {
|
defaultValue: treeNode.italic ? "1" : "0",
|
},
|
bold: {
|
defaultValue: treeNode.bold ? "1" : "0",
|
},
|
limitGrowth: {
|
defaultValue: "1",
|
},
|
textRelativeToImage: {
|
defaultValue: "0",
|
},
|
showText: {
|
defaultValue: "0",
|
},
|
textAlignment: {
|
defaultValue: "17",
|
},
|
pixelOffset: new Cesium.Cartesian2(
|
defaultValue(treeNode.offsetX, 0),
|
defaultValue(treeNode.offsetY, treeNode.image ? -10 : 0)
|
),
|
outlineColor: Cesium.Color.fromCssColorString(
|
defaultValue(treeNode.outlineColor, "#ffffff")
|
),
|
outlineWidth: defaultValue(treeNode.outlineWidth, 2),
|
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
|
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
|
},
|
lineToGround: {
|
defaultValue: "0",
|
},
|
lineToGroundLength: {
|
defaultValue: "0",
|
},
|
lineToGroundColor: {
|
defaultValue: {
|
red: 1,
|
green: 1,
|
blue: 1,
|
alpha: 1,
|
},
|
},
|
altitudeMethod: 0,
|
altitudeOffset: {
|
defaultValue: "0",
|
},
|
clampToGround: defaultValue(treeNode.clampToGround, false),
|
//"pointHeight": 100
|
};
|
}
|
if (treeNode.outlineColor) {
|
de.label &&
|
(de.label.style = Cesium.LabelStyle.FILL_AND_OUTLINE);
|
}
|
if (treeNode.image) {
|
de.billboard = {
|
image: treeNode.image,
|
scale: defaultValue(treeNode.imageScale, 1),
|
link: treeNode.link,
|
};
|
}
|
} else {
|
de = await getSGStyle(
|
"point",
|
treeNode.sgStyleJSON,
|
treeNode.name
|
);
|
}
|
} else if (treeNode.class === "polylineLayer") {
|
if (!treeNode.sgStyleJSON) {
|
color = colorTool.colorRgb(
|
defaultValue(treeNode.color, "#ffff00")
|
);
|
de = {
|
polyline: {
|
material: {
|
red: color[0] / 255,
|
green: color[1] / 255,
|
blue: color[2] / 255,
|
alpha: 1,
|
},
|
lineOpacity: defaultValue(treeNode.alpha, 1),
|
width: defaultValue(treeNode.width, 4),
|
clampToGround: defaultValue(treeNode.clampToGround, true),
|
},
|
};
|
} else {
|
de = await getSGStyle(
|
"polyline",
|
treeNode.sgStyleJSON,
|
treeNode.name
|
);
|
}
|
} else if (treeNode.class === "polygonLayer") {
|
if (!treeNode.sgStyleJSON) {
|
color = colorTool.colorRgb(
|
defaultValue(treeNode.color, "#6bbeef")
|
);
|
de = {
|
polygon: {
|
outlineColor: {
|
defaultValue: {
|
red: 1,
|
green: 1,
|
blue: 0,
|
alpha: 1,
|
},
|
},
|
outlineWidth: 1,
|
fill: {
|
defaultValue: defaultValue(treeNode.alpha, 1),
|
},
|
extrudedHeight: treeNode.extrudedHeight || 0,
|
clampToGround: !treeNode.extrudedHeight ? true : false,
|
outline: true,
|
material: {
|
defaultValue: {
|
red: color[0] / 255,
|
green: color[1] / 255,
|
blue: color[2] / 255,
|
alpha: defaultValue(treeNode.alpha, 1),
|
},
|
},
|
fromKml: true,
|
},
|
altitudeMethod: 2,
|
altitudeOffset: {
|
defaultValue: "0",
|
},
|
};
|
} else {
|
de = await getSGStyle(
|
"polygon",
|
treeNode.sgStyleJSON,
|
treeNode.name
|
);
|
}
|
}
|
if (!de && treeNode.sgStyleJSON) {
|
console.log(treeNode.name + "获取样式失败!");
|
return;
|
}
|
if (de.position_x) {
|
treeNode.lon = de.position_x;
|
treeNode.lat = de.position_y;
|
treeNode.height = de.position_z;
|
}
|
layer = sgworld1.CreateWfs(
|
Viewer,
|
defaultValue(treeNode.urls, de.urls),
|
defaultValue(treeNode.layer, de.layer),
|
{
|
min: defaultValue(treeNode.minimumLevel, de.minimumLevel || 0),
|
max: defaultValue(treeNode.maximumLevel, de.maximumLevel || 22),
|
},
|
de,
|
defaultValue(treeNode.layer, de.layer),
|
pID,
|
treeNode.checked,
|
undefined
|
);
|
break;
|
case "gis_mvt":
|
var geoOptions = {
|
id: treeNode.id,
|
url: treeNode.urls,
|
layer: treeNode.layer,
|
upperLevelLimit: treeNode.maximumLevel,
|
lowerLevelLimit: treeNode.minimumLevel,
|
minx: treeNode.minx,
|
miny: treeNode.miny,
|
maxx: treeNode.maxx,
|
maxy: treeNode.maxy,
|
};
|
var data;
|
if (treeNode.class === "pointLayer") {
|
data = {
|
level_min: defaultValue(treeNode.minimumLevel, 0),
|
level_max: defaultValue(treeNode.maximumLevel, 22),
|
};
|
if (treeNode.text) {
|
data.lable = {
|
text: treeNode.text,
|
font: " 20px sans-serif",
|
pixelOffset: new Cesium.Cartesian2(
|
defaultValue(treeNode.offsetX, 40),
|
defaultValue(treeNode.offsetY, -20)
|
),
|
fillColor: defaultValue(treeNode.color, "#ffff00"),
|
scale: defaultValue(treeNode.scale, 1),
|
near: defaultValue(treeNode.near, 0),
|
far: defaultValue(treeNode.far, 99999999999999),
|
};
|
}
|
if (treeNode.image) {
|
data.billboard = {
|
image: treeNode.image,
|
scale: defaultValue(treeNode.scale, 1),
|
near: defaultValue(treeNode.near, 0),
|
far: defaultValue(treeNode.far, 99999999999999),
|
};
|
}
|
layer = sgworld1.Creator.PointVectorGeoJsonFeatureLayerGis(
|
treeNode.name,
|
geoOptions,
|
data,
|
pID,
|
treeNode.checked,
|
function () {}
|
);
|
} else if (treeNode.class === "polylineLayer") {
|
data = {
|
level_min: defaultValue(treeNode.minimumLevel, 0),
|
level_max: defaultValue(treeNode.maximumLevel, 22),
|
near: defaultValue(treeNode.near, 0),
|
far: defaultValue(treeNode.far, 99999999999999),
|
material: defaultValue(treeNode.color, "#ff0000"),
|
width: defaultValue(treeNode.width, 2),
|
classificationType: -1,
|
};
|
layer = sgworld1.Creator.PolylineVectorGeoJsonFeatureLayerGis(
|
treeNode.name,
|
geoOptions,
|
data,
|
pID,
|
treeNode.checked,
|
function () {}
|
);
|
} else if (treeNode.class === "polygonLayer") {
|
data = {
|
effect: 0,
|
extrudedHeightReference: 1,
|
far: 9999999999999,
|
fill: "rgba(255, 0, 0, 1)",
|
ground: 1,
|
height: 1,
|
extrudedHeight: treeNode.extrudedHeight,
|
layertype: "polygonbase",
|
level_min: defaultValue(treeNode.minimumLevel, 0),
|
level_max: defaultValue(treeNode.maximumLevel, 22),
|
material: defaultValue(treeNode.color, "#ff0000"),
|
near: 0,
|
outline: false,
|
outlineColor: "rgba(68,66,66,0.5)",
|
outlineWidth: 1,
|
};
|
layer =
|
sgworld1.Creator.createGeoJsonFeatureLayerProviderGisOptimization(
|
treeNode.name,
|
geoOptions,
|
data,
|
pID,
|
treeNode.checked,
|
function () {}
|
);
|
}
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "gis_tms":
|
var dx = {
|
url: Cesium.buildModuleUrl(
|
treeNode.urls + "/{z}/{x}/{reverseY}.png"
|
),
|
};
|
layer = sgworld1.Creator.createUrlTemplateImageryProvider(
|
treeNode.name,
|
dx,
|
"0",
|
undefined,
|
treeNode.checked,
|
function (data) {}
|
);
|
break;
|
case "geojson":
|
var de = {};
|
if (treeNode.class === "polylineVolume") {
|
de = {
|
id: treeNode.id,
|
material: defaultValue(treeNode.color, "#ff0000"),
|
slttype: "0",
|
number: "4",
|
exradius: "1",
|
inradius: "1",
|
orth_width: "2",
|
orth_height: "2",
|
radius: defaultValue(treeNode.radius, 5),
|
cornerType: "0",
|
heightReference: "0",
|
height: defaultValue(treeNode.lineHeight, 0),
|
near: "0",
|
far: "99999999999",
|
radiusScale: treeNode.radiusScale,
|
connect: true,
|
};
|
layer = sgworld1.Creator.createpolylineVolumeGeojsonPrimitiveLayer(
|
treeNode.name,
|
treeNode.urls,
|
de,
|
pID,
|
treeNode.checked,
|
function (data) {}
|
);
|
} else if (treeNode.class === "model") {
|
de = {
|
id: treeNode.id,
|
collect: 0,
|
uri: defaultValue(treeNode.model, ""),
|
file: "",
|
color: defaultValue(treeNode.color, "#ffffff"),
|
scale: defaultValue(treeNode.scale, 1),
|
heightReference: 0,
|
height: defaultValue(treeNode.height, 0),
|
near: "0",
|
far: "99999999999",
|
};
|
layer = sgworld1.Creator.createModelPointGeoJsonFeatureLayer(
|
treeNode.name,
|
treeNode.urls,
|
de,
|
pID,
|
treeNode.checked,
|
function (data) {}
|
);
|
} else if (treeNode.class === "polygon") {
|
de = {
|
id: treeNode.id,
|
collect: 0,
|
extrudedHeight: defaultValue(treeNode.extrudedHeight, 0),
|
material: defaultValue(treeNode.color, "#ff0000"),
|
heightReference: 1,
|
height: defaultValue(treeNode.height, undefined),
|
classificationType: "0",
|
outline: defaultValue(treeNode.outline, false),
|
outlineColor: defaultValue(treeNode.outlineColor, "#ffff00"),
|
near: defaultValue(treeNode.near, 0),
|
far: defaultValue(treeNode.far, 999999),
|
};
|
layer = sgworld1.Creator.createPolygonGeoJsonFeatureLayer(
|
treeNode.name,
|
treeNode.urls,
|
de,
|
pID,
|
treeNode.checked,
|
function (data) {}
|
);
|
} else if (treeNode.class === "lable") {
|
var data = {
|
far: 5000,
|
font_family: "SimSun",
|
font_size: 16,
|
heightReference: 2,
|
horizontalOrigin: 0,
|
layertype: "labellayer",
|
level_max: 21,
|
level_min: 0,
|
near: 0,
|
outlineWidth: 5,
|
showBackground: false,
|
pointHeight: 10,
|
stylet: "2",
|
text: "[NAME]",
|
verticalOrigin: -1,
|
};
|
var dx = sgworld1.Creator.createLabelPointGeoJsonFeatureLayer(
|
treeNode.name,
|
treeNode.urls,
|
data,
|
"0",
|
true,
|
function (data) {
|
// debugger;
|
// sgworld1.Navigate.flyToObj(data);
|
}
|
);
|
}
|
layer && (treeNode.id = layer.treeobj.id);
|
break;
|
case "vector":
|
var de = {};
|
let urls = {
|
url: treeNode.urls,
|
layer: treeNode.layer,
|
minx: treeNode.minx,
|
miny: treeNode.miny,
|
maxx: treeNode.maxx,
|
maxy: treeNode.maxy,
|
srs: treeNode.srs,
|
};
|
if (treeNode.class === "label" || treeNode.class === "image") {
|
treeNode.disableDepthTestDistance === "Infinity" &&
|
(treeNode.disableDepthTestDistance = Number.POSITIVE_INFINITY);
|
if (treeNode.style) {
|
de = await getVectorStyleFromSG(treeNode, treeNode.style);
|
} else {
|
de = {
|
id: treeNode.id,
|
level_min: defaultValue(treeNode.minimumLevel, 10),
|
level_max: defaultValue(treeNode.maximumLevel, 22),
|
fillColor: defaultValue(treeNode.color, "#ffffff"),
|
color: defaultValue(treeNode.imageColor, undefined),
|
outlineColor: defaultValue(treeNode.outlineColor, "#ffffff"),
|
backgroundColor: defaultValue(
|
treeNode.backgroundColor,
|
"#ffffff"
|
),
|
heightReference: defaultValue(treeNode.heightReference, 0),
|
pointHeight: defaultValue(treeNode.pointHeight, undefined),
|
near: defaultValue(treeNode.near, 0),
|
far: defaultValue(treeNode.far, 1000000),
|
showBackground: treeNode.showBackground,
|
outlineWidth: defaultValue(treeNode.outlineWidth, 1),
|
text: treeNode.text,
|
image: treeNode.image,
|
font_size: treeNode.size,
|
font_family: defaultValue(treeNode.font_family, "微软雅黑"),
|
disableDepthTestDistance: 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 = sgworld1.Creator.createLabelImageGeoJsonFeatureLayerProvider(
|
treeNode.name,
|
urls,
|
de,
|
pID,
|
treeNode.checked,
|
function () {}
|
);
|
} else if (treeNode.class === "polylineVolume") {
|
de = {
|
id: treeNode.id,
|
level_min: defaultValue(treeNode.minimumLevel, 10),
|
level_max: defaultValue(treeNode.maximumLevel, 22),
|
material: defaultValue(treeNode.color, "#ff0000"),
|
slttype: "0",
|
number: "4",
|
exradius: "1",
|
inradius: "1",
|
orth_width: "2",
|
orth_height: "2",
|
radius: defaultValue(treeNode.radius, 0.5),
|
cornerType: "0",
|
heightReference: "0",
|
height: defaultValue(treeNode.lineHeight, 0),
|
near: "0",
|
far: "99999999999",
|
radiusScale: treeNode.radiusScale,
|
};
|
urls.upperLevelLimit = de.level_max;
|
urls.lowerLevelLimit = de.level_min;
|
layer = sgworld1.Creator.createVolumeGeoJsonFeatureLayerProvider(
|
treeNode.name,
|
urls,
|
de,
|
pID,
|
treeNode.checked,
|
function () {}
|
);
|
} else if (treeNode.class === "polyline") {
|
de = {
|
id: treeNode.id,
|
layertype: "polylinelayer",
|
level_min: defaultValue(treeNode.minimumLevel, 10),
|
level_max: defaultValue(treeNode.maximumLevel, 22),
|
material: defaultValue(treeNode.color, "#ffffff"),
|
height: defaultValue(treeNode.height, undefined),
|
width: defaultValue(treeNode.width, 2),
|
clampToGround: defaultValue(treeNode.clampToGround, true),
|
near: defaultValue(treeNode.near, 0),
|
far: defaultValue(treeNode.far, 1000000),
|
};
|
urls.upperLevelLimit = de.level_max;
|
urls.lowerLevelLimit = de.level_min;
|
|
layer =
|
sgworld1.Creator.createPrimitivePolylineVectorGeoJsonFeatureLayerProvider(
|
treeNode.name,
|
urls,
|
de,
|
pID,
|
treeNode.checked,
|
function () {}
|
);
|
} else if (treeNode.class === "polygon") {
|
de = {
|
id: treeNode.id,
|
layertype: "polygonlayer",
|
classificationType: 0,
|
level_min: defaultValue(treeNode.minimumLevel, 10),
|
level_max: defaultValue(treeNode.maximumLevel, 22),
|
material: defaultValue(treeNode.color, "#ff0000"),
|
fill: defaultValue(treeNode.color, "#ff0000"),
|
heightReference: "1",
|
height: defaultValue(treeNode.height, 0),
|
extrudedHeight: defaultValue(treeNode.extrudedHeight, 0),
|
extrudedHeightReference: "1",
|
clampToGround: defaultValue(treeNode.clampToGround, false),
|
near: "0",
|
far: "99999999999",
|
};
|
urls.upperLevelLimit = de.level_max;
|
urls.lowerLevelLimit = de.level_min;
|
if (treeNode.extrudedHeight) {
|
layer =
|
sgworld1.Creator.createGeoJsonFeatureLayerProviderOptimization(
|
treeNode.name,
|
urls,
|
de,
|
pID,
|
treeNode.checked,
|
function () {}
|
);
|
} else {
|
layer =
|
sgworld1.Creator.VolumeVectorGeoJsonFeatureLayerOptimizationGroundtest(
|
treeNode.name,
|
urls,
|
de,
|
pID,
|
treeNode.checked,
|
function () {}
|
);
|
}
|
} else if (treeNode.class === "model") {
|
de = {
|
id: treeNode.id,
|
level_min: defaultValue(treeNode.minimumLevel, 10),
|
level_max: defaultValue(treeNode.maximumLevel, 22),
|
collect: 0,
|
uri: defaultValue(treeNode.model, ""),
|
file: "",
|
color: defaultValue(treeNode.color, "#ffffff"),
|
scale: defaultValue(treeNode.scale, 1),
|
heightReference: 0,
|
height: defaultValue(treeNode.height, 0),
|
near: "0",
|
far: "99999999999",
|
};
|
//模型点
|
urls.upperLevelLimit = de.level_max;
|
urls.lowerLevelLimit = de.level_min;
|
layer = sgworld1.Creator.createModelGeoJsonFeatureLayerProvider(
|
treeNode.name,
|
urls,
|
de,
|
pID,
|
treeNode.checked,
|
function () {}
|
);
|
}
|
layer && (treeNode.id = layer.treeobj.id);
|
break;
|
case "terrain":
|
layer = sgworld1.Creator.createTerrain(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
requestVertexNormals: true,
|
url: treeNode.urls,
|
},
|
pID,
|
true,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "sgsterrain":
|
layer = sgworld1.Creator.sfsterrainprovider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
layerName: treeNode.layer,
|
requestVertexNormals: true,
|
url: treeNode.urls,
|
token: treeNode.token,
|
cacheUrl: treeNode.cacheUrl,
|
cacheLevel: treeNode.cacheLevel,
|
},
|
pID,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "sgsterrain7.1":
|
layer = sgworld1.Creator.sfsterrainprovider71(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
layerName: treeNode.layer,
|
requestVertexNormals: true,
|
url: treeNode.urls,
|
token: treeNode.token,
|
cacheUrl: treeNode.cacheUrl,
|
cacheLevel: treeNode.cacheLevel,
|
},
|
pID,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "arcgisterrain":
|
layer = sgworld1.Creator.createArcGISTerrain(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
requestVertexNormals: true,
|
url: treeNode.urls,
|
},
|
pID,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "b3dm":
|
layer = sgworld1.Creator.create3DTilesets(
|
treeNode.name,
|
treeNode.urls,
|
{
|
id: treeNode.id,
|
Level: treeNode.Level,
|
maximumScreenSpaceError: treeNode.maximumScreenSpaceError,
|
// preloadWhenHidden: true,
|
// cullRequestsWhileMoving: false,
|
// maximumMemoryUsage:1024,
|
preferLeaves: true,
|
// skipLevels: 2,
|
},
|
{
|
groundCenter: treeNode.Center,
|
groundheight: treeNode.modelHeight,
|
colors: treeNode.alpha
|
? "rgba(255,255,255," + treeNode.alpha + ")"
|
: treeNode.color || undefined,
|
},
|
pID,
|
treeNode.checked,
|
function (data) {}
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "gltf":
|
var position = [treeNode.lon, treeNode.lat, treeNode.height];
|
layer = sgworld1.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;
|
}
|
},
|
},
|
};
|
</script>
|
|