From e59dff960b556d7ab4b888681cfb9478d4ac8ee4 Mon Sep 17 00:00:00 2001 From: lixuliang <lixuliang_hd@126.com> Date: 星期四, 18 四月 2024 19:13:27 +0800 Subject: [PATCH] 图层树 --- src/components/props/situationComparison7-1.vue | 2182 +++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 1,986 insertions(+), 196 deletions(-) diff --git a/src/components/props/situationComparison7-1.vue b/src/components/props/situationComparison7-1.vue index b5ad4f0..54fb3ba 100644 --- a/src/components/props/situationComparison7-1.vue +++ b/src/components/props/situationComparison7-1.vue @@ -1,95 +1,245 @@ <template> - <div class="bot" - v-if="showsituation"> + <div class="bot" v-if="showsituation"> <div class="top1"> <span class="botcon"> <span class="icon"></span> - <span class="text">zcTS\绛瑰垝姝ラ</span> + <span class="text">璧勬簮鐩綍</span> </span> - <span class="close" - @click="close">x</span> + <span class="close" @click="close">x</span> </div> <div class="next"> - <el-form ref="form" - :model="form" - label-width="240px"> - <el-form-item label="鍖哄煙:"> - <el-select v-model="form.points" - @change="changeplase"> - <el-option v-for="(item, index) in regions" - :key="index" - :label="item.vname" - :value="{ value: item.vlatlngs, label: item.vname }"> - </el-option> - </el-select> - </el-form-item> - <el-form-item label="璧峰鏃堕棿:"> - <el-date-picker v-model="form.startTime" - value-format="yyyyMMdd" - :picker-options="pickerOptions" - format="yyyy-MM-dd" - type="date" - placeholder="閫夋嫨鏃ユ湡" - @change="change"> - </el-date-picker> - </el-form-item> - <el-form-item label="缁撴潫鏃堕棿:"> - <el-date-picker v-model="form.endTime" - value-format="yyyyMMdd" - :picker-options="pickerOptions" - format="yyyy-MM-dd" - type="date" - placeholder="閫夋嫨鏃ユ湡" - @change="change1"> - </el-date-picker> - </el-form-item> - <el-form-item label="鍒嗘瀽绫诲瀷:"> - <el-select v-model="form.analysisType"> - <el-option label="棰戠偣" - value="1"></el-option> - <el-option label="棰戞" - value="2"></el-option> - </el-select> - </el-form-item> - <el-form-item label="鏃犵嚎鐢典笟鍔�:"> - <el-select v-model="form.radio" - @change="choose"> - <el-option v-for="item in radios" - :key="item.value" - :label="item.bussName" - :value="item.startFreq + '-' + item.endFreq"> - </el-option> - </el-select> - </el-form-item> - </el-form> - <div class="btns"> - <span @click="reset">閲嶇疆</span> - <span @click="analysis">鍒嗘瀽</span> + <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 class="showpic" - v-if="showpic"> - <div :style="innerbac" - @click="openDia"></div> - </div> - <changePic @colordata="getdata" /> </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 { createPic, freqBandAnalysis, showCQ } from "../../api/http"; import changePic from "../common/color.vue"; import bus from "../../utils/bus"; import axios from "axios"; -let hander,divPoint3; -let Base64=require("js-base64").Base64; +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; +} + +//瑙f瀽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 () { + data() { return { + alldisabled: [], + defaultExpanded: [], + arr: [], //鐢ㄦ潵淇濆瓨璧勬簮鐩綍涓粯璁ら�変腑鐨勮妭鐐筰d + SmartEarthToken: undefined, + treeData: [], + defaultCheck: [], form: { points: "", startTime: new Date("2016-06-01"), @@ -115,7 +265,7 @@ border: "1px solid #000", transform: "translate(40px,90px)", backgroundImage: - "url("+require("@/assets/image/botbtn/color.png")+")", + "url(" + require("@/assets/image/botbtn/color.png") + ")", backgroundPosition: "center", backgroundSize: ` 100% 100%`, }, @@ -124,32 +274,1608 @@ showDianci: false, }; }, - mounted () { - 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; + 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: { - 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"); + // yhadd + closeJm() { + this.$parent.$parent.$parent.isShowResMenu = false; + }, + + // 閫掑綊閬嶅巻json锛屽緱鍒癱hecked:true鐨勬暟鎹殑id锛屾坊鍔犲埌arr涓� + parseJson(jsonObj) { + // 澹版槑鍙橀噺count锛岃褰昫isabled瀛樺湪鐨勮妭鐐圭殑鍏ㄩ儴鏁版嵁 + 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, // 鏄惁浣跨敤鏈嶅姟鐨勫唴缃殑鍒囩墖鏂规锛屽亸绉荤籂姝i渶瑕佷娇鐢ㄥ涓嬭嚜瀹氫箟鐨勬柟妗� + 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, @@ -163,9 +1889,9 @@ }, }); } else { - this.chooseplase="涓婃捣"; - this.form.startTime=new Date("2016-06-01"); - this.form.endTime=new Date("2016-06-30"); + 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, @@ -180,44 +1906,44 @@ }); } }, - change () { - this.showdata1=false; + change() { + this.showdata1 = false; }, - change1 () { - this.showdata2=false; + change1() { + this.showdata2 = false; }, - openDia () { - bus.$emit("changeColor",true); + openDia() { + bus.$emit("changeColor", true); }, - choose (value) { - let arr=value.split("-"); - this.form.freqStart=arr[0]; - this.form.freqEnd=arr[1]; + choose(value) { + let arr = value.split("-"); + this.form.freqStart = arr[0]; + this.form.freqEnd = arr[1]; }, - close () { - this.showsituation=false; + close() { + this.showsituation = false; }, - getdata (data) { - this.colorContainer=data; + getdata(data) { + this.colorContainer = data; }, // 鐐瑰嚮鑾峰緱鎬佸娍 - getTaishi () { - if(hander) { + getTaishi() { + if (hander) { return; } - hander=new Cesium.ScreenSpaceEventHandler(Viewer.scene.canvas); + hander = new Cesium.ScreenSpaceEventHandler(Viewer.scene.canvas); let pickFeature; // 榧犳爣鐐瑰嚮浜嬩欢 hander.setInputAction((event) => { // 鎷惧彇瀵硅薄 - divPoint3&&divPoint3.deleteObject(); - let clickPosition=viewer.scene.camera.pickEllipsoid(event.position); + 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={ + 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", @@ -225,14 +1951,14 @@ filename: filename, }; showCQ(obj).then((res) => { - let data=res.data; - if(data!="鏃犳暟鎹�") { - divPoint3=sgworld.Creator.createDivPoint( + let data = res.data; + if (data != "鏃犳暟鎹�") { + divPoint3 = sgworld.Creator.createDivPoint( "鍚堣偉", - { lon: obj.lng,lat: obj.lat }, + { lon: obj.lng, lat: obj.lat }, { type: "custom", - offset: ["c",60], + offset: ["c", 60], description: ` <div class="divPoint-custom"> <p>${data}</p> @@ -245,16 +1971,16 @@ } }); //鎶婁綘鎷惧彇鐨勪笢瑗挎墦鍗板嚭鏉ョ湅鐪嬩粈涔堝�煎彲浠ョ敤浣滃垽鏂� - },Cesium.ScreenSpaceEventType.LEFT_CLICK); + }, Cesium.ScreenSpaceEventType.LEFT_CLICK); }, - analysis () { + analysis() { this.reset(); - let that=this; - if(that.imageid) { + let that = this; + if (that.imageid) { window.Viewer.entities.removeById(that.imageid); - that.imageid=null; + that.imageid = null; } - let data={ + let data = { colorName: "-100,0000FF;120,FF0000", startTime: "20160601000000", endTime: 20160630000000, @@ -267,38 +1993,38 @@ 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):""; + 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.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); + if (this.showdata2) { + data.endTime = 20160630000000; + this.chooseplase && this.chooseplase == "涓婃捣" + ? (data.endTime = 20160630000000) + : (data.endTime = 20191016000000); } - const loading=that.$loading({ + const loading = that.$loading({ lock: true, text: "璁$畻涓�", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", }); - data.points=data.points.value; + 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={ + 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", @@ -307,10 +2033,10 @@ minValue: 0, showBounds: this.form.points.value, }; - data1={ ...data1,...this.colorContainer }; + data1 = { ...data1, ...this.colorContainer }; createPic(data1) .then((res2) => { - let rectangle=sgworld.Creator.addSimpleGraphic("rectangle",{ + let rectangle = sgworld.Creator.addSimpleGraphic("rectangle", { removeEdit: true, coordinates: Cesium.Rectangle.fromDegrees( points.xmin, @@ -320,24 +2046,24 @@ ), color: "rgba(255,255,255,0.5)", image: - "http://221.224.53.36:9081/calc/picurl?file="+ + "http://221.224.53.36:9081/calc/picurl?file=" + Base64.encode(res2.data), }); - that.showDianci=true; + that.showDianci = true; // 鍥剧墖鑾峰彇鎴愬姛 寮�鍚嬀鍙� that.getTaishi(); - if(that.imageid) { + if (that.imageid) { window.Viewer.entities.removeById(that.imageid); - that.imageid=null; + that.imageid = null; } - that.imageid=rectangle.id; + that.imageid = rectangle.id; loading.close(); that.$message({ message: "璁$畻鎴愬姛", type: "success", }); - that.showpic=true; + that.showpic = true; }) .catch((error) => { loading.close(); @@ -348,32 +2074,32 @@ loading.close(); }); }, - reset () { + reset() { //閲嶇疆 - if(this.imageid) { + if (this.imageid) { window.Viewer.entities.removeById(this.imageid); - hander&& + hander && hander.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); - hander=null; - divPoint3&&divPoint3.deleteObject(); + hander = null; + divPoint3 && divPoint3.deleteObject(); - this.imageid=null; - this.showDianci=false; + this.imageid = null; + this.showDianci = false; } }, }, watch: { colorContainer: { deep: true, - handler (data) { - let colornow={ + 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; + this.innerbac = colornow; }, }, }, @@ -431,31 +2157,9 @@ .next { width: 89%; height: 79%; - margin: 100px auto; + margin: 30px auto; } -.next >>> .el-select { - width: 95% !important; -} -.next >>> .el-form-item { - margin-top: 60px; -} -.next >>> .el-input { - width: 84%; -} -.next >>> .el-date-editor { - width: 515px; -} -.next >>> .el-form-item__label { - color: #fff; - font-size: 40px; -} -.next >>> .el-input__inner { - font-size: 30px; -} -.next >>> .el-form-item__error { - font-size: 30px; - font-weight: 700; -} + .botcon { display: inline-block; margin-top: 34px; @@ -496,4 +2200,90 @@ 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> + -- Gitblit v1.9.3