<template>
|
<div class="bot" v-if="showsituation">
|
<div class="top1">
|
<span class="botcon">
|
<span class="icon"></span>
|
<span class="text">资源目录</span>
|
</span>
|
<span class="close" @click="close">x</span>
|
</div>
|
<div class="next">
|
<div class="layerTreeContainer">
|
<div class="layerTree">
|
<el-tree
|
:data="treeData"
|
node-key="id"
|
ref="tree"
|
:default-checked-keys="arr"
|
show-checkbox
|
:render-content="renderContent"
|
:default-expanded-keys="defaultExpanded"
|
@check="check"
|
>
|
</el-tree>
|
</div>
|
</div>
|
</div>
|
</div>
|
|
<!-- <div class="bot" v-if="showsituation">
|
<div class="top1">
|
<span class="botcon">
|
<span class="icon"></span>
|
<span class="text">资源目录</span>
|
</span>
|
<span class="close" @click="close">x</span>
|
</div>
|
|
</div> -->
|
</template>
|
|
<script>
|
import { createPic, freqBandAnalysis, showCQ } from "../../api/http";
|
import changePic from "../common/color.vue";
|
import bus from "../../utils/bus";
|
import axios from "axios";
|
|
import common from "@/components/common";
|
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;
|
}
|
|
// 根据样式文件 转为样式
|
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;
|
}
|
let hander, divPoint3;
|
let Base64 = require("js-base64").Base64;
|
export default {
|
components: {
|
changePic,
|
},
|
data() {
|
return {
|
alldisabled: [],
|
defaultExpanded: [],
|
arr: [], //用来保存资源目录中默认选中的节点id
|
SmartEarthToken: undefined,
|
treeData: [],
|
defaultCheck: [],
|
form: {
|
points: "",
|
startTime: new Date("2016-06-01"),
|
endTime: new Date("2016-06-30"),
|
radio: "调频广播",
|
freqStart: "87",
|
freqEnd: "108",
|
analysisType: "频点",
|
},
|
nowfile: "",
|
showsituation: false,
|
imageid: null,
|
showpic: false,
|
pickerOptions: {},
|
chooseplase: "",
|
options: [],
|
regions: [],
|
radios: [],
|
colorContainer: {},
|
innerbac: {
|
width: "30%",
|
height: "70%",
|
border: "1px solid #000",
|
transform: "translate(40px,90px)",
|
backgroundImage:
|
"url(" + require("@/assets/image/botbtn/color.png") + ")",
|
backgroundPosition: "center",
|
backgroundSize: ` 100% 100%`,
|
},
|
showdata1: true,
|
showdata2: true,
|
showDianci: false,
|
};
|
},
|
mounted() {
|
window.ProjectTree = this.$refs.tree;
|
//获取token并请求加载图层数据
|
this.SmartEarthToken = common.smartearthtoken;
|
|
this.$nextTick(() => {
|
bus.$on("clearEve", (e) => {
|
this.reset();
|
});
|
bus.$on("radioData", (e) => {
|
this.radios = e;
|
});
|
bus.$on("guanzhou", (e) => {
|
this.form.startTime = e.fromdate;
|
this.form.endTime = e.todate;
|
});
|
bus.$on("areaData", (e) => {
|
this.regions = e;
|
});
|
bus.$on("showdio", (e) => {
|
this.showsituation = e == "7-1";
|
this.showdata1 = true;
|
this.showdata2 = true;
|
});
|
axios.get("./static/layers.json").then(
|
(response) => {
|
console.log(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.expanded) {
|
this.defaultExpanded.push(element.id);
|
}
|
if (element.children == undefined || element.children.length == 0) {
|
if (element._children == undefined || element._children.length == 0) {
|
if (element.checked) {
|
this.arr.push(element.id);
|
}
|
if (element.urls == undefined || element.urls == "") {
|
element.disabled = true;
|
count++;
|
}
|
} else {
|
this.parseJson(element._children);
|
}
|
} else {
|
this.parseJson(element.children);
|
}
|
}
|
if (count !== 0) {
|
// 添加含有disabled属性的节点数组,
|
this.alldisabled.push(jsonObj);
|
}
|
},
|
|
async setDefaultCheck(node) {
|
this.ergodicNode(node);
|
// this.$refs.tree.setCheckedKeys(this.defaultCheck);
|
// setTimeout(()=>{
|
// this.$refs.tree.setCheckedKeys(['tc3857']);
|
// },1000)
|
},
|
ergodicNode(node) {
|
if (node.expanded) {
|
this.defaultExpanded.push(node.id);
|
}
|
if (node.checked && !node.children) {
|
this.defaultCheck.push(node.id);
|
if (!node.isAdd) {
|
if (node._children) {
|
if (node.thisView) {
|
if (node._children[0].children) {
|
node._children[0].children.forEach((item) => {
|
this.addTreeData(item);
|
});
|
} else {
|
this.addTreeData(node._children[0]);
|
}
|
} else {
|
node._children.forEach((item) => {
|
this.addTreeData(item);
|
});
|
}
|
} else {
|
this.addTreeData(node);
|
}
|
}
|
}
|
if (node.children && node.children.length) {
|
node.children.forEach((item) => {
|
this.ergodicNode(item);
|
});
|
}
|
},
|
checkChange(treeNode, b1, b2) {
|
if (!treeNode.children && !treeNode._children) {
|
var checkedKeys = this.$refs.tree.getCheckedKeys();
|
let isCheck = checkedKeys.indexOf(treeNode.id) > -1;
|
this.setVisiable(treeNode, isCheck);
|
}
|
},
|
setChecked(id) {
|
var checkedKeys = this.$refs.tree.getCheckedKeys();
|
let isCheck = checkedKeys.indexOf(id) > -1;
|
let treeNode = this.$refs.tree.getNode(id);
|
if (treeNode && treeNode.data) {
|
this.setVisiable(treeNode.data, isCheck);
|
}
|
},
|
check(treeNode, data) {
|
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) => {
|
sgworld.ProjectTree.setVisibility(item, treeNode.checked);
|
});
|
} else {
|
sgworld.ProjectTree.setVisibility(treeNode.id, treeNode.checked);
|
|
var dd = Viewer.dataSources._dataSources.filter((item) => {
|
return item.name == treeNode.id;
|
});
|
if (dd && dd.length > 0) {
|
dd[0].show = treeNode.checked;
|
}
|
}
|
}
|
},
|
props(data) {
|
if (data.class === "imageLayer") {
|
window.treeObj = {
|
rightClickData: data,
|
};
|
layerOpen("影像", {
|
width: 320,
|
height: 310,
|
url: "./static/html/layerProp.html",
|
fn: {
|
end: function () {},
|
},
|
});
|
} else if (data._children) {
|
if (data.thisView === "ewzj") {
|
data.thisView = "swzj";
|
data.name = "三维注记";
|
data._children[0].checked = false;
|
for (let i = 1; i < data._children.length; i++) {
|
data._children[i].checked = data.checked;
|
}
|
data._children.forEach((item) => {
|
if (item.children) {
|
item.children.forEach((_item) => {
|
_item.checked = item.checked;
|
this.addTreeData(_item);
|
});
|
} else {
|
this.addTreeData(item);
|
}
|
});
|
} else if (data.thisView === "swzj") {
|
data.thisView = "ewzj";
|
data.name = "二维注记";
|
data._children[0].checked = data.checked;
|
for (let i = 1; i < data._children.length; i++) {
|
data._children[i].checked = false;
|
}
|
data._children.forEach((item) => {
|
if (item.children) {
|
item.children.forEach((_item) => {
|
_item.checked = item.checked;
|
this.addTreeData(_item);
|
});
|
} else {
|
this.addTreeData(item);
|
}
|
});
|
}
|
}
|
},
|
flyTo(treeNode) {
|
if (treeNode.children) return;
|
if (treeNode._children && treeNode._children[0]) {
|
this.flyTo(treeNode._children[0]);
|
return;
|
}
|
if (treeNode && treeNode.flyTo) {
|
if (treeNode && treeNode.flyTo.length === 3) {
|
sgworld.Navigate.flyToPosition(
|
treeNode.flyTo[0],
|
treeNode.flyTo[1],
|
treeNode.flyTo[2]
|
);
|
} else if (treeNode && treeNode.flyTo.length === 4) {
|
sgworld.Navigate.flyToPointsInterest({
|
destination: Cesium.Rectangle.fromDegrees(
|
treeNode.flyTo[0],
|
treeNode.flyTo[1],
|
treeNode.flyTo[2],
|
treeNode.flyTo[3]
|
),
|
});
|
} else {
|
sgworld.Navigate.flyToPointsInterest({
|
destination: Cesium.Cartesian3.fromDegrees(
|
treeNode.flyTo[0],
|
treeNode.flyTo[1],
|
treeNode.flyTo[2]
|
),
|
orientation: {
|
heading: treeNode.flyTo[3],
|
pitch: treeNode.flyTo[4],
|
roll: treeNode.flyTo[5],
|
},
|
});
|
}
|
return;
|
}
|
let data = sgworld.ProjectTree.getObject(treeNode.id);
|
data && data.item
|
? sgworld.Navigate.flyToObj(data.item)
|
: sgworld.Navigate.flyToObj(data);
|
if (data && data.datatype === "editEntity") {
|
data && data.item && sgworld.Navigate.flyToObj(data.item[data.type]);
|
}
|
},
|
renderContent(h, { node, data, store }) {
|
if (data.icon) {
|
return (
|
<span class="custom-tree-node" on-dblclick={() => this.flyTo(data)}>
|
<span class="typeIcon">
|
<img src={data.icon} />
|
</span>
|
<span class="treeName">{data.name}</span>
|
</span>
|
);
|
} else {
|
return (
|
<span class="custom-tree-node" on-dblclick={() => this.flyTo(data)}>
|
<span class="treeName">{data.name}</span>
|
</span>
|
);
|
}
|
},
|
async addTreeData(treeNode) {
|
// if (treeNode.disabled) return;
|
let _data = sgworld.ProjectTree.getObject(treeNode.id);
|
let pID = 0;
|
|
if (_data) {
|
sgworld.ProjectTree.setVisibility(treeNode.id, treeNode.checked);
|
return;
|
} else {
|
_data = _getTreeData(treeNode.id);
|
if (_data) {
|
_data.item &&
|
_data.item.setVisibility &&
|
_data.item.setVisibility(treeNode.checked);
|
_data.item &&
|
_data.item.setVisible &&
|
_data.item.setVisible(treeNode.checked);
|
_data.item &&
|
_data.item.show !== undefined &&
|
(_data.item.show = treeNode.checked);
|
if (_data.datatype === "particle") {
|
_data.item.forEach((item) => {
|
item.show = treeNode.checked;
|
});
|
}
|
return;
|
}
|
}
|
if (!treeNode.urls || treeNode.isAdd) return;
|
treeNode.isAdd = true;
|
|
let layer;
|
treeNode.token &&
|
treeNode.token === "SmartEarthToken" &&
|
(treeNode.token = this.SmartEarthToken);
|
switch (treeNode.sourceType) {
|
case "tms":
|
layer = sgworld.Creator.createImageryProvider(
|
treeNode.name,
|
"tms",
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
fileExtension: treeNode.img || "png",
|
enablePickFeatures: false,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
undefined,
|
true,
|
""
|
);
|
|
break;
|
case "local-map":
|
// 添加本地地图
|
if (treeNode.tms) {
|
layer = sgworld.Creator.createImageryProvider(
|
treeNode.name,
|
"tms",
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
fileExtension: treeNode.img || "png",
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
tilingScheme:
|
treeNode.tileType === "Geo"
|
? new Cesium.GeographicTilingScheme()
|
: new Cesium.WebMercatorTilingScheme(),
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
} else {
|
layer = sgworld.Creator.createUrlTemplateImageryProvider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: `${treeNode.urls}/${treeNode.tile || "{z}/{x}/{y}"}.${
|
treeNode.img || "png"
|
}`,
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
tilingScheme:
|
treeNode.tileType === "Geo"
|
? new Cesium.GeographicTilingScheme()
|
: new Cesium.WebMercatorTilingScheme(),
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
}
|
break;
|
case "kml":
|
// 添加kml数据
|
layer = sgworld.Creator.addKmlLayer(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
},
|
true
|
);
|
break;
|
case "google":
|
// 添加谷歌地图
|
layer = sgworld.Creator.createUrlTemplateImageryProvider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "arcgis":
|
// arcgis地图
|
layer = sgworld.Creator.createArcGisImageryLayer(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
usePreCachedTilesIfAvailable: treeNode.GCJ02 ? false : true, // 是否使用服务的内置的切片方案,偏移纠正需要使用如下自定义的方案
|
tilingScheme: treeNode.GCJ02
|
? sgworld.Core.getOffsetTilingScheme()
|
: undefined, // 偏移纠正
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "mapbox":
|
// mapbox地图
|
layer = sgworld.Creator.createImageryProvider(
|
treeNode.name,
|
"MapBox",
|
{
|
id: treeNode.id,
|
name: treeNode.name,
|
level: treeNode.Level,
|
enablePickFeatures: false,
|
mapId: treeNode.mapId,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
alpha: treeNode.alpha,
|
accessToken:
|
treeNode.token ||
|
"pk.eyJ1IjoibWFyc2dpcyIsImEiOiJja2Fod2xlanIwNjJzMnhvMXBkMnNqcjVpIn0.WnxikCaN2KV_zn9tLZO77A",
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "tdmap":
|
// 天地图
|
layer = sgworld.Creator.createWebMapTileServerImageLayer(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: 18,
|
style: treeNode.style,
|
layer: treeNode.layer,
|
format: treeNode.format,
|
enablePickFeatures: false,
|
tileMatrixSetID: "tiff",
|
show: true,
|
subdomains: ["t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"],
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "tdt_label":
|
// 天地图三维注记
|
layer = sgworld.Creator.GeoWTFS({
|
token: treeNode.token || "c53eb074c3fcba5ac86103d4d711bbe8",
|
url: treeNode.urls,
|
subdomains: ["0", "1", "2", "3", "4", "5", "6", "7"],
|
});
|
break;
|
case "txmap":
|
// 腾讯地图
|
layer = sgworld.Creator.createUrlTemplateImageryProvider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
level: treeNode.Level,
|
enablePickFeatures: false,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: 18,
|
alpha: treeNode.alpha,
|
tilingScheme: sgworld.Core.getOffsetTilingScheme(), // 偏移纠正
|
customTags: {
|
sx: (_imageryProvider, x) => {
|
return x >> 4;
|
},
|
sy: (_imageryProvider, _x, y, level) => {
|
return ((1 << level) - y) >> 4;
|
},
|
},
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "gdmap":
|
// 高德地图
|
layer = sgworld.Creator.createUrlTemplateImageryProvider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: 18,
|
tilingScheme: sgworld.Core.getOffsetTilingScheme(), // 偏移纠正
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "bdmap":
|
// 百度地图
|
layer = sgworld.Creator.createImageryProvider(
|
treeNode.name,
|
"BaiduMap",
|
{
|
id: treeNode.id,
|
level: treeNode.Level,
|
enablePickFeatures: false,
|
style: treeNode.style,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "cesiumblack":
|
// cesiumIon黑夜地图
|
layer = sgworld.Creator.createImageryProvider(
|
treeNode.name,
|
"cesiumBlack",
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
flipXY: true,
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "osm":
|
// osm地图
|
layer = sgworld.Creator.createImageryProvider(
|
treeNode.name,
|
"OpenStreetMap",
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "wmts":
|
// wmts影像
|
layer = sgworld.Creator.createWebMapTileServerImageLayer(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
level: treeNode.Level,
|
style: treeNode.style,
|
layer: treeNode.layer,
|
enablePickFeatures: false,
|
format: treeNode.format,
|
tileMatrixSetID: treeNode.srs,
|
tilingScheme:
|
treeNode.tileType === "Geo"
|
? new Cesium.GeographicTilingScheme()
|
: new Cesium.WebMercatorTilingScheme(),
|
show: true,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "gis_wmts":
|
// gisserver wmst影像
|
layer = sgworld.Creator.createUrlTemplateImageryProvider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: Cesium.buildModuleUrl(
|
treeNode.urls + "/{z}/{x}/{reverseY}.png"
|
),
|
enablePickFeatures: false,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "wmts_zj":
|
// 行列号差两倍的wmts
|
var geotil = new Cesium.GeographicTilingScheme({
|
rectangle: Cesium.Rectangle.MAX_VALUE,
|
});
|
if (treeNode.addLevel && treeNode.addLevel === 2) {
|
geotil.positionToTileXY = function (position, level, result) {
|
level > 0 && level++;
|
var rectangle = this._rectangle;
|
if (!Cesium.Rectangle.contains(rectangle, position)) {
|
// outside the bounds of the tiling scheme
|
return undefined;
|
}
|
|
var xTiles = this.getNumberOfXTilesAtLevel(level);
|
var yTiles = this.getNumberOfYTilesAtLevel(level);
|
|
var xTileWidth = rectangle.width / xTiles;
|
var yTileHeight = rectangle.height / yTiles;
|
|
var longitude = position.longitude;
|
if (rectangle.east < rectangle.west) {
|
longitude += Cesium.Math.TWO_PI;
|
}
|
|
var xTileCoordinate =
|
((longitude - rectangle.west) / xTileWidth) | 0;
|
if (xTileCoordinate >= xTiles) {
|
xTileCoordinate = xTiles - 1;
|
}
|
|
var yTileCoordinate =
|
((rectangle.north - position.latitude) / yTileHeight) | 0;
|
if (yTileCoordinate >= yTiles) {
|
yTileCoordinate = yTiles - 1;
|
}
|
|
if (!Cesium.defined(result)) {
|
return new Cesium.Cartesian2(xTileCoordinate, yTileCoordinate);
|
}
|
|
result.x = xTileCoordinate;
|
result.y = yTileCoordinate;
|
return result;
|
};
|
geotil.tileXYToRectangle = function (x, y, level, result) {
|
level > 0 && level++;
|
var rectangle = this._rectangle;
|
|
var xTiles = this.getNumberOfXTilesAtLevel(level);
|
var yTiles = this.getNumberOfYTilesAtLevel(level);
|
|
var xTileWidth = rectangle.width / xTiles;
|
var west = x * xTileWidth + rectangle.west;
|
var east = (x + 1) * xTileWidth + rectangle.west;
|
|
var yTileHeight = rectangle.height / yTiles;
|
var north = rectangle.north - y * yTileHeight;
|
var south = rectangle.north - (y + 1) * yTileHeight;
|
|
if (!Cesium.defined(result)) {
|
result = new Cesium.Rectangle(west, south, east, north);
|
}
|
|
result.west = west;
|
result.south = south;
|
result.east = east;
|
result.north = north;
|
return result;
|
};
|
}
|
layer = sgworld.Creator.createWebMapTileServerImageLayer(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
layer: treeNode.layer,
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
style: "default",
|
tileMatrixSetID: "esritilematirx",
|
format: "image/png",
|
tilingScheme: geotil,
|
addLevel: treeNode.addLevel || 1, //层级加一
|
enablePickFeatures: false,
|
show: true,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
break;
|
case "wms":
|
case "wmsc":
|
// wms数据
|
var parameters = {
|
service: "WMS",
|
format: "image/png",
|
transparent: true,
|
};
|
if (treeNode.removeNullValue) {
|
if (treeNode.nullvalue) {
|
treeNode.nullvalue = treeNode.nullvalue.replace("rgb(", "");
|
treeNode.nullvalue = treeNode.nullvalue.replace(")", "");
|
}
|
parameters.nullvalue = sgworld.Core.defaultValue(
|
treeNode.nullvalue,
|
"0,0,0"
|
);
|
parameters.nulltolerance = sgworld.Core.defaultValue(
|
treeNode.nulltolerance,
|
0
|
);
|
}
|
treeNode.token && (treeNode.urls += "?token=" + treeNode.token);
|
if (treeNode.sourceType === "wmsc") {
|
layer = sgworld.Creator.createCacheImageryProvider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
url: treeNode.urls || "",
|
layers: treeNode.layer || "",
|
level: treeNode.Level,
|
enablePickFeatures: false,
|
cacheUrl: treeNode.cacheUrl || treeNode.urls,
|
fileExtension: treeNode.fileExtension,
|
cacheMaxLevel: treeNode.cacheMaxLevel || 16,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
treeNode.checked,
|
""
|
);
|
} else {
|
layer = sgworld.Creator.createImageryProvider(
|
treeNode.name,
|
"wms",
|
{
|
id: treeNode.id,
|
url: treeNode.urls,
|
layers: treeNode.layer || "",
|
level: treeNode.Level,
|
minimumLevel: treeNode.minimumLevel,
|
maximumLevel: treeNode.maximumLevel,
|
enablePickFeatures: false,
|
parameters: parameters,
|
alpha: treeNode.alpha,
|
},
|
"0",
|
treeNode.zIndex,
|
true,
|
""
|
);
|
}
|
break;
|
|
case "wfs":
|
// wfs数据
|
layer = sgwfs.CreateWfs(treeNode.class, treeNode);
|
break;
|
case "geojson":
|
if (treeNode.class === "point") {
|
treeNode.disableDepthTestDistance === "Infinity" &&
|
(treeNode.disableDepthTestDistance = Number.POSITIVE_INFINITY);
|
|
de = {
|
id: treeNode.id,
|
fillColor: sgworld.Core.defaultValue(treeNode.color, "#ffffff"),
|
color: sgworld.Core.defaultValue(treeNode.imageColor, undefined),
|
outlineColor: sgworld.Core.defaultValue(
|
treeNode.outlineColor,
|
"#ffffff"
|
),
|
backgroundColor: sgworld.Core.defaultValue(
|
treeNode.backgroundColor,
|
"#ffffff"
|
),
|
heightReference: sgworld.Core.defaultValue(
|
treeNode.heightReference,
|
0
|
),
|
pointHeight: sgworld.Core.defaultValue(
|
treeNode.pointHeight,
|
undefined
|
),
|
near: sgworld.Core.defaultValue(treeNode.near, 0),
|
far: sgworld.Core.defaultValue(treeNode.far, 99999999999),
|
bold: treeNode.bold,
|
italic: treeNode.italic,
|
showBackground: treeNode.showBackground,
|
outlineWidth: sgworld.Core.defaultValue(treeNode.outlineWidth, 1),
|
text: treeNode.text,
|
image: treeNode.image,
|
font_size: treeNode.size,
|
font_family: sgworld.Core.defaultValue(
|
treeNode.font_family,
|
"微软雅黑"
|
),
|
disableDepthTestDistance: sgworld.Core.defaultValue(
|
treeNode.disableDepthTestDistance,
|
undefined
|
),
|
labelData: treeNode.labelData,
|
imageData: treeNode.imageData,
|
};
|
|
if (
|
treeNode.text &&
|
treeNode.image &&
|
!treeNode.labelData &&
|
!treeNode.imageData
|
) {
|
de.labelData = {
|
horizontalOrigin: Cesium.HorizontalOrigin.LEFT,
|
pixelOffset: new Cesium.Cartesian2(20, 0),
|
};
|
de.imageData = {
|
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
|
pixelOffset: new Cesium.Cartesian2(0, 0),
|
};
|
}
|
layer = sgworld.Creator.createLabelPointGeoJsonFeatureLayer(
|
treeNode.name,
|
treeNode.urls,
|
de,
|
"0",
|
treeNode.checked
|
);
|
} else if (treeNode.class === "polyline") {
|
de = {
|
id: treeNode.id,
|
layertype: "polylinelayer",
|
material: sgworld.Core.defaultValue(treeNode.color, "#ffffff"),
|
outlineColor: sgworld.Core.defaultValue(
|
treeNode.outlineColor,
|
"#ffffff"
|
),
|
outlineWidth: sgworld.Core.defaultValue(treeNode.outlineWidth, 0),
|
height: sgworld.Core.defaultValue(treeNode.height, undefined),
|
width: sgworld.Core.defaultValue(treeNode.width, 2),
|
clampToGround: sgworld.Core.defaultValue(
|
treeNode.clampToGround,
|
true
|
),
|
classificationType: treeNode.classificationType,
|
dash: sgworld.Core.defaultValue(treeNode.dash, false),
|
dashLength: sgworld.Core.defaultValue(treeNode.dashLength, 20),
|
gapColor: sgworld.Core.defaultValue(
|
treeNode.gapColor,
|
"rgba(0,0,0,0)"
|
),
|
near: sgworld.Core.defaultValue(treeNode.near, 0),
|
far: sgworld.Core.defaultValue(treeNode.far, Infinity),
|
};
|
|
layer = sgworld.Creator.createPolylineGeoJsonFeatureLayer(
|
treeNode.name,
|
treeNode.urls,
|
de,
|
"0",
|
treeNode.checked
|
);
|
} else if (treeNode.class === "polylineVolume") {
|
de = {
|
id: treeNode.id,
|
material: sgworld.Core.defaultValue(treeNode.color, "#ff0000"),
|
slttype: "0",
|
number: "4",
|
exradius: "1",
|
inradius: "1",
|
orth_width: "2",
|
orth_height: "2",
|
radius: sgworld.Core.defaultValue(treeNode.radius, 5),
|
cornerType: "0",
|
heightReference: "0",
|
height: sgworld.Core.defaultValue(treeNode.lineHeight, 0),
|
near: "0",
|
far: "99999999999",
|
radiusScale: treeNode.radiusScale,
|
connect: true,
|
};
|
layer = sgworld.Creator.createpolylineVolumeGeojsonPrimitiveLayer(
|
treeNode.name,
|
treeNode.urls,
|
de,
|
"0",
|
true,
|
function (data) {
|
if (treeNode.flow) {
|
let lines = data.entities.values;
|
lines.forEach((line) => {
|
line.polylineVolume.material =
|
sgworld.Core.getTrailLinkMaterial(
|
sgworld.Core.defaultValue(treeNode.color, "#ff0000"),
|
"../static/images/smoke.png",
|
9000
|
);
|
});
|
}
|
}
|
);
|
} else if (treeNode.class === "model") {
|
de = {
|
id: treeNode.id,
|
collect: 0,
|
uri: sgworld.Core.defaultValue(treeNode.model, ""),
|
file: "",
|
color: sgworld.Core.defaultValue(treeNode.color, "#ffffff"),
|
scale: sgworld.Core.defaultValue(treeNode.scale, 1),
|
heightReference: 0,
|
height: sgworld.Core.defaultValue(treeNode.height, 0),
|
near: "0",
|
far: "99999999999",
|
};
|
layer = sgworld.Creator.createModelPointGeoJsonFeatureLayer(
|
treeNode.name,
|
treeNode.urls,
|
de,
|
"0",
|
true
|
);
|
} else if (treeNode.class === "polygon") {
|
treeNode.disableDepthTestDistance === "Infinity" &&
|
(treeNode.disableDepthTestDistance = Number.POSITIVE_INFINITY);
|
|
de = {
|
id: treeNode.id,
|
material: sgworld.Core.defaultValue(treeNode.color, "#ff0000"),
|
height: sgworld.Core.defaultValue(treeNode.height, 0),
|
outlineColor: sgworld.Core.defaultValue(
|
treeNode.outlineColor,
|
"#ff0000"
|
),
|
extrudedHeight: sgworld.Core.defaultValue(
|
treeNode.extrudedHeight,
|
0
|
),
|
outlineWidth: sgworld.Core.defaultValue(treeNode.outlineWidth, 0),
|
outline: sgworld.Core.defaultValue(treeNode.outline, true),
|
clampToGround: sgworld.Core.defaultValue(
|
treeNode.clampToGround,
|
treeNode.extrudedHeight === undefined &&
|
treeNode.height === undefined
|
),
|
classificationType: treeNode.classificationType,
|
near: sgworld.Core.defaultValue(treeNode.near, 0),
|
far: sgworld.Core.defaultValue(treeNode.far, Infinity),
|
|
text: treeNode.text,
|
font: sgworld.Core.defaultValue(treeNode.font, "微软雅黑"),
|
labelNear: treeNode.labelNear,
|
labelFar: treeNode.labelFar,
|
fontSize: sgworld.Core.defaultValue(treeNode.size, "18px"),
|
italic: treeNode.italic,
|
bold: treeNode.bold,
|
pixelOffset: new Cesium.Cartesian2(
|
sgworld.Core.defaultValue(treeNode.offsetX, 0),
|
sgworld.Core.defaultValue(treeNode.offsetY, 0)
|
),
|
labelOutlineWidth: 2,
|
disableDepthTestDistance: treeNode.disableDepthTestDistance,
|
|
water: treeNode.water,
|
};
|
layer = sgworld.Creator.createPolygonGeoJsonFeatureLayer(
|
treeNode.name,
|
treeNode.urls,
|
de,
|
"0",
|
treeNode.checked
|
);
|
}
|
break;
|
case "pathLayer":
|
layer = sgworld.Creator.createPathLayer({
|
id: treeNode.id,
|
url: treeNode.url,
|
color: treeNode.color || "#0033FF", //线的颜色
|
width: treeNode.width || 4.0, //线的宽度
|
pointColor: treeNode.pointColor || "#FFFFFF", //移动点的颜色
|
speed: treeNode.speed || 5,
|
far: treeNode.far || 5000,
|
});
|
break;
|
case "vector": {
|
let urls = {
|
url: treeNode.urls,
|
layer: treeNode.layer,
|
srs: treeNode.srs,
|
};
|
if (
|
treeNode.class === "point" ||
|
treeNode.class === "label" ||
|
treeNode.class === "image"
|
) {
|
treeNode.disableDepthTestDistance === "Infinity" &&
|
(treeNode.disableDepthTestDistance = Number.POSITIVE_INFINITY);
|
if (treeNode.style) {
|
// de = getVectorStyleFromSG(treeNode, treeNode.style);
|
} else {
|
de = {
|
id: treeNode.id,
|
level_min: sgworld.Core.defaultValue(treeNode.minimumLevel, 10),
|
level_max: sgworld.Core.defaultValue(treeNode.maximumLevel, 22),
|
fillColor: sgworld.Core.defaultValue(treeNode.color, "#ffffff"),
|
color: sgworld.Core.defaultValue(
|
treeNode.imageColor,
|
undefined
|
),
|
outlineColor: sgworld.Core.defaultValue(
|
treeNode.outlineColor,
|
"#ffffff"
|
),
|
backgroundColor: sgworld.Core.defaultValue(
|
treeNode.backgroundColor,
|
"#ffffff"
|
),
|
heightReference: sgworld.Core.defaultValue(
|
treeNode.heightReference,
|
0
|
),
|
pointHeight: sgworld.Core.defaultValue(
|
treeNode.pointHeight,
|
undefined
|
),
|
near: sgworld.Core.defaultValue(treeNode.near, 0),
|
far: sgworld.Core.defaultValue(treeNode.far, 99999999999),
|
bold: treeNode.bold,
|
italic: treeNode.italic,
|
showBackground: treeNode.showBackground,
|
outlineWidth: sgworld.Core.defaultValue(
|
treeNode.outlineWidth,
|
1
|
),
|
text: treeNode.text,
|
image: treeNode.image,
|
font_size: treeNode.size,
|
font_family: sgworld.Core.defaultValue(
|
treeNode.font_family,
|
"微软雅黑"
|
),
|
disableDepthTestDistance: sgworld.Core.defaultValue(
|
treeNode.disableDepthTestDistance,
|
undefined
|
),
|
labelData: treeNode.labelData,
|
imageData: treeNode.imageData,
|
};
|
}
|
|
if (
|
treeNode.text &&
|
treeNode.image &&
|
!treeNode.labelData &&
|
!treeNode.imageData
|
) {
|
de.labelData = {
|
horizontalOrigin: Cesium.HorizontalOrigin.LEFT,
|
pixelOffset: new Cesium.Cartesian2(20, 0),
|
};
|
de.imageData = {
|
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
|
pixelOffset: new Cesium.Cartesian2(0, 0),
|
};
|
}
|
urls.upperLevelLimit = de.level_max;
|
urls.lowerLevelLimit = de.level_min;
|
layer = sgworld.Creator.createLabelImageGeoJsonFeatureLayerProvider(
|
treeNode.name,
|
urls,
|
de,
|
"0",
|
treeNode.checked,
|
function () {}
|
);
|
} else if (treeNode.class === "polylineVolume") {
|
de = {
|
id: treeNode.id,
|
level_min: sgworld.Core.defaultValue(treeNode.minimumLevel, 10),
|
level_max: sgworld.Core.defaultValue(treeNode.maximumLevel, 22),
|
material: sgworld.Core.defaultValue(treeNode.color, "#ff0000"),
|
slttype: "0",
|
number: "4",
|
exradius: "1",
|
inradius: "1",
|
orth_width: "2",
|
orth_height: "2",
|
radius: sgworld.Core.defaultValue(treeNode.radius, 0.5),
|
cornerType: "0",
|
heightReference: "0",
|
height: sgworld.Core.defaultValue(treeNode.height, 0),
|
near: sgworld.Core.defaultValue(treeNode.near, 0),
|
far: sgworld.Core.defaultValue(treeNode.far, 99999999999),
|
radiusScale: treeNode.radiusScale,
|
};
|
urls.upperLevelLimit = de.level_max;
|
urls.lowerLevelLimit = de.level_min;
|
layer = sgworld.Creator.createVolumeGeoJsonFeatureLayerProvider(
|
treeNode.name,
|
urls,
|
de,
|
"0",
|
treeNode.checked,
|
function () {}
|
);
|
} else if (treeNode.class === "polyline") {
|
de = {
|
id: treeNode.id,
|
layertype: "polylinelayer",
|
level_min: sgworld.Core.defaultValue(treeNode.minimumLevel, 10),
|
level_max: sgworld.Core.defaultValue(treeNode.maximumLevel, 22),
|
material: sgworld.Core.defaultValue(treeNode.color, "#ffffff"),
|
outlineColor: sgworld.Core.defaultValue(
|
treeNode.outlineColor,
|
"#ffffff"
|
),
|
outlineWidth: sgworld.Core.defaultValue(treeNode.outlineWidth, 0),
|
height: sgworld.Core.defaultValue(treeNode.height, undefined),
|
width: sgworld.Core.defaultValue(treeNode.width, 2),
|
clampToGround: sgworld.Core.defaultValue(
|
treeNode.clampToGround,
|
true
|
),
|
classificationType: treeNode.classificationType,
|
dash: sgworld.Core.defaultValue(treeNode.dash, false),
|
dashLength: sgworld.Core.defaultValue(treeNode.dashLength, 20),
|
gapColor: sgworld.Core.defaultValue(
|
treeNode.gapColor,
|
"rgba(0,0,0,0)"
|
),
|
near: sgworld.Core.defaultValue(treeNode.near, 0),
|
far: sgworld.Core.defaultValue(treeNode.far, Infinity),
|
};
|
urls.upperLevelLimit = de.level_max;
|
urls.lowerLevelLimit = de.level_min;
|
|
layer =
|
sgworld.Creator.createPrimitivePolylineVectorGeoJsonFeatureLayerProvider(
|
treeNode.name,
|
urls,
|
de,
|
"0",
|
treeNode.checked,
|
function () {}
|
);
|
} else if (treeNode.class === "polygon") {
|
de = {
|
id: treeNode.id,
|
layertype: "polygonlayer",
|
level_min: sgworld.Core.defaultValue(treeNode.minimumLevel, 10),
|
level_max: sgworld.Core.defaultValue(treeNode.maximumLevel, 22),
|
material: sgworld.Core.defaultValue(treeNode.color, "#ff0000"),
|
heightReference: "1",
|
height: sgworld.Core.defaultValue(treeNode.height, 0),
|
extrudedHeight: sgworld.Core.defaultValue(
|
treeNode.extrudedHeight,
|
0
|
),
|
extrudedHeightReference: "1",
|
clampToGround: sgworld.Core.defaultValue(
|
treeNode.clampToGround,
|
false
|
),
|
classificationType: treeNode.classificationType,
|
near: sgworld.Core.defaultValue(treeNode.near, 0),
|
far: sgworld.Core.defaultValue(treeNode.far, Infinity),
|
};
|
urls.upperLevelLimit = de.level_max;
|
urls.lowerLevelLimit = de.level_min;
|
layer =
|
sgworld.Creator.createGeoJsonFeatureLayerProviderOptimization(
|
treeNode.name,
|
urls,
|
de,
|
"0",
|
treeNode.checked,
|
function () {}
|
);
|
} else if (treeNode.class === "model") {
|
de = {
|
id: treeNode.id,
|
level_min: sgworld.Core.defaultValue(treeNode.minimumLevel, 10),
|
level_max: sgworld.Core.defaultValue(treeNode.maximumLevel, 22),
|
collect: 0,
|
uri: sgworld.Core.defaultValue(treeNode.model, ""),
|
file: "",
|
color: sgworld.Core.defaultValue(treeNode.color, "#ffffff"),
|
scale: sgworld.Core.defaultValue(treeNode.scale, 1),
|
heightReference: 0,
|
height: sgworld.Core.defaultValue(treeNode.height, 0),
|
near: "0",
|
far: "99999999999",
|
};
|
//模型点
|
urls.upperLevelLimit = de.level_max;
|
urls.lowerLevelLimit = de.level_min;
|
layer = sgworld.Creator.createModelGeoJsonFeatureLayerProvider(
|
treeNode.name,
|
urls,
|
de,
|
"0",
|
treeNode.checked,
|
function () {}
|
);
|
}
|
layer && (treeNode.id = layer.treeobj.id);
|
break;
|
}
|
case "terrain":
|
layer = sgworld.Creator.createTerrain(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
requestVertexNormals: true,
|
url: treeNode.urls,
|
},
|
"0",
|
true,
|
""
|
);
|
break;
|
case "sgsterrain":
|
layer = sgworld.Creator.sfsterrainprovider(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
layerName: treeNode.layer,
|
requestVertexNormals: true,
|
url: treeNode.urls || "",
|
token: treeNode.token,
|
cacheUrl: treeNode.cacheUrl,
|
cacheLevel: treeNode.cacheLevel,
|
},
|
"0",
|
true,
|
""
|
);
|
break;
|
case "sgsterrain7.1":
|
layer = sgworld.Creator.sfsterrainprovider71(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
layerName: treeNode.layer,
|
requestVertexNormals: true,
|
url: treeNode.urls,
|
token: treeNode.token,
|
cacheUrl: treeNode.cacheUrl,
|
cacheLevel: treeNode.cacheLevel,
|
},
|
"0",
|
true,
|
""
|
);
|
break;
|
case "arcgisterrain":
|
layer = sgworld.Creator.createArcGISTerrain(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
requestVertexNormals: true,
|
url: treeNode.urls,
|
},
|
"0",
|
true,
|
""
|
);
|
break;
|
case "CesiumGlobeTerrain":
|
layer = sgworld.Creator.createCesiumTerrain(
|
treeNode.name,
|
{
|
id: treeNode.id,
|
requestVertexNormals: true,
|
},
|
"0",
|
true,
|
""
|
);
|
break;
|
case "b3dm":
|
layer = sgworld.Creator.create3DTilesets(
|
treeNode.name,
|
treeNode.urls,
|
{
|
id: treeNode.id,
|
Level: treeNode.Level,
|
maximumScreenSpaceError:
|
treeNode.maximumScreenSpaceError &&
|
parseInt(treeNode.maximumScreenSpaceError),
|
maximumMemoryUsage:
|
treeNode.maximumMemoryUsage &&
|
parseInt(treeNode.maximumMemoryUsage),
|
geometricError:
|
treeNode.geometricError && parseInt(treeNode.geometricError),
|
},
|
{
|
groundCenter: treeNode.Center,
|
groundheight: treeNode.modelHeight,
|
heading: treeNode.heading,
|
pitch: treeNode.pitch,
|
roll: treeNode.roll,
|
effects: treeNode.effects || false,
|
effectsMaxHeight: treeNode.effectsMaxHeight || 150,
|
colors: treeNode.alpha
|
? "rgba(255,255,255," + treeNode.alpha + ")"
|
: treeNode.color || undefined,
|
},
|
"0",
|
true
|
);
|
break;
|
case "s3m":
|
layer = sgworld.Creator.createS3MLayer(
|
treeNode.urls,
|
sgworld._Viewer.scene,
|
function () {}
|
);
|
break;
|
case "gltf":
|
var position = [treeNode.lon, treeNode.lat, treeNode.height];
|
layer = sgworld.Creator.createModel(
|
position,
|
treeNode.urls,
|
{
|
id: treeNode.id,
|
scale: treeNode.scale || 1,
|
heading: treeNode.heading,
|
pitch: treeNode.pitch,
|
roll: treeNode.roll,
|
},
|
"0",
|
treeNode.name,
|
""
|
);
|
break;
|
case "SimpleGraphic":
|
treeNode.type = treeNode.class;
|
layer = sgworld.Creator.SimpleGraphic.addFeature(treeNode);
|
break;
|
case "videoPolygon":
|
layer = sgworld.Creator.addVideoPolygon(treeNode.positions, {
|
url: treeNode.url,
|
angle: treeNode.angle,
|
});
|
break;
|
case "MilitaryPlotting":
|
if (!treeNode.feature.id) {
|
treeNode.feature.id = treeNode.id;
|
}
|
if (!treeNode.feature.name) {
|
treeNode.feature.name = treeNode.name;
|
}
|
layer = sgworld.Creator.MilitaryPlotting.addFeature(treeNode.feature);
|
break;
|
case "ParticleEffect":
|
layer = sgworld.Analysis.createParticleEffect(
|
treeNode.name,
|
treeNode.position,
|
{
|
translation: Cesium.Cartesian3.fromElements(0, 0, 0), //平移
|
}
|
);
|
layer.name = treeNode.name;
|
break;
|
case "FlowField":
|
layer = sgworld.Creator.createTrailLine(
|
treeNode.positions,
|
treeNode.style
|
);
|
layer.boundingSphere = Cesium.BoundingSphere.fromPoints(
|
treeNode.positions
|
);
|
|
break;
|
case "MobileWall":
|
layer = sgworld.Creator.createTrailLineWall(
|
treeNode.LineInterpolation.positions,
|
treeNode.style
|
);
|
layer.boundingSphere = Cesium.BoundingSphere.fromPoints(
|
treeNode.LineInterpolation.positions
|
);
|
break;
|
case "link":
|
layer = sgworld.Creator.createLinkPro(
|
sgworld.Core.toDegrees(treeNode.posisitons[0]),
|
sgworld.Core.toDegrees(treeNode.posisitons[1]),
|
{
|
clampToGround: true,
|
}
|
);
|
break;
|
case "DiffusionSource":
|
layer = sgworld.Analysis.createMultiCircleScan(
|
treeNode.position,
|
treeNode.maxRadius,
|
treeNode.maxRadius.color,
|
3000,
|
true
|
);
|
break;
|
case "RiskDiffusion":
|
case "CircularDiffusion":
|
layer = sgworld.Analysis.createCircleScan(
|
treeNode.position,
|
treeNode.maxRadius,
|
treeNode.color,
|
3000,
|
true
|
);
|
break;
|
case "FanDiffusion":
|
layer = sgworld.Analysis.createSectorScan(
|
treeNode.position,
|
treeNode.distance,
|
"#ff0000",
|
60,
|
treeNode.angle,
|
true,
|
4000,
|
true
|
);
|
break;
|
case "RadarMask":
|
layer = sgworld.Creator.createRectangularSensor(
|
treeNode.position,
|
treeNode.cylinder
|
);
|
break;
|
case "DynamicSatellite":
|
let dtwxzsData = sgworld.Creator.createConeRadar(treeNode.position, {
|
color: "#7b9ef7",
|
radius: 200000,
|
});
|
let weixin = sgworld.Creator.createModel(
|
treeNode.position,
|
window.SmartEarthRootUrl + "Workers/Model/weixin.gltf",
|
{ scale: 15 },
|
"0",
|
"卫星"
|
);
|
layer = { dtwxzsData, weixin };
|
layer.sourceType = "DynamicSatellite";
|
break;
|
case "excavate":
|
var position = [treeNode.lon, treeNode.lat, treeNode.height];
|
layer = sgworld.Creator.createModel(
|
position,
|
treeNode.urls,
|
{
|
id: treeNode.id,
|
scale: treeNode.scale || 1,
|
},
|
pID,
|
treeNode.name,
|
""
|
);
|
treeNode.id = layer.treeobj.id;
|
break;
|
}
|
if (treeNode.sourceType !== "gltf" && (treeNode.lon || treeNode.lat)) {
|
treeNode.flyTo = [
|
treeNode.lon,
|
treeNode.lat,
|
defaultValue(treeNode.height, 10000),
|
];
|
}
|
if (treeNode.minx && treeNode.miny && treeNode.maxx && treeNode.maxy) {
|
treeNode.flyTo = [
|
treeNode.minx,
|
treeNode.miny,
|
treeNode.maxx,
|
treeNode.maxy,
|
];
|
}
|
if (treeNode.sourceType === "wfs") {
|
addTreeData(treeNode, layer);
|
}
|
if (treeNode.baseLayer) {
|
layer.item.baseLayer = true;
|
}
|
},
|
changeplase(value) {
|
if (value.label.indexOf("广州") > -1) {
|
this.chooseplase = "广州";
|
this.form.startTime = new Date("2019-10-08");
|
this.form.endTime = new Date("2019-10-16");
|
window.Viewer.camera.flyTo({
|
destination: Cesium.Cartesian3.fromDegrees(
|
113.29503528791071,
|
23.104708355136264,
|
4109.8492337442767
|
),
|
orientation: {
|
heading: 0.8349372341578318,
|
pitch: -0.85222154573481174,
|
roll: 0,
|
},
|
});
|
} else {
|
this.chooseplase = "上海";
|
this.form.startTime = new Date("2016-06-01");
|
this.form.endTime = new Date("2016-06-30");
|
window.Viewer.camera.flyTo({
|
destination: Cesium.Cartesian3.fromDegrees(
|
121.23142475566037,
|
30.314431916707203,
|
101204.78027978493
|
),
|
orientation: {
|
heading: 0.149372341578318,
|
pitch: -0.8022154573481174,
|
roll: 0,
|
},
|
});
|
}
|
},
|
change() {
|
this.showdata1 = false;
|
},
|
change1() {
|
this.showdata2 = false;
|
},
|
openDia() {
|
bus.$emit("changeColor", true);
|
},
|
choose(value) {
|
let arr = value.split("-");
|
this.form.freqStart = arr[0];
|
this.form.freqEnd = arr[1];
|
},
|
close() {
|
this.showsituation = false;
|
},
|
getdata(data) {
|
this.colorContainer = data;
|
},
|
// 点击获得态势
|
getTaishi() {
|
if (hander) {
|
return;
|
}
|
hander = new Cesium.ScreenSpaceEventHandler(Viewer.scene.canvas);
|
let pickFeature;
|
// 鼠标点击事件
|
hander.setInputAction((event) => {
|
// 拾取对象
|
divPoint3 && divPoint3.deleteObject();
|
let clickPosition = viewer.scene.camera.pickEllipsoid(event.position);
|
// 转经纬度(弧度)坐标
|
let radiansPos = Cesium.Cartographic.fromCartesian(clickPosition);
|
let lon = Cesium.Math.toDegrees(radiansPos.longitude);
|
let lat = Cesium.Math.toDegrees(radiansPos.latitude);
|
let filename = this.nowfile;
|
let obj = {
|
lat: lat,
|
lng: lon,
|
analysisAction: "-1",
|
analysisType: "1",
|
filename: filename,
|
};
|
showCQ(obj).then((res) => {
|
let data = res.data;
|
if (data != "无数据") {
|
divPoint3 = sgworld.Creator.createDivPoint(
|
"合肥",
|
{ lon: obj.lng, lat: obj.lat },
|
{
|
type: "custom",
|
offset: ["c", 60],
|
description: `
|
<div class="divPoint-custom">
|
<p>${data}</p>
|
</div>
|
`,
|
near: 0,
|
far: 100000,
|
}
|
);
|
}
|
});
|
//把你拾取的东西打印出来看看什么值可以用作判断
|
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
|
},
|
analysis() {
|
this.reset();
|
let that = this;
|
if (that.imageid) {
|
window.Viewer.entities.removeById(that.imageid);
|
that.imageid = null;
|
}
|
let data = {
|
colorName: "-100,0000FF;120,FF0000",
|
startTime: "20160601000000",
|
endTime: 20160630000000,
|
freqStart: 87000000,
|
freqEnd: 108000000,
|
freqPoint: 87000000,
|
points:
|
"[[30.5504351,120.5667114],[32.0499889,120.5667114],[32.0499889,122.4453735],[30.5504351,122.4453735]]",
|
radius: 0,
|
analysisAction: "3",
|
analysisType: 1,
|
};
|
data = { ...data, ...this.form };
|
data.freqStart = data.freqStart * 1000000;
|
data.freqEnd = data.freqEnd * 1000000;
|
data.startTime = data.startTime + "000000";
|
data.endTime = data.endTime * 1000000;
|
data.analysisType == "频点" ? (data.analysisType = 1) : "";
|
delete data.radio;
|
if (this.showdata1) {
|
data.startTime = 20160601000000;
|
this.chooseplase && this.chooseplase == "上海"
|
? (data.startTime = 20160601000000)
|
: (data.startTime = 20191008000000);
|
}
|
if (this.showdata2) {
|
data.endTime = 20160630000000;
|
this.chooseplase && this.chooseplase == "上海"
|
? (data.endTime = 20160630000000)
|
: (data.endTime = 20191016000000);
|
}
|
const loading = that.$loading({
|
lock: true,
|
text: "计算中",
|
spinner: "el-icon-loading",
|
background: "rgba(0, 0, 0, 0.7)",
|
});
|
data.points = data.points.value;
|
freqBandAnalysis(data)
|
.then((res) => {
|
if (res.message === "Success") {
|
let points = res.data.imgBounds;
|
that.nowfile = Base64.encode(res.data.url);
|
var data1 = {
|
colorSchemes: 1,
|
file: Base64.encode(res.data.url),
|
maxColor: "FF0000",
|
maxValue: 100,
|
minColor: "0000FF",
|
minValue: 0,
|
showBounds: this.form.points.value,
|
};
|
data1 = { ...data1, ...this.colorContainer };
|
createPic(data1)
|
.then((res2) => {
|
let rectangle = sgworld.Creator.addSimpleGraphic("rectangle", {
|
removeEdit: true,
|
coordinates: Cesium.Rectangle.fromDegrees(
|
points.xmin,
|
points.ymin,
|
points.xmax,
|
points.ymax
|
),
|
color: "rgba(255,255,255,0.5)",
|
image:
|
"http://221.224.53.36:9081/calc/picurl?file=" +
|
Base64.encode(res2.data),
|
});
|
that.showDianci = true;
|
// 图片获取成功 开启拾取
|
that.getTaishi();
|
if (that.imageid) {
|
window.Viewer.entities.removeById(that.imageid);
|
that.imageid = null;
|
}
|
that.imageid = rectangle.id;
|
|
loading.close();
|
that.$message({
|
message: "计算成功",
|
type: "success",
|
});
|
that.showpic = true;
|
})
|
.catch((error) => {
|
loading.close();
|
});
|
}
|
})
|
.catch((error) => {
|
loading.close();
|
});
|
},
|
reset() {
|
//重置
|
if (this.imageid) {
|
window.Viewer.entities.removeById(this.imageid);
|
hander &&
|
hander.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
|
hander = null;
|
divPoint3 && divPoint3.deleteObject();
|
|
this.imageid = null;
|
this.showDianci = false;
|
}
|
},
|
},
|
watch: {
|
colorContainer: {
|
deep: true,
|
handler(data) {
|
let colornow = {
|
width: "30%",
|
height: "70%",
|
border: "1px solid #000",
|
transform: "translate(40px,90px)",
|
backgroundImage: `linear-gradient(${data.maxColor},${data.minColor})`,
|
};
|
this.innerbac = colornow;
|
},
|
},
|
},
|
};
|
</script>
|
|
<style scoped>
|
.bot {
|
width: 1000px;
|
height: 1150px;
|
background: url(~@/assets/image/test/22.png);
|
background-size: 100% 100%;
|
background-repeat: no-repeat;
|
position: absolute;
|
left: 3920px;
|
top: 680px;
|
}
|
.top1 {
|
width: 95%;
|
height: 11%;
|
font-size: 40px;
|
font-weight: bold;
|
margin: 0px auto;
|
border-bottom: 2px solid #fff;
|
color: #fff;
|
letter-spacing: 3px;
|
}
|
.icon {
|
position: absolute;
|
left: 50px;
|
width: 50px;
|
height: 50px;
|
top: 39px;
|
background-size: 100% 100% !important;
|
background-repeat: no-repeat !important;
|
background-position: center !important;
|
background: url(~@/assets/image/subject/题标.png);
|
}
|
.text {
|
display: inline-block;
|
margin-left: 90px;
|
}
|
.close {
|
position: absolute;
|
font-size: 60px;
|
font-weight: 400;
|
right: 60px;
|
top: 20px;
|
}
|
.close:hover {
|
color: red;
|
transition: color 1s;
|
cursor: pointer;
|
}
|
.next {
|
width: 89%;
|
height: 79%;
|
margin: 30px auto;
|
}
|
|
.botcon {
|
display: inline-block;
|
margin-top: 34px;
|
}
|
.btns {
|
margin-top: 100px;
|
width: 100%;
|
height: 70px;
|
display: flex;
|
justify-content: center;
|
}
|
.btns > span {
|
display: block;
|
width: 200px;
|
height: 70px;
|
border: 1px solid #000;
|
text-align: center;
|
font-size: 35px;
|
margin: 0 50px;
|
line-height: 70px;
|
cursor: pointer;
|
}
|
.btns > span:nth-child(3) {
|
color: #fff;
|
background-image: linear-gradient(#76c2f6, #6a9cf1);
|
}
|
.btns > span:nth-child(-n + 2) {
|
color: #000;
|
background: #cadaea;
|
}
|
.showpic {
|
width: 260px;
|
height: 400px;
|
background: url(~@/assets/image/botbtn/bac.png);
|
background-position: center;
|
background-size: 100% 100%;
|
position: absolute;
|
top: 1200px;
|
right: 0px;
|
}
|
.layerTreeContainer {
|
/* padding: 20px; */
|
/* background: url("../../assets/image/listbg.png") no-repeat; */
|
/* background-size: 100% 100%; */
|
/* position: absolute; */
|
/* right: 700px; */
|
/* top: 500px; */
|
width: 100%;
|
height: 100%;
|
/* margin: 20px 0; */
|
}
|
|
.layerTreeContainer .layerTree {
|
height: 100%;
|
margin-bottom: 2px;
|
overflow-y: auto;
|
overflow-x: auto;
|
}
|
|
.layerTreeContainer .el-tree {
|
background: transparent;
|
font-size: 45px;
|
color: white;
|
}
|
|
.layerTreeContainer .el-tree /deep/ .el-tree-node__content {
|
background-color: transparent !important;
|
height: auto !important;
|
}
|
|
.layerTreeContainer .el-tree /deep/ .el-tree-node__content:hover {
|
background-color: rgba(255, 255, 255, 0.4) !important;
|
}
|
|
.layerTreeContainer .el-tree /deep/ .is-current > .el-tree-node__content {
|
background-color: rgba(255, 255, 255, 0.4) !important;
|
}
|
|
.layerTreeContainer
|
.el-tree
|
/deep/
|
.is-indeterminate
|
.el-checkbox__inner:before {
|
top: 10px;
|
height: 19px;
|
width: 40px;
|
}
|
.layerTreeContainer .el-tree /deep/ .el-tree-node__expand-icon {
|
font-size: 40px;
|
}
|
.layerTreeContainer .el-tree /deep/ .el-checkbox .el-checkbox__inner {
|
width: 40px;
|
height: 40px;
|
}
|
.layerTreeContainer
|
.el-tree
|
/deep/
|
.el-checkbox__input.is-checked
|
.el-checkbox__inner:after {
|
border: 7px solid #fff;
|
border-left: 0;
|
border-top: 0;
|
height: 23px;
|
left: 11px;
|
position: absolute;
|
top: 5px;
|
width: 10px;
|
}
|
|
.layerTreeContainer
|
.el-tree
|
/deep/
|
.el-checkbox__input
|
.is-checked
|
.el-checkbox__inner {
|
background-color: #409eff;
|
}
|
|
.layerTreeContainer
|
.el-tree
|
/deep/
|
.el-checkbox__input.is-checked
|
.el-checkbox__inner {
|
border-color: #409eff;
|
}
|
</style>
|