<template>
|
<div class="tool-panel scrollbar" style="overflow-y: auto">
|
<div>
|
<el-input style="width: 100%" size="mini" placeholder="请输入内容查询" v-model="queryString"
|
@keyup.enter.native="handleQuery">
|
</el-input>
|
</div>
|
<el-tree class="model-layer-tree" :data="layerData" :props="defaultProps" show-checkbox @node-click="handleNodeclick"
|
highlight-current :node-key="keyString" :default-checked-keys="arr" :current-node-key="currentKey" ref="tree"
|
@check="handleCheckChange">
|
<div style="display: flex; justify-content: flex-start" class="font_color" slot-scope="{ node, data }">
|
<div style="display: inline-block; padding-top: 1px" @dblclick="flyTo(data)">
|
<i class="font_color" :class="[
|
data.haschildren ? 'el-icon-folder-opened' : 'el-icon-document',
|
]"></i>
|
<span class="font_color" style="padding-left: 4px">{{
|
node.label
|
}}</span>
|
<span v-show="data.haschildren === false && data.sourceType === 'bim'" style="padding-left: 20px">
|
<el-button type="text" size="mini" @click="() => appendSubModels(node, data)">构件详情</el-button>
|
<el-button type="text" size="mini" @click="() => showModelFilterList(node, data)">类型筛选</el-button>
|
</span>
|
</div>
|
</div>
|
</el-tree>
|
</div>
|
</template>
|
<script>
|
import axios from "axios";
|
import { mapState, mapActions } from "vuex";
|
import * as SmartEarth from "../../../../public/CimSDK/index.js"
|
let Cesium = SmartEarth.Cesium
|
let layerArr = []
|
let b3dmArr = [];
|
export default {
|
props: ["showLayerContrl", "keyString"],
|
data() {
|
return {
|
queryString: "",
|
theme: "",
|
dataurl: "",
|
conheight: {
|
"overflow-y": "auto",
|
padding: "5px",
|
position: "absolute",
|
top: 0,
|
bottom: 0,
|
},
|
showtip: false,
|
visiable: false,
|
transvalue: 0,
|
defaultProps: {
|
children: "children",
|
label: "name",
|
},
|
alphaValue: 100,
|
layerData: [],
|
originalData: [], //备份一个数据,以便还原
|
_projectSource: [],
|
arr: [],
|
alldisabled: [],
|
defaultCheck: [],
|
allnames: [],
|
currentKey: "",
|
cindex: 0,
|
};
|
},
|
computed: {
|
...mapState(["bimModelListAll", "bimModelListInitEd", "modelTransform"]),
|
},
|
methods: {
|
show(url, data, theme) {
|
this.visiable = true;
|
if (url) {
|
this.dataurl = url;
|
this.getLayerData();
|
} else if (data) {
|
this.parseJson(data.children);
|
this.layerData = data && data.children;
|
this.originalData = JSON.parse(JSON.stringify(this.layerData));
|
this.setDefaultCheck(data);
|
}
|
if (theme) {
|
switch (theme.toLowerCase()) {
|
case "black":
|
this.theme = "drag_black";
|
break;
|
case "green":
|
this.theme = "drag_green";
|
break;
|
case "blue":
|
this.theme = "drag_blue";
|
break;
|
default:
|
this.theme = "drag";
|
break;
|
}
|
} else {
|
this.theme = "drag";
|
}
|
},
|
handleCheckChange(treeNode, checked) {
|
let _this = this;
|
let ischecked = checked.checkedKeys.indexOf(treeNode["id"]) > -1;
|
if (sgworld) {
|
if (treeNode.sourceType === "bims") {
|
//bim处理方式-----------------
|
if (treeNode.children && treeNode.children.length) {
|
for (let nn = 0; nn < treeNode.children.length; nn++) {
|
this.handleCheckChange(treeNode.children[nn], checked);
|
}
|
}
|
} else if (treeNode.sourceType === "bim") {
|
let bim = window.BIM;
|
if (bim) {
|
for (let modelId in this.bimModelListAll) {
|
if (this.bimModelListAll[modelId].uniqueId === treeNode.uniqueId) {
|
treeNode.dataId = modelId;
|
let x = Number(treeNode.x), y = Number(treeNode.y), height = Number(treeNode.height);
|
|
if (!treeNode.flyTo) {
|
let he = height + 500;
|
he = he < 500 ? 500 : he;
|
treeNode.flyTo = [x || 0, y || 0, he];
|
}
|
//这部分控制勾选立即定位
|
// if (ischecked && window.LOAD_FLYTO) {
|
// _this.flyTo(treeNode);
|
// }
|
var position = Cesium.Cartesian3.fromDegrees(x || 0, y || 0, height || 0);
|
let modelTransform = Cesium.Matrix4.toArray(Cesium.Transforms.eastNorthUpToFixedFrame(position));
|
let rz = Cesium.Math.toRadians(treeNode.roll || 0);
|
var rotationZ = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromRotationZ(rz));
|
Cesium.Matrix4.multiply(modelTransform, rotationZ, modelTransform);
|
|
let modelListInitEd = JSON.parse(JSON.stringify(this.bimModelListInitEd));
|
if (!modelListInitEd.hasOwnProperty(modelId)) {
|
modelListInitEd[modelId] = _this.bimModelListAll[modelId];
|
_this.$store.commit("updateModelListInitEd", modelListInitEd);
|
_this.$store.commit("updateModelTransform", modelTransform);
|
bim.SetModelTransform(modelId, modelTransform)
|
_this.$store.commit("START_LOADING");
|
treeNode.bimInfo = _this.bimModelListAll[modelId];
|
treeNode.modelTransform = modelTransform;
|
// bim.InitModel(modelId);
|
|
try {
|
let boxMin = modelListInitEd[modelId].boxMin;
|
let boxMax = modelListInitEd[modelId].boxMax;
|
treeNode.boxMin = modelListInitEd[modelId].boxMin;
|
treeNode.boxMax = modelListInitEd[modelId].boxMax;
|
boxMin = Cesium.Cartesian3.fromArray(boxMin, 0);
|
boxMax = Cesium.Cartesian3.fromArray(boxMax, 0);
|
boxMin = Cesium.Matrix4.multiplyByPoint(modelTransform, boxMin, {})
|
boxMax = Cesium.Matrix4.multiplyByPoint(modelTransform, boxMax, {})
|
let boundingSphere = Cesium.BoundingSphere.fromPoints([boxMin, boxMax], new Cesium.BoundingSphere())
|
treeNode.boundingSphere = boundingSphere;
|
} catch (e) {
|
|
}
|
_this.$store.commit("CLOSE_LOADING");
|
} else {
|
ischecked ? bim.ShowModel(modelId) : bim.HideModel(modelId);
|
// ischecked ? null : bim.HideModel(modelId);
|
_this.$store.commit("CLOSE_LOADING");
|
}
|
break;
|
}
|
}
|
}
|
} else {
|
this.setVisiable(treeNode, ischecked);
|
}
|
}
|
this.$emit("handleCheckChange", treeNode); //父方法调用你
|
},
|
|
CE2CA(viewer, x, y, z) {
|
var ellipsoid = viewer.scene.globe.ellipsoid;
|
var cartesian3 = new Cesium.Cartesian3(x, y, z);
|
var cartographic = ellipsoid.cartesianToCartographic(cartesian3);
|
var lat = Cesium.Math.toDegrees(cartographic.latitude);
|
var lng = Cesium.Math.toDegrees(cartographic.longitude);
|
var alt = cartographic.height;
|
return new Cesium.Cartographic(lng, lat, alt);
|
},
|
|
handleQuery() {
|
let _d = JSON.parse(JSON.stringify(this.originalData));
|
if (this.queryString) {
|
// this.layerData = this.convert_ListToTree(result );
|
this.layerData = this.handleTreeData(_d, this.queryString);
|
let that = this;
|
this.$nextTick(() => {
|
const treeExpansion_forAll = function (data) {
|
data.forEach((item) => {
|
that.$refs.tree.getNode(item.id).expanded = true;
|
if (item.children != undefined && item.children != null) {
|
treeExpansion_forAll(item.children);
|
}
|
});
|
};
|
treeExpansion_forAll(that.layerData);
|
});
|
} else {
|
this.layerData = _d;
|
}
|
},
|
createFilter(queryString) {
|
return (item) => {
|
return item.name.toLowerCase().indexOf(queryString.toLowerCase()) > -1;
|
};
|
},
|
|
handleTreeData(treeData, searchValue) {
|
if (!treeData || treeData.length === 0) {
|
return [];
|
}
|
const array = [];
|
for (let i = 0; i < treeData.length; i += 1) {
|
let match = false;
|
for (let pro in treeData[i]) {
|
if (typeof treeData[i][pro] == "string") {
|
match |= treeData[i][pro].includes(searchValue);
|
if (match) break;
|
}
|
}
|
if (
|
this.handleTreeData(treeData[i].children, searchValue).length > 0 ||
|
match
|
) {
|
array.push({
|
...treeData[i],
|
children: this.handleTreeData(treeData[i].children, searchValue),
|
});
|
}
|
}
|
return array;
|
},
|
|
handleNodeclick(item, checked, node) {
|
window.currentNode = item;
|
this.$store.commit("updateSelectNode", item);
|
},
|
handleSearchClick(ev) {
|
console.log(ev);
|
},
|
|
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) => {
|
sgworld.ProjectTree.setVisibility(item, treeNode.checked);
|
});
|
} else if (treeNode.sourceType === "s3m") {
|
treeNode.isAdd = false;
|
try {
|
sgworld._Viewer.scene.primitives.remove(treeNode.item);
|
} catch (e) {
|
|
}
|
} else if (treeNode.sourceType === "b3dm") {
|
if (checked) {
|
b3dmArr.forEach((item) => {
|
if (item.id == treeNode.id) {
|
item.layer.addToMap()
|
}
|
})
|
}
|
else {
|
b3dmArr.forEach((item) => {
|
if (item.id == treeNode.id) {
|
item.layer.removeFromMap()
|
}
|
})
|
}
|
} else if (treeNode.sourceType == "xyz"){
|
layerArr.forEach((item)=>{
|
if(treeNode.id == item.id) {
|
item.layer.show = checked
|
}
|
})
|
}else{
|
sgworld.ProjectTree.setVisibility(treeNode.id, treeNode.checked);
|
}
|
}
|
},
|
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 if (treeNode && treeNode.flyTo.length === 5) {
|
// var center = Cesium.Cartesian3.fromDegrees(treeNode.flyTo[0] , treeNode.flyTo[1] , treeNode.flyTo[2] );
|
// sgworld._Viewer.camera.flyTo({
|
// destination: center, orientation: {
|
// heading: Cesium.Math.toRadians(treeNode.flyTo[3]), // 方向
|
// pitch: Cesium.Math.toRadians(treeNode.flyTo[4]),// 倾斜角度
|
// roll: 0
|
// }
|
// });
|
|
} 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;
|
}
|
if (treeNode.sourceType === "bim") {
|
let x = Number(treeNode.x),
|
y = Number(treeNode.y),
|
height = Number(treeNode.height);
|
var position = Cesium.Cartesian3.fromDegrees(
|
x || 0,
|
y || 0,
|
height || 0
|
);
|
let he = height + 500;
|
he = he < 500 ? 500 : he;
|
treeNode.flyTo = [x || 0, y || 0, he];
|
// var position = { X: treeNode.x, Y: treeNode.y, Altitude: he };
|
// var label = sgworld.Creator.CreateLabel(position, treeNode.name, "", {}, 0, "");
|
sgworld.Navigate.flyToPosition(
|
treeNode.flyTo[0],
|
treeNode.flyTo[1],
|
treeNode.flyTo[2]
|
);
|
} else
|
//飞向b3dm模型
|
if (treeNode.sourceType === "b3dm") {
|
b3dmArr.forEach((item) => {
|
if (item.id == treeNode.id) {
|
sgworld.userScene.flyTo(item.layer, item.options);
|
}
|
})
|
}
|
else {
|
let data = sgworld.ProjectTree.getObject(treeNode.id);
|
data && data.item
|
? sgworld.Navigate.flyToObj(data.item)
|
: sgworld.Navigate.flyToObj(data);
|
}
|
},
|
handleAlphaChange(val) {
|
let node = this.$refs.tree.getCurrentNode();
|
},
|
getLayerData() {
|
this.$nextTick(() => {
|
axios.get(this.dataurl).then(
|
(response) => {
|
this.parseJson(response.data.children);
|
this.layerData = response.data && response.data.children;
|
this.originalData = response.data && response.data.children;
|
this.setDefaultCheck(response.data);
|
},
|
(response) => {
|
console.log("获取场景配置失败!");
|
}
|
);
|
});
|
|
// if (sgworld) {
|
// let source = sgworld.ProjectTree.Source;
|
// this.layerData = this.convert(source);
|
// }
|
},
|
convert_ListToTree(data, opt) {
|
if (!opt) {
|
opt = {};
|
opt.key = "id";
|
opt.parent = "pid";
|
opt.children = "children";
|
}
|
//rows带有pid的数组,转换成带children的
|
let result = [];
|
if (!Array.isArray(data)) {
|
return result;
|
}
|
data.forEach((item) => {
|
delete item[opt.children];
|
});
|
let map = {};
|
data.forEach((item) => {
|
map[item[opt.key]] = item;
|
});
|
data.forEach((item) => {
|
let parent = map[item[opt.parent]];
|
if (parent) {
|
(parent[opt.children] || (parent[opt.children] = [])).push(item);
|
} else {
|
result.push(item);
|
}
|
});
|
return result;
|
},
|
convert_TreeTolist(treeNodes, opt) {
|
//treeNodes带children,转换成带有pid的数组
|
if (!opt) {
|
opt = {};
|
opt.key = "id";
|
opt.parent = "pid";
|
opt.children = "children";
|
}
|
|
var NodeList = [];
|
|
function appenChildren(nodes) {
|
for (var i = 0; i < nodes.length; i++) {
|
var node = nodes[i];
|
//如果没有上层节点那么就是根节点
|
if (node.parentNode == null) {
|
node.Level = 0;
|
node[opt.parent] = "0";
|
}
|
//判断是否有子节点
|
if (node[opt.children] && node[opt.children].length > 0) {
|
//所有子节点
|
for (var k = 0; k < node.children.length; k++) {
|
node[opt.children][k][opt.parent] = node[opt.key];
|
node[opt.children][k].Level = node.Level + 1;
|
node[opt.children][k].parentNode = node;
|
}
|
appenChildren(node.children);
|
}
|
if (node.hasOwnProperty("parentNode")) delete node.parentNode;
|
if (node.hasOwnProperty(opt.children)) {
|
node.haschildren = true;
|
delete node[opt.children];
|
}
|
NodeList.push(node);
|
}
|
}
|
appenChildren(treeNodes);
|
return NodeList;
|
},
|
appendSubModels(node, data) {
|
console.log(node);
|
console.log(data);
|
//调用父组件设置面板弹出
|
this.$emit("showSubContent", data);
|
},
|
//显示模型筛选列表
|
showModelFilterList(node, data) {
|
console.log('999', node);
|
console.log('888', data);
|
this.$emit("showBimFList", data);
|
},
|
async setDefaultCheck(node) {
|
// debugger
|
this.ergodicNode(node);
|
setTimeout(() => {
|
this.$refs.tree.setCheckedKeys(this.defaultCheck);
|
let layer = this.$refs.tree.getCheckedNodes();
|
layer.forEach((e) => {
|
if (e.sourceType === "bim")
|
//bim自身出发加载
|
this.handleCheckChange(e, { checkedKeys: [e.id] });
|
});
|
}, 100);
|
},
|
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);
|
});
|
}
|
},
|
parseJson(jsonObj) {
|
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.sourceType !== "bim") {
|
//bim 不是根据url来确定disabled--------
|
if (element.urls == undefined || element.urls == "") {
|
element.disabled = true;
|
count++;
|
}
|
}
|
element.haschildren = false;
|
this.allnames.push({ name: element.name, id: element.id });
|
} else {
|
this.parseJson(element._children);
|
}
|
} else {
|
element.haschildren = true;
|
this.parseJson(element.children);
|
}
|
}
|
if (count !== 0) {
|
// 添加含有disabled属性的节点数组,
|
this.alldisabled.push(jsonObj);
|
}
|
},
|
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);
|
if (treeNode.sourceType == "giswfs") {
|
}
|
switch (treeNode.sourceType) {
|
case "local-map":
|
//添加本地json地图
|
layer = sgworld.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 = sgworld.Creator.addKmlLayer(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
},
|
treeNode.checked
|
);
|
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,
|
},
|
pID,
|
undefined,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "arcgis":
|
layer = sgworld.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 = 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,
|
},
|
pID,
|
undefined,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "tdmap":
|
layer = sgworld.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 = sgworld.Creator.GeoWTFS({
|
token: treeNode.token || "837264f46e683ec982d452e78d71052e",
|
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: 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 = sgworld.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 = sgworld.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 = sgworld.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 = sgworld.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 = 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,
|
show: true,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
tileMatrixSetID: treeNode.tileMatrixSetID,
|
},
|
pID,
|
undefined,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "jsWMTS":
|
window.Viewer.imageryLayers.addImageryProvider(
|
new Cesium.WebMapTileServiceImageryProvider({
|
url: treeNode.urls,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
}));
|
break;
|
case "ps-wmts":
|
window.Viewer.imageryLayers.addImageryProvider(
|
new Cesium.WebMapTileServiceImageryProvider({
|
url: treeNode.urls,
|
layer: treeNode.layer, //图层名
|
style: "default", //风格
|
format: "image/png", //平台
|
tileMatrixSetID: treeNode.tileMatrixSetID,
|
tileMatrixLabels: [
|
"1",
|
"2",
|
"3",
|
"4",
|
"5",
|
"6",
|
"7",
|
"8",
|
"9",
|
"10",
|
"11",
|
"12",
|
"13",
|
"14",
|
"15",
|
"16",
|
"17",
|
"18",
|
"19",
|
"20",
|
],
|
tilingScheme: new Cesium.GeographicTilingScheme(),
|
resolution: [
|
0.703125, 0.3515625, 0.17578125, 0.087890625, 0.0439453125,
|
0.02197265625, 0.010986328125, 0.0054931640625,
|
0.00274658203125, 0.001373291015625, 0.0006866455078125,
|
0.00034332275390625, 0.000171661376953125,
|
0.0000858306884765625, 0.00004291534423828125,
|
0.000021457672119140625, 0.0000107288360595703125,
|
0.00000536441802978515625, 0.000002682209014892578125,
|
0.0000013411045074462890625,
|
],
|
})
|
);
|
break;
|
case "bh_wmts":
|
window.Viewer.imageryLayers.addImageryProvider(
|
new window.Cesium.WebMapTileServiceImageryProvider({
|
//影像底图
|
url: "http://10.240.251.65:5557/gisproxy/tile?table=vec&x={TileCol}&y={TileRow}&z={TileMatrix}",
|
// subdomains: ["0", "1", "2", "3", "4", "5", "6", "7"],
|
layer: "",
|
style: "default",
|
format: "image/jpeg",
|
|
tileMatrixSetID: "GoogleMapsCompatible", //使用谷歌的瓦片切片方式
|
show: true,
|
})
|
);
|
break;
|
case "gis_wmts":
|
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,
|
},
|
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 = 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,
|
},
|
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 = 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: true,
|
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 = sgworld.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 = sgworld.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 = sgworld.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 = sgworld.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 =
|
sgworld.Creator.createGeoJsonFeatureLayerProviderGisOptimization(
|
treeNode.name,
|
geoOptions,
|
data,
|
pID,
|
treeNode.checked,
|
function () { }
|
);
|
}
|
treeNode.id = layer.treeobj.id;
|
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 = sgworld.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 = sgworld.Creator.createModelPointGeoJsonFeatureLayer(
|
treeNode.name,
|
treeNode.urls,
|
de,
|
pID,
|
treeNode.checked,
|
function (data) { }
|
);
|
} else if (treeNode.class === "polygon") {
|
de = {
|
id: treeNode.id,
|
collect: 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 = sgworld.Creator.createPolygonGeoJsonFeatureLayer(
|
treeNode.name,
|
treeNode.urls,
|
de,
|
pID,
|
treeNode.checked,
|
function (data) { }
|
);
|
}
|
layer && (treeNode.id = layer.treeobj.id);
|
break;
|
case "giswfs":
|
var de = {
|
label: {
|
text: { defaultValue: "123" },
|
scaleMPP: { defaultValue: "15000" },
|
fillColor: {
|
defaultValue: { red: 1, green: 1, blue: 1, alpha: 1 },
|
},
|
scaleByDistance: {
|
near: 150,
|
nearValue: 1,
|
far: 8000000,
|
farValue: 0,
|
},
|
minViewingHeight: { defaultValue: "0" },
|
font: { defaultValue: "12" },
|
family: { defaultValue: "Arial" },
|
backgroundColor: {
|
defaultValue: {
|
red: 0.5019607843137255,
|
green: 0.5019607843137255,
|
blue: 0.5019607843137255,
|
alpha: 1,
|
},
|
},
|
backgroundOpacity: { defaultValue: "0" },
|
italic: { defaultValue: "0" },
|
bold: { defaultValue: "0" },
|
limitGrowth: { defaultValue: "1" },
|
textRelativeToImage: { defaultValue: "0" },
|
showText: { defaultValue: "0" },
|
textAlignment: { defaultValue: "17" },
|
},
|
lineToGround: { defaultValue: "0" },
|
lineToGroundLength: { defaultValue: "0" },
|
lineToGroundColor: {
|
defaultValue: { red: 1, green: 1, blue: 1, alpha: 1 },
|
},
|
altitudeMethod: 0,
|
altitudeOffset: { defaultValue: "0" },
|
};
|
sgworld.CreateWfs(
|
sgworld._Viewer,
|
treeNode.urls,
|
treeNode.primaryKey,
|
2,
|
de,
|
treeNode.primaryKey,
|
undefined,
|
undefined,
|
undefined
|
);
|
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 = sgworld.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 = sgworld.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 =
|
sgworld.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 =
|
sgworld.Creator.createGeoJsonFeatureLayerProviderOptimization(
|
treeNode.name,
|
urls,
|
de,
|
pID,
|
treeNode.checked,
|
function () { }
|
);
|
} else {
|
layer =
|
sgworld.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 = sgworld.Creator.createModelGeoJsonFeatureLayerProvider(
|
treeNode.name,
|
urls,
|
de,
|
pID,
|
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,
|
},
|
pID,
|
true,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
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,
|
},
|
pID,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
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,
|
},
|
pID,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "arcgisterrain":
|
layer = sgworld.Creator.createArcGISTerrain(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
requestVertexNormals: true,
|
url: treeNode.urls,
|
},
|
pID,
|
treeNode.checked,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "b3dm":
|
let b3dm = { layer: null, options: null, id: null }
|
b3dm.layer = sgworld.factory.createModelLayer({
|
sourceType: "b3dm",
|
backFaceCulling: false,
|
url: treeNode.urls,
|
});
|
b3dm.options = {
|
duration: 5,
|
offset: new SmartEarth.Cesium.HeadingPitchRange(0.5, -0.3, 0.0),
|
};
|
b3dm.layer._primitive.useCustomCullingVolume = true //开起模型显示可视距离控制
|
b3dm.layer._primitive.cullingDistance = 10000
|
b3dm.layer._primitive.useCameraHeightRangeLimit = true; //开启高度显示控制
|
b3dm.layer._primitive.cameraHeightRange = new SmartEarth.Cesium.Cartesian3(
|
0.0,
|
10000
|
)
|
b3dm.id = b3dm.layer.id
|
treeNode.id = b3dm.layer.id;
|
b3dmArr.push(b3dm)
|
// treeNode.layer = layer
|
// treeNode.options = options
|
// layer = sgworld.Creator.create3DTilesets(
|
// treeNode.name,
|
// treeNode.urls,
|
// {
|
// id: treeNode.id,
|
// Level: treeNode.Level,
|
// dynamicScreenSpaceError: CESIUM_3DTILES_PARAMS.dynamicScreenSpaceError || false,
|
// dynamicScreenSpaceErrorDensity: CESIUM_3DTILES_PARAMS.dynamicScreenSpaceErrorDensity || 0.00278,
|
// dynamicScreenSpaceErrorFactor: CESIUM_3DTILES_PARAMS.dynamicScreenSpaceErrorFactor || 4,
|
// dynamicScreenSpaceErrorHeightFalloff: CESIUM_3DTILES_PARAMS.dynamicScreenSpaceErrorHeightFalloff || 0.25,
|
// preloadWhenHidden: CESIUM_3DTILES_PARAMS.preloadWhenHidden || false,
|
// cullRequestsWhileMoving: CESIUM_3DTILES_PARAMS.cullRequestsWhileMoving || false,
|
// maximumMemoryUsage: CESIUM_3DTILES_PARAMS.maximumMemoryUsage || 1024,
|
// backFaceCulling: CESIUM_3DTILES_PARAMS.backFaceCulling || false,
|
// maximumScreenSpaceError: CESIUM_3DTILES_PARAMS.maximumScreenSpaceError || 32,
|
// immediatelyLoadDesiredLevelOfDetail: CESIUM_3DTILES_PARAMS.immediatelyLoadDesiredLevelOfDetail || false,
|
// preferLeaves: CESIUM_3DTILES_PARAMS.preferLeaves || false,
|
// skipLevels: CESIUM_3DTILES_PARAMS.skipLevels || 1,
|
// skipLevelOfDetail: CESIUM_3DTILES_PARAMS.skipLevelOfDetail || true,
|
// },
|
// {
|
// groundCenter: treeNode.Center,
|
// groundheight: treeNode.modelHeight,
|
// colors: treeNode.alpha
|
// ? "rgba(255,255,255," + treeNode.alpha + ")"
|
// : treeNode.color || undefined,
|
// },
|
// pID,
|
// treeNode.checked,
|
// (data) => {
|
// //this.$store.commit("modelUpdate", data);
|
// }
|
// );
|
// treeNode.id = layer.treeobj.id;
|
break;
|
case "ob3dm":
|
let tiles = new Cesium.Cesium3DTileset({
|
url: treeNode.urls,
|
dynamicScreenSpaceError: true,
|
dynamicScreenSpaceErrorDensity: 0.0001,
|
dynamicScreenSpaceErrorFactor: 4,
|
dynamicScreenSpaceErrorHeightFalloff: 0.25
|
// maximumNumberOfLoadedTiles: 1000, // Temporary workaround for low memory mobile devices - Decrease (disable) tile cache.
|
// preloadWhenHidden: true,
|
// cullRequestsWhileMoving: false,
|
// maximumMemoryUsage: 512,
|
// maximumScreenSpaceError: 128,
|
// preferLeaves: true,
|
// skipLevels: 2,
|
// skipLevelOfDetail: true,
|
// preferLeaves: true,
|
})
|
layer = sgworld._Viewer.scene.primitives.add(tiles);
|
//sgworld._Viewer.flyTo(buildingTileset);
|
|
|
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,
|
},
|
pID,
|
treeNode.name,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
case "s3m":
|
layer = sgworld.Creator.createS3MLayer(
|
treeNode.urls,
|
sgworld._Viewer.scene,
|
function () { }
|
);
|
treeNode.item = layer;
|
break;
|
case "xyz":
|
let layerXYZ = window.Viewer.scene.imageryLayers.addImageryProvider(new Cesium.UrlTemplateImageryProvider({url: treeNode.urls}))
|
layerArr.push({layer:layerXYZ,id:treeNode.id})
|
}
|
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" || treeNode.sourceType === "ob3dm") {
|
addTreeData(treeNode, layer);
|
}
|
if (treeNode.baseLayer) {
|
layer.item.baseLayer = true;
|
}
|
},
|
},
|
mounted() { },
|
};
|
|
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 = 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;
|
}
|
</script>
|
<style lang="less">
|
.tool-panel {
|
height: 100%;
|
|
.model-layer-tree {
|
background-color: transparent;
|
width: 100%;
|
overflow-x: auto;
|
height: calc(100% - 30px);
|
}
|
|
.model-layer-tree::-webkit-scrollbar {
|
/*滚动条整体样式*/
|
width: 8px;
|
/*高宽分别对应横竖滚动条的尺寸*/
|
height: 5px;
|
}
|
|
.model-layer-tree::-webkit-scrollbar-thumb {
|
/*滚动条里面小方块*/
|
border-radius: 5px;
|
background-color: skyblue;
|
background-image: -webkit-linear-gradient(45deg,
|
rgba(255, 255, 255, 0.2) 25%,
|
transparent 25%,
|
transparent 50%,
|
rgba(255, 255, 255, 0.2) 50%,
|
rgba(255, 255, 255, 0.2) 75%,
|
transparent 75%,
|
transparent);
|
}
|
|
.model-layer-tree::-webkit-scrollbar-track {
|
/*滚动条里面轨道*/
|
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
|
background: transparent;
|
border-radius: 5px;
|
}
|
|
.el-input__inner {
|
-webkit-appearance: none;
|
background-color: transparent;
|
background-image: none;
|
border: 1px solid #bfbfbf;
|
box-sizing: border-box;
|
display: inline-block;
|
font-size: inherit;
|
line-height: 40px;
|
color: #e7e7e7;
|
outline: 0;
|
padding: 0 15px;
|
transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
|
width: 100%;
|
}
|
|
.el-icon-search {
|
color: #e7e7e7;
|
}
|
|
.font_color {
|
color: #e7e7e7;
|
}
|
|
.lyrCtrl-header {
|
height: 18px;
|
padding: 5px;
|
background: #ffffff90;
|
color: rgb(0, 0, 0);
|
}
|
|
.el-tree-node .is-current>.el-tree-node__content {
|
background-color: rgba(147, 147, 147, 0.6) !important;
|
}
|
|
.el-tree-node:focus>.el-tree-node__content {
|
background-color: rgba(147, 147, 147, 0.6) !important;
|
}
|
|
.el-tree-node :nth-child(2) {
|
padding: 1px;
|
overflow: visible;
|
}
|
|
.el-tree-node__content {
|
&:hover {
|
// background: #89c2f7;
|
background: rgba(102, 102, 102, 0.6);
|
}
|
}
|
|
// .scroll-bar::-webkit-scrollbar {
|
// /*滚动条整体样式*/
|
// width: 10px;
|
// /*高宽分别对应横竖滚动条的尺寸*/
|
// height: 1px;
|
// }
|
|
// .scroll-bar::-webkit-scrollbar-thumb {
|
// /*滚动条里面小方块*/
|
// border-radius: 1px;
|
// background-color: rgb(173, 173, 173);
|
// background-image: -webkit-linear-gradient(45deg,
|
// rgba(172, 172, 172, 0.2) 25%,
|
// transparent 25%,
|
// transparent 50%,
|
// rgba(172, 172, 172, 0.2) 50%,
|
// rgba(172, 172, 172, 0.2) 75%,
|
// transparent 75%,
|
// transparent);
|
// }
|
|
// .scroll-bar::-webkit-scrollbar-track {
|
// /*滚动条里面轨道*/
|
// box-shadow: inset 0 0 5px rgba(162, 162, 162, 0.2);
|
// background: #9d9d9d60;
|
// border-radius: 1px;
|
// }
|
}
|
</style>
|