From 5df6240f6cd274e698d1e6358443364d543c126c Mon Sep 17 00:00:00 2001 From: Jin Lei <jinlei_182@163.com> Date: 星期六, 23 十二月 2023 10:23:27 +0800 Subject: [PATCH] [信令]添加信令相关功能 --- src/components/map/viewer.vue | 280 +++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 255 insertions(+), 25 deletions(-) diff --git a/src/components/map/viewer.vue b/src/components/map/viewer.vue index e26d5f5..1a7c8e9 100644 --- a/src/components/map/viewer.vue +++ b/src/components/map/viewer.vue @@ -1,9 +1,19 @@ <template> <div> <div id="sdkContainer"></div> + <div class="listBox" v-show="viewer1Show && !isLand"> + <ul id="viewer_lsyx"> + <li + v-for="(item, index) in arr" + :key="index" + @click="changeLeftMap($event, item, index)" + > + {{ item }} + </li> + </ul> + </div> <layerTreeTwoScreen v-if="layerTreeTwoScreen" /> <!-- <div id="bottomInfo" v-html="bottomInfo"></div> --> - <div id="switchImagerLayer" :style="{ @@ -21,7 +31,7 @@ leave-active-class="animate__backOutRight" appear > - <switchImagerLayer v-show="switchImagerLayer" /> + <switchImagerLayer ref="switchImagerLayer" v-show="switchImagerLayer" /> </transition> <img @@ -55,7 +65,9 @@ import sanwei from "@/assets/img/new/sanwei.png"; import jiejing from "@/assets/img/new/jiejing.png"; import "animate.css"; +import Bus from "@tools/Bus"; +let activeLi, nLayer, LWLayer; export default { name: "viewer", components: { @@ -76,10 +88,32 @@ scale: "1", offset: "0%", radio: 3, + arr: [ + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, + 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, + ], }; }, computed: { - ...mapState(["layerTreeTwoScreen", "cesiumInit"]), + ...mapState(["viewer1Show", "isLand", "layerTreeTwoScreen", "cesiumInit"]), + }, + watch: { + viewer1Show(newvalue, oldvalue) { + if (!newvalue) { + this.destroyImageLayer(); + } else { + if (!this.isLand) { + this.initLSYX(); + } + } + }, + isLand(newvalue, oldvalue) { + if (newvalue) { + this.destroyImageLayer(); + } else { + this.initLSYX(); + } + }, }, mounted() { this.$nextTick(function () { @@ -89,6 +123,8 @@ "sdkContainer", { StaticFileBaseUrl: "../../../static/CimSDK/", + // StaticFileBaseUrl: "../../../SW/static/CimSDK/", + // StaticFileBaseUrl: "../../../YZXNCS/static/CimSDK/", }, {}, {}, @@ -133,7 +169,9 @@ } ); window.Viewer = sgworld._Viewer; - window.sgwfs = new SmartEarth.WFSTool(sgworld._Viewer); + window.viewer = sgworld._Viewer; + sgworld._Viewer.scene.moon.show = false; + window.sgwfs = new SmartEarth.WFSTool(sgworld._Viewer, Cesium); Viewer.shadows = false; //娣卞害妫�娴� sgworld.Analysis.depthTestAgainstTerrain(true); @@ -141,26 +179,49 @@ // Viewer.scene.screenSpaceCameraController.enableCollisionDetection = false; Viewer.scene.globe.translucency.frontFaceAlpha = 0.5; Viewer.scene.globe.undergroundColor = undefined; - //鏍囦細缂栬緫 + //寮�鍚紪杈戝苟鍚敤灞炴�у脊绐� sgworld.Creator.SimpleGraphic.setEdit(true, { editProp: true, editPropData: { - offset: ["5%", Viewer.container.offsetWidth - 360 - 200 + "px"], - // offset: ["5%", Viewer.container.offsetWidth - 360 - 110 + "px"], - height: 650, - success(layero, index) { - let contentWindow = layero.find("iframe")[0].contentWindow; - let layeroHeight = layero.height(); - let titleHeight = layero.find(".layui-layer-title").height(); - let htmlHeight = - contentWindow.document.firstElementChild.offsetHeight; - if (layeroHeight > titleHeight + htmlHeight) { - layero.height(titleHeight + htmlHeight); - layero.find("iframe").height(htmlHeight); + offset: "r", + height: "60%", + }, + callBack: { + delete: function (entity) { + Bus.$emit("removeTreeNode", entity); + }, + end: function (entity) { + if (entity) { + let style = sgworld.Creator.SimpleGraphic.getStyle(entity); + let data = { + name: entity.name, + style: style, + }; + Bus.$emit("updataTreeNode", entity.id, data); } }, }, }); + //鏍囦細缂栬緫 + // sgworld.Creator.SimpleGraphic.setEdit(true, { + // editProp: true, + // editPropData: { + // offset: ["5%", Viewer.container.offsetWidth - 360 - 200 + "px"], + // // offset: ["5%", Viewer.container.offsetWidth - 360 - 110 + "px"], + // height: 650, + // success(layero, index) { + // let contentWindow = layero.find("iframe")[0].contentWindow; + // let layeroHeight = layero.height(); + // let titleHeight = layero.find(".layui-layer-title").height(); + // let htmlHeight = + // contentWindow.document.firstElementChild.offsetHeight; + // if (layeroHeight > titleHeight + htmlHeight) { + // layero.height(titleHeight + htmlHeight); + // layero.find("iframe").height(htmlHeight); + // } + // }, + // }, + // }); //鍐涙爣缂栬緫 sgworld.Creator.MilitaryPlotting.setEdit(true, { editProp: true, @@ -179,9 +240,10 @@ }, }, }); + //鍒濆鍖栧脊绐椾簨浠� + // that.showBottom(); that.initLayerOpen(); - that.showBottom(); }); let size = this.detectZoom(); this.scale = (100 / size).toFixed(2); @@ -189,7 +251,7 @@ this.size = size + "%"; }, methods: { - ...mapMutations(["setCesiumInit"]), + ...mapMutations(["setCesiumInit", "updataTreeNode"]), detectZoom() { var ratio = 0, screen = window.screen, @@ -216,6 +278,127 @@ //this.onresize_height = ratio; // return ratio; }, + changeMode(mode) { + this.$refs.switchImagerLayer.switchImagerLayerClick(mode); + }, + setImageComparison(isStart) { + this.isImage = isStart; + if (!this.isImage) { + this.destroyImageLayer(); + } + }, + initLSYX() { + let ul = document.getElementById("viewer_lsyx"); + let lis = ul.getElementsByTagName("li"); + lis[19].click(); + }, + destroyImageLayer() { + if (activeLi) { + activeLi.classList.remove("active"); + activeLi = null; + } + if (nLayer) { + Viewer.imageryLayers.remove(nLayer, true); + nLayer = null; + } + if (LWLayer) { + Viewer.imageryLayers.remove(LWLayer, true); + LWLayer = null; + } + }, + changeLeftMap(event, item, index) { + let liObj = event.currentTarget; + if (activeLi) { + activeLi.classList.remove("active"); + activeLi = null; + } + liObj.classList.add("active"); + activeLi = liObj; + this.loadImageLayer(item); + }, + loadImageLayer(year) { + if (nLayer) { + Viewer.imageryLayers.remove(nLayer, true); + nLayer = null; + } + nLayer = this.loadBJ54ImageLayer(year); + if (!LWLayer || Viewer.imageryLayers.indexOf(LWLayer) < 0) { + if (LWLayer) { + LWLayer.destroy(); + } + LWLayer = this.loadBJ54LWLayer(); + } + }, + loadBJ54LWLayer() { + let url = "http://172.26.64.84/service/ImageEngine/picdis/abc"; + //let url = option.url; + //let year = option.year; + let paramUrl = `${url}?user=jjjskfq&password=Jjjskfq@2022&layer=Shiliang_Lw_2019&style=&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image%2Fpng&TileMatrix={z}&TileCol={nx}&TileRow={ny}`; + let minx = (113.168199 * Math.PI) / 180.0; + let miny = (39.230551 * Math.PI) / 180.0; + let maxx = (118.562362 * Math.PI) / 180.0; + let maxy = (41.294714 * Math.PI) / 180.0; + let rectangle = new Cesium.Rectangle(minx, miny, maxx, maxy); + let tilingScheme = new Cesium.GeographicTilingScheme({ + rectangle: rectangle, + numberOfLevelZeroTilesX: 2, + numberOfLevelZeroTilesY: 1, + }); + var dx = { + url: paramUrl, + tilingScheme: tilingScheme, + customTags: { + nx: function (imageryProvider, x, y, level) { + return (2 << (level - 1)) + x; + }, + ny: function (imageryProvider, x, y, level) { + return (2 << (level - 1)) + y; + }, + }, + }; + var imageryProvider = new Cesium.UrlTemplateImageryProvider(dx); + let imageLayer = new Cesium.ImageryLayer(imageryProvider, { + alpha: 1, + brightness: 1.0, + }); + Viewer.imageryLayers.add(imageLayer, 3); + return imageLayer; + }, + loadBJ54ImageLayer(year) { + let url = "http://172.26.64.84/service/ImageEngine/picdis/abc"; + //let url = option.url; + //let year = option.year; + let paramUrl = `${url}?user=jjjskfq&password=Jjjskfq@2022&layer=Sate_${year}&style=&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image%2Fpng&TileMatrix={z}&TileCol={nx}&TileRow={ny}`; + let minx = (113.168199 * Math.PI) / 180.0; + let miny = (39.230551 * Math.PI) / 180.0; + let maxx = (118.562362 * Math.PI) / 180.0; + let maxy = (41.294714 * Math.PI) / 180.0; + let rectangle = new Cesium.Rectangle(minx, miny, maxx, maxy); + let tilingScheme = new Cesium.GeographicTilingScheme({ + rectangle: rectangle, + numberOfLevelZeroTilesX: 2, + numberOfLevelZeroTilesY: 1, + }); + var dx = { + url: paramUrl, + tilingScheme: tilingScheme, + customTags: { + nx: function (imageryProvider, x, y, level) { + return (2 << (level - 1)) + x; + }, + ny: function (imageryProvider, x, y, level) { + return (2 << (level - 1)) + y; + }, + }, + }; + var imageryProvider = new Cesium.UrlTemplateImageryProvider(dx); + let imageLayer = new Cesium.ImageryLayer(imageryProvider, { + alpha: 1, + brightness: 1.0, + }); + Viewer.imageryLayers.add(imageLayer, 2); + return imageLayer; + }, changeImage(val) { switch (val) { case "1": @@ -236,12 +419,20 @@ this.switchImagerLayer = !this.switchImagerLayer; }, ArcgisImageryLayer() { - var layer = sgworld.factory.createImageryLayer({ - sourceType: "arcgis", - url: "https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer", - }); + sgworld.Creator.createArcGisImageryLayer( + "ARCGIS", + { + url: "https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer", + enablePickFeatures: false, + }, + "0", + 1, + true, + "" + ); }, //鍒濆鍖栧脊绐椾簨浠� + initLayerOpen() { window.layerOpen = function (name, options) { layuiLayer.close(SmartEarthPopupData.layerProp); @@ -284,6 +475,11 @@ cancel: function () { if (cancelFn && typeof cancelFn === "function") { cancelFn(); + if (window.pickFeature && window.pickFeature.primitive) { + window.pickFeature.primitive.image = imgUrl; + window.pickFeature.primitive.scale = scale; + window.pickFeature = null; + } } }, end: function () { @@ -373,6 +569,7 @@ }, }; </script> + <style scoped> #bottomInfo { position: absolute; @@ -390,8 +587,8 @@ display: block; position: absolute; /*bottom: 120px;*/ - bottom: 13px; - right: 46px; + bottom: 30px; + right: 80px; /* margin-right: -105px; */ z-index: 9999; border-radius: 10px; @@ -427,12 +624,45 @@ border-radius: 10px; cursor: pointer; } + .bgbox { position: absolute; top: 0; left: 8px; z-index: -1; } + +.listBox { + position: absolute; + left: 20px; + top: 100px; +} + +.listBox .active { + background: rgba(255, 166, 0, 0.808); +} + +.listBox li { + padding: 2px; + margin-top: 1px; + border-radius: 2px; + color: white; + background: rgba(14, 50, 143, 0.6); + font-size: 14px; + cursor: pointer; +} + +/* 灞忓箷鍒嗚鲸鐜囨斁澶т负 125 */ +@media (-webkit-min-device-pixel-ratio: 1.25) { + .listBox li { + font-size: 12px; + } +} + +.listBox li:hover { + background: rgba(255, 166, 0, 0.808); +} + .mid { position: absolute; top: 50%; -- Gitblit v1.9.3