Browse Source

更新管网路径配置与图层管理

彭宇 6 days ago
parent
commit
b390151261
2 changed files with 108 additions and 76 deletions
  1. 104 72
      src/components/supermap-2.5d.vue
  2. 4 4
      src/views/SentryCockpit.vue

+ 104 - 72
src/components/supermap-2.5d.vue

@@ -167,7 +167,8 @@ export default {
       eventStatusValue: '',
       cameraCode: '',
       cameraRadius: '',
-      open_LifelineList: [], //生命线图层控制图层
+      open_LifelineList_3D: [], //生命线图层控制图层
+      open_LifelineList_2D: [], //生命线图层控制图层
       imageryProvider_hideList: [], //隐藏图层实体
       open_hideList: [], //隐藏图层实体
       openModel_hideList: [], //隐藏图层实体
@@ -387,13 +388,13 @@ export default {
           //首先移除之前添加的点
           // viewer.entities.removeAll();
           //获取点击位置笛卡尔坐标
-          var position = that.scene.pickPosition(e.position);
+          let position = that.scene.pickPosition(e.position);
 
           //将笛卡尔坐标转化为经纬度坐标
-          var cartographic = SuperMap3D.Cartographic.fromCartesian(position);
-          var longitude = SuperMap3D.Math.toDegrees(cartographic.longitude);
-          var latitude = SuperMap3D.Math.toDegrees(cartographic.latitude);
-          var height = cartographic.height;
+          let cartographic = SuperMap3D.Cartographic.fromCartesian(position);
+          let longitude = SuperMap3D.Math.toDegrees(cartographic.longitude);
+          let latitude = SuperMap3D.Math.toDegrees(cartographic.latitude);
+          let height = cartographic.height;
           if (height < 0) {
             height = 0;
           }
@@ -439,45 +440,76 @@ export default {
     // ***************************生命线---图层过滤 开始************************************************
     addLifelineOpen(checkedCities) {
       this.checkedCities=checkedCities
-      checkedCities.forEach(url => {
-        if (!url) return;  // 如果没有 URL,跳过当前迭代
-        if(!this.open_LifelineList.some(item => item.url === url)){//查找已勾选的图层数组
-          let obj = this.scene.open(this.superMapRootUrl +url,undefined,{
-            autoSetView : false      //不自动定位
-          })
-          this.open_LifelineList.push({
-            url: url,
-            mapObj: obj
-          })
-
-          // 管线流动
-          // SuperMap3D.when(obj, function (layer) {
-          //   var line = scene.layers.find("huashengranqi");
-          //   line.textureUVSpeed = new SuperMap3D.Cartesian2(0, -2);//模型纹理在UV坐标上的运动速度
-          // });
-
-        }else{
-          SuperMap3D.when.all(this.selectMapObj(url), function (layers) {
-            for (var layer of layers) {
-              layer.visible = true;
+      var checkedCities_2D=[]
+      var checkedCities_3D=[]
+      this.checkedCities.forEach(urlList => {
+        debugger
+        if (!urlList.length) return;  // 如果没有 URL,跳过当前迭代
+
+        //加载三维图层
+          if(urlList[0]){
+            if(!this.open_LifelineList_3D.some(item => item.url === urlList[0])){//查找已勾选的图层数组
+              let obj = this.scene.open(this.superMapRootUrl + urlList[0],undefined,{
+                autoSetView : false      //不自动定位
+              })
+              this.open_LifelineList_3D.push({
+                url:  urlList[0],
+                mapObj: obj
+              })
+            }else{
+              SuperMap3D.when.all(this.selectMapObj_3D(urlList[0]), function (layers) {
+                for (let layer of layers) {
+                  layer.visible = true;
+                }
+              });
             }
-          });
+            checkedCities_3D.push(urlList[0])
+          }
+
+          //加载二维图层
+        if(urlList[1]){
+          if(!this.open_LifelineList_2D.some(item => item.url === urlList[1])){//查找已勾选的图层数组
+            let obj = this.viewer.imageryLayers.addImageryProvider(new SuperMap3D.SuperMapImageryProvider({
+              url:this.superMapRootUrl + urlList[1]
+            }));
+            this.open_LifelineList_2D.push({
+              url:  urlList[1],
+              mapObj: obj
+            })
+          }else{
+            this.viewer.imageryLayers.remove(this.selectMapObj_2D(urlList[1]));
+          }
+          checkedCities_2D.push(urlList[1])
         }
       });
-      const urlsToRemove = this.open_LifelineList.map(item => item.url).filter(url => !checkedCities.includes(url));//查找没勾选的图层数组
-      console.log('选中的url:', checkedCities);
-      console.log('移除的url:', urlsToRemove);
-      urlsToRemove.forEach(url => {
+      const urlsToRemove_2D = this.open_LifelineList_2D.map(item => item.url).filter(url => !checkedCities_2D.includes(url));//查找没勾选的图层数组2D
+      const urlsToRemove_3D = this.open_LifelineList_3D.map(item => item.url).filter(url => !checkedCities_3D.includes(url));//查找没勾选的图层数组3D
+      console.log('选中的url_2D:', checkedCities_2D);
+      console.log('选中的url_3D:', checkedCities_3D);
+      console.log('移除的url_2D:', urlsToRemove_2D);
+      console.log('移除的url_3D:', urlsToRemove_3D);
+      console.log('加载的url_2D:', this.open_LifelineList_2D);
+      console.log('加载的url_3D:', this.open_LifelineList_3D);
+      urlsToRemove_3D.forEach(url => {
         if (!url) return;  // 如果没有 URL,跳过当前迭代
-        SuperMap3D.when.all(this.selectMapObj(url), function (layers) {
-          for (var layer of layers) {
+        SuperMap3D.when.all(this.selectMapObj_3D(url), function (layers) {
+          for (let layer of layers) {
             layer.visible = false;
           }
         });
       });
+      urlsToRemove_2D.forEach(url => {
+        if (!url) return;  // 如果没有 URL,跳过当前迭代
+        this.viewer.imageryLayers.remove(this.selectMapObj_2D(url));
+      });
     },
-    selectMapObj(url) {
-      const item = this.open_LifelineList.find(item => item.url === url);
+    selectMapObj_2D(url) {
+      const item = this.open_LifelineList_2D.find(item => item.url === url);
+      let mapObj= item ? item.mapObj : null;
+      return mapObj
+    },
+    selectMapObj_3D(url) {
+      const item = this.open_LifelineList_3D.find(item => item.url === url);
       let mapObj= item ? item.mapObj : null;
       return mapObj
     },
@@ -570,7 +602,7 @@ export default {
       if (that.open_hideList != null && that.open_hideList.length > 0) {
         for (let i = 0; i < that.open_hideList.length; i++) {
           SuperMap3D.when.all(that.open_hideList[i], function (layers) {
-            for (var layer of layers) {
+            for (let layer of layers) {
               // that.scene.layers.remove(layer.name);
               layer.visible = false;
             }
@@ -585,7 +617,7 @@ export default {
         for (let i = 0; i < that.openModel_hideList.length; i++) {
           SuperMap3D.when.all(that.openModel_hideList[i], function (layers) {
             const reversedLayers = [...layers].reverse();
-            for (var layer of reversedLayers) {
+            for (let layer of reversedLayers) {
               that.scene.layers.remove(layer.name);
               that.viewer.imageryLayers.remove(layer)
             }
@@ -991,13 +1023,13 @@ export default {
       that.handlerDis.clampMode = 1
       //注册测距功能事件
       that.handlerDis.measureEvt.addEventListener(function(result) {
-        var dis = Number(result.distance)
-        var selOptV = that.selOptV
+        let dis = Number(result.distance)
+        let selOptV = that.selOptV
         if (selOptV == 3 || selOptV == 4) {
           dis = Number(calcClampDistance(positions))
         }
 
-        var distance = dis > 1000 ? (dis / 1000).toFixed(2) + 'km' : dis.toFixed(2) + 'm'
+        let distance = dis > 1000 ? (dis / 1000).toFixed(2) + 'km' : dis.toFixed(2) + 'm'
         that.handlerDis.disLabel.text = '距离:' + distance
 
       })
@@ -1028,8 +1060,8 @@ export default {
 
       that.handlerArea.clampMode = 1
       that.handlerArea.measureEvt.addEventListener(function(result) {
-        var mj = Number(result.area)
-        var area = mj > 1000000 ? (mj / 1000000).toFixed(2) + 'km²' : mj.toFixed(2) + '㎡'
+        let mj = Number(result.area)
+        let area = mj > 1000000 ? (mj / 1000000).toFixed(2) + 'km²' : mj.toFixed(2) + '㎡'
         that.handlerArea.areaLabel.text = '面积:' + area
       })
       that.handlerArea.activeEvt.addEventListener(function(isActive) {
@@ -1057,9 +1089,9 @@ export default {
       //初始化测量高度
       that.handlerHeight = new SuperMap3D.MeasureHandler(that.viewer, SuperMap3D.MeasureMode.DVH);
       that.handlerHeight.measureEvt.addEventListener(function (result) {
-        var distance = result.distance > 1000 ? (result.distance / 1000).toFixed(2) + 'km' : result.distance + 'm';
-        var vHeight = result.verticalHeight > 1000 ? (result.verticalHeight / 1000).toFixed(2) + 'km' : result.verticalHeight + 'm';
-        var hDistance = result.horizontalDistance > 1000 ? (result.horizontalDistance / 1000).toFixed(2) + 'km' : result.horizontalDistance + 'm';
+        let distance = result.distance > 1000 ? (result.distance / 1000).toFixed(2) + 'km' : result.distance + 'm';
+        let vHeight = result.verticalHeight > 1000 ? (result.verticalHeight / 1000).toFixed(2) + 'km' : result.verticalHeight + 'm';
+        let hDistance = result.horizontalDistance > 1000 ? (result.horizontalDistance / 1000).toFixed(2) + 'km' : result.horizontalDistance + 'm';
         that.handlerHeight.disLabel.text = '空间距离:' + distance;
         that.handlerHeight.vLabel.text = '垂直高度:' + vHeight;
         that.handlerHeight.hLabel.text = '水平距离:' + hDistance;
@@ -1088,7 +1120,7 @@ export default {
       let that = this
       that.showExcavation=true
       setTimeout(function() {
-        var tooltip = createTooltip(document.body);
+        let tooltip = createTooltip(document.body);
         that.handlerExcavation = new SuperMap3D.DrawHandler(that.viewer, SuperMap3D.DrawMode.Polygon);
         that.handlerExcavation.activeEvt.addEventListener(function(isActive) {
           if(isActive == true) {
@@ -1108,13 +1140,13 @@ export default {
           }
         });
         that.handlerExcavation.drawEvt.addEventListener(function(res) {
-          var positions = [].concat(res.object.positions);
-          var positionsDegrees = [];
-          for(var i = 0; i < positions.length; i++) {
-            var cartographic = SuperMap3D.Cartographic.fromCartesian(positions[i]);
-            var lon = SuperMap3D.Math.toDegrees(cartographic.longitude);
-            var lat = SuperMap3D.Math.toDegrees(cartographic.latitude);
-            var h = cartographic.height;
+          let positions = [].concat(res.object.positions);
+          let positionsDegrees = [];
+          for(let i = 0; i < positions.length; i++) {
+            let cartographic = SuperMap3D.Cartographic.fromCartesian(positions[i]);
+            let lon = SuperMap3D.Math.toDegrees(cartographic.longitude);
+            let lat = SuperMap3D.Math.toDegrees(cartographic.latitude);
+            let h = cartographic.height;
             positionsDegrees = positionsDegrees.concat([lon, lat, h]);
           }
           that.extract(positionsDegrees);
@@ -1219,7 +1251,7 @@ export default {
       let that = this
       that.showExcavationAnalyze=true
       setTimeout(function() {
-        var tooltip = createTooltip(document.body);
+        let tooltip = createTooltip(document.body);
         that.handlerExcavationAnalyze = new SuperMap3D.DrawHandler(that.viewer, SuperMap3D.DrawMode.Polygon, that.clampMode);
 
         that.handlerExcavationAnalyze.activeEvt.addEventListener(function (isActive) {
@@ -1247,16 +1279,16 @@ export default {
           that.handlerExcavationAnalyze.deactivate();
           tooltip.setVisible(false);
 
-          var dep = document.getElementById("depth").value;
+          let dep = document.getElementById("depth").value;
 
-          var array = [].concat(result.object.positions);
-          var positions = [];
-          var positionsii = [];
-          for (var i = 0, len = array.length; i < len; i++) {
-            var cartographic = SuperMap3D.Cartographic.fromCartesian(array[i]);
-            var longitude = SuperMap3D.Math.toDegrees(cartographic.longitude);
-            var latitude = SuperMap3D.Math.toDegrees(cartographic.latitude);
-            var h = cartographic.height;
+          let array = [].concat(result.object.positions);
+          let positions = [];
+          let positionsii = [];
+          for (let i = 0, len = array.length; i < len; i++) {
+            let cartographic = SuperMap3D.Cartographic.fromCartesian(array[i]);
+            let longitude = SuperMap3D.Math.toDegrees(cartographic.longitude);
+            let latitude = SuperMap3D.Math.toDegrees(cartographic.latitude);
+            let h = cartographic.height;
             if (positions.indexOf(longitude) == -1 && positions.indexOf(latitude) == -1) {
 
               positions.push(longitude);
@@ -1277,11 +1309,11 @@ export default {
             position: positions
           });
 
-          var length = [];
+          let length = [];
           length.push(positionsii.length);
 
           //需要在此 动态构造一个 REGION类型的对象
-          var geometry = {
+          let geometry = {
             "id": 23,
             "parts": length,
             "points": positionsii,
@@ -1290,7 +1322,7 @@ export default {
           };
 
 
-          var queryObj = {
+          let queryObj = {
             "cutFillType": "REGIONANDALTITUDE",
             "baseAltitude": dep,
             "region": geometry,
@@ -1298,15 +1330,15 @@ export default {
             "buildPyramid": true,
             "deleteExistResultDataset": true
           };
-          var queryObjJSON = JSON.stringify(queryObj);
+          let queryObjJSON = JSON.stringify(queryObj);
           $.ajax({
             type: 'post',
             url: "http://www.supermapol.com/realspace/services/spatialAnalysis-dxyx_ios/restjsr/spatialanalyst/datasets/DEM@%E5%9B%9B%E5%A7%91%E5%A8%98%E5%B1%B1/terraincalculation/cutfill.json?returnContent=true",
             data: queryObjJSON,
             success: function (data) {
               console.log(data);
-              // var resultObj = JSON.parse(data);
-              var resultObj = data;
+              // let resultObj = JSON.parse(data);
+              let resultObj = data;
 
               document.getElementById("cutarea").value = resultObj.cutArea;
               document.getElementById("cutVolume").value = resultObj.cutVolume;
@@ -1347,7 +1379,7 @@ export default {
       let layersAll = [];
       that.checkedCities.forEach(url => {
         if (!url) return;  // 如果没有 URL,跳过当前迭代
-        SuperMap3D.when.all(that.selectMapObj(url), function (layers) {
+        SuperMap3D.when.all(that.selectMapObj_3D(url), function (layers) {
           layersAll.push(layers)
         });
       });
@@ -1993,7 +2025,7 @@ export default {
       if (radius != undefined && radius != null) {
         let that = this
         // 初始化颜色选择控件
-        var initialScanColor = '#2263e6'
+        let initialScanColor = '#2263e6'
         that.viewer.scene.scanEffect.color = SuperMap3D.Color.fromCssColorString(initialScanColor)
         // 获取或设置扫描线的运行周期,单位:秒。
         that.viewer.scene.scanEffect.period = radius / 500

+ 4 - 4
src/views/SentryCockpit.vue

@@ -233,10 +233,10 @@
   import {countByBrand} from "@/api/sentinel";
 
 
-  const cityOptions1_1 = [{ type: '企业', url: '' }, { type: '厂站', url: '' }, { type: '阀门', url: '' }, { type: '次高压管网', url: '/3D-huashengranqi-2/rest/realspace' }, { type: '中压管网', url: '' }];
-  const cityOptions1_2 = [{ type: '企业', url: '' }, { type: '厂站', url: '' }, { type: '阀门', url: '' }, { type: '次高压管网', url: '/3D-ganghuaranqi/rest/realspace' }, { type: '中压管网', url: '' }];
-  const cityOptions1_3 = [{ type: '企业', url: '' }, { type: '厂站', url: '' }, { type: '阀门', url: '' }, { type: '次高压管网', url: '/3D-aode/rest/realspace' }, { type: '中压管网', url: '' }];
-  const cityOptions1_4 = [{ type: '企业', url: '' }, { type: '厂站', url: '' }, { type: '阀门', url: '' }, { type: '次高压管网', url: '' }, { type: '中压管网', url: '' }];
+  const cityOptions1_1 = [{ type: '企业', url:[] }, { type: '厂站', url:[] }, { type: '阀门', url: [] }, { type: '次高压管网', url: ['/3D-huashengranqi-2/rest/realspace',null] }, { type: '中压管网', url:[] }];
+  const cityOptions1_2 = [{ type: '企业', url:[] }, { type: '厂站', url:[] }, { type: '阀门', url:[] }, { type: '次高压管网', url: ['/3D-GH_tiedong/rest/realspace','/map-GangHua/rest/maps/guandao_cigao@Ganghua_tiedong'] }, { type: '中压管网', url:[] }];
+  const cityOptions1_3 = [{ type: '企业', url:[] }, { type: '厂站', url:[] }, { type: '阀门', url:[] }, { type: '次高压管网', url: ['/3D-aode/rest/realspace',null] }, { type: '中压管网', url:[] }];
+  const cityOptions1_4 = [{ type: '企业', url:[] }, { type: '厂站', url:[] }, { type: '阀门', url:[] }, { type: '次高压管网', url: ['/3D-RunFaRanQi/rest/realspace',null] }, { type: '中压管网', url:[] }];
 	export default {
 		name: 'SentryCockpit',
 		components: {