From 12075d0fa73d963ff5d6dbc4727fb95fb6084961 Mon Sep 17 00:00:00 2001
From: surprise <15810472099@163.com>
Date: 星期五, 01 三月 2024 09:32:40 +0800
Subject: [PATCH] 代码更新

---
 src/assets/js/Map/menuTool.js |  439 +++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 282 insertions(+), 157 deletions(-)

diff --git a/src/assets/js/Map/menuTool.js b/src/assets/js/Map/menuTool.js
index a594538..08e846a 100644
--- a/src/assets/js/Map/menuTool.js
+++ b/src/assets/js/Map/menuTool.js
@@ -6,6 +6,7 @@
 // import { Store } from "vuex";
 import store from "@/store";
 import temporaryTool from "./temporaryTools";
+import { getToken } from "@/utils/auth";
 const menuTool = {
   toolMenu: null,
   toolFlag: null,
@@ -19,8 +20,15 @@
     polygon: SmartEarth.Cesium.Color.fromCssColorString("#ffff0050"),
   },
   exportSquare: null,
+  imageryProvider: null,
+  legendBox: null,
+  Point1: false,
   topTools(res) {
     this.toolFlag = res.id;
+
+
+    Viewer.scene.globe.depthTestAgainstTerrain = false
+    Viewer.scene.pickTranslucentDepth = false
     switch (res.id) {
       case "a2": //鐐规极娓�
         this.pointRoam();
@@ -97,12 +105,18 @@
       Viewer.animation.container.style.visibility = "hidden";
       Viewer.timeline.container.style.visibility = "hidden";
       Viewer.clock.shouldAnimate = false;
-      return (earthCtrl.shadows = false);
+      Viewer.scene.globe.enableLighting = false;
+      earthCtrl.shadows = false;
+      return
     }
     Viewer.clock.shouldAnimate = true;
+    Viewer.scene.globe.enableLighting = true;
     Viewer.animation.container.style.visibility = "visible";
     Viewer.timeline.container.style.visibility = "visible";
     earthCtrl.shadows = true;
+    earthCtrl.terrainShadows = SmartEarth.Cesium.ShadowMode.ENABLED
+
+    earthCtrl.shadowMap.size = 1024
   },
   setLocalPosition(res) {
     if (this.localPoint) {
@@ -131,13 +145,90 @@
   },
   //鍧″害鍒嗘瀽
   setSlopeMap() {
+
+
+    if (window.esriLayer) {
+      this.setCloseEsriLayer();
+      return
+    }
+    sgworld.Creator.createSimpleGraphic('rectangle', {}, (entity) => {
+      if (entity) {
+        var west = Cesium.Math.toDegrees(
+          entity.rectangle._coordinates.getValue().west
+        ); // 鏍规嵁寮у害鑾峰彇鍒扮粡搴�
+        var east = Cesium.Math.toDegrees(
+          entity.rectangle._coordinates.getValue().east
+        ); // 鏍规嵁寮у害鑾峰彇鍒扮含搴�
+        var north = Cesium.Math.toDegrees(
+          entity.rectangle._coordinates.getValue().north
+        ); // 鏍规嵁寮у害鑾峰彇鍒扮粡搴�
+        var south = Cesium.Math.toDegrees(
+          entity.rectangle._coordinates.getValue().south
+        ); // 鏍规嵁寮у害鑾峰彇鍒扮含搴�
+        sgworld.Creator.SimpleGraphic.clear();
+        this.legendBox = [
+          west, south, east, north
+        ]
+        this.addTMSLayer(this.legendBox)
+      }
+    });
+
+  },
+  getLayrUrl(res) {
+    var url;
+    if (res.indexOf('{token}')>-1) {
+      const token = getToken();
+
+      url = config.proxy + res.replaceAll("{token}", token);
+    } else {
+      url = res;
+    }
+    return url;
+  },
+
+  addTMSLayer(obj) {
+    var esri = new Cesium.WebMapServiceImageryProvider({
+      url: config.esri,
+      name: 'esriLayer',
+      rectangle: Cesium.Rectangle.fromDegrees(obj[0], obj[1], obj[2], obj[3]),
+      crs: 'EPSG:4326',
+      //transparent: true
+      parameters: {
+        format: "image/png",
+        layers: [0]
+      }
+    });
+    window.esriLayer = Viewer.imageryLayers.addImageryProvider(esri);
+    store.state.showlegendLayer = true;
+  },
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  setSlopeMap1() {
     const globe = Viewer.scene.globe;
     if (window.material) {
       window.material = null;
       globe.material = null;
       Viewer.scene.globe.enableLighting = false;
+      store.state.slopeQueyFlag = false;
+      store.state.showSlopeQuey = false;
       return;
     }
+    store.state.slopeQueyFlag = true;
     window.material = new Cesium.Material({
       fabric: {
         type: "ElevationRamp",
@@ -152,13 +243,47 @@
 
     Viewer.scene.globe.material = window.material;
   },
+  setImageLayerChange() {
+    if (window.esriLayer) {
+      Viewer.imageryLayers.raiseToTop(window.esriLayer);
 
+    }
+    if (this.imageryProvider) {
+      Viewer.imageryLayers.raiseToTop(this.imageryProvider);
+    }
+  },
   //绛夐珮绾�
   setcontour() {
+    // if (this.imageryProvider) {
+    //   Viewer.imageryLayers.remove(this.imageryProvider);
+    //   this.imageryProvider = null;
+    //   return
+    // }
+    // var that = this;
+    // var imageryProvider = new Cesium.UrlTemplateImageryProvider({
+    //   url: 'http://192.168.20.83:80/Moon/LFData/2d/tiles/contour_500/{mz}/{my}/{mx}.png',
+    //   tilingScheme: new Cesium.GeographicTilingScheme(),
+    //   customTags: {
+    //     mz: function (imageryProvider, x, y, level) {
+    //       return 'L' + that.zeroFill(level + 1, 2, 10); // 娉ㄦ剰瑙傛祴锛屽眰绾у姞1浜�
+    //     },
+    //     mx: function (imageryProvider, x, y, level) {
+    //       return 'C' + that.zeroFill(x, 8, 16);
+    //     },
+    //     my: function (imageryProvider, x, y, level) {
+    //       return 'R' + that.zeroFill(y, 8, 16);
+    //     }
+    //   }
+    // });
+    // this.imageryProvider = Viewer.imageryLayers.addImageryProvider(imageryProvider);
     var globe = window.Viewer.scene.globe;
     if (window.material) {
       window.material = null;
       globe.material = null;
+
+      store.state.slopeQueyFlag = false;
+      store.state.showSlopeQuey = false;
+
       return;
     }
 
@@ -175,6 +300,16 @@
     contourUniforms.spacing = 100.0;
     contourUniforms.color = contourColor;
     globe.material = window.material;
+
+  },
+
+  zeroFill(num, len, radix) {
+    var str = num.toString(radix || 10)
+    while (str.length < len) {
+      str = '0' + str
+    }
+
+    return str;
   },
   //绾挎煡璇�
   spatialLineQuery() {
@@ -225,7 +360,7 @@
           name: name,
           polyline: {
             positions: Cesium.Cartesian3.fromDegreesArray(position),
-            width: 10.0,
+            width: 3.0,
             material: new Cesium.PolylineOutlineMaterialProperty({
               color: new Cesium.Color.fromCssColorString('#A6D8AE').withAlpha(0.5),
               outlineWidth: 1,
@@ -380,7 +515,9 @@
         break;
       case "l3": //鍦ㄧ嚎鍒跺浘
         store.state.isShowMap = true;
-        this.setThematicMap();
+        setTimeout(() => {
+          this.setThematicMap();
+        }, 200);
 
         break;
       case "l4":
@@ -463,154 +600,6 @@
       }
     });
   },
-  getEntityAttribute(type, res) {
-    var obj = {}
-    store.state.temporaryLayer = null;
-    if (type == 'point') {
-      var mataColor = res.point.color._value;
-      var outlineColor = res.point.outlineColor._value;
-
-      obj = {
-        id: (new Date()).getTime(),
-        cnName: res.name,
-        metaAlpha: mataColor.alpha,
-        outlineAlpha: outlineColor.alpha,
-        metaColor: this.colorRgbToHex('rgb(' + (mataColor.red * 255) + ',' + (mataColor.green * 255) + ',' + (mataColor.blue * 255) + ')'),
-        outlineColor: this.colorRgbToHex('rgb(' + (outlineColor.red * 255) + ',' + (outlineColor.green * 255) + ',' + (outlineColor.blue * 255) + ')'),
-        pixelSize: res.point.pixelSize._value,
-        outlineWidth: res.point.outlineWidth._value,
-        near: res.point._distanceDisplayCondition._value.near,
-        far: res.point._distanceDisplayCondition._value.far,
-        geometry: this.setCartesianToEightFour(res.position.getValue()),
-        type: 'point',
-        shpType: 'temporaryLayer',
-        layerType: '鍩烘湰鐐�',
-
-      }
-
-    } else if (type == 'label') {
-      var mataColor = res.label.fillColor._value;
-      var outlineColor = res.label.outlineColor._value;
-      var backColor = res.label.backgroundColor._value;
-      obj = {
-        id: (new Date()).getTime(),
-        cnName: res.name,
-        text: res.label.text._value,
-        font: res.label.font._value,
-        metaAlpha: mataColor.alpha,
-        outlineAlpha: outlineColor.alpha,
-        backAlpha: backColor.alpha,
-        backColor: this.colorRgbToHex('rgb(' + (backColor.red * 255) + ',' + (backColor.green * 255) + ',' + (backColor.blue * 255) + ')'),
-        metaColor: this.colorRgbToHex('rgb(' + (mataColor.red * 255) + ',' + (mataColor.green * 255) + ',' + (mataColor.blue * 255) + ')'),
-        outlineColor: this.colorRgbToHex('rgb(' + (outlineColor.red * 255) + ',' + (outlineColor.green * 255) + ',' + (outlineColor.blue * 255) + ')'),
-        scale: res.label.scale._value,
-        verticalOrigin: Cesium.VerticalOrigin.CENTER,//鍨傜洿浣嶇疆
-        horizontalOrigin: Cesium.HorizontalOrigin.CENTER,//姘村钩浣嶇疆
-        outlineWidth: res.label.outlineWidth._value,
-        showBackground: false,
-        outline: true,
-        near: res.label._distanceDisplayCondition._value.near,
-        far: res.label._distanceDisplayCondition._value.far,
-        geometry: this.setCartesianToEightFour(res.position.getValue()),
-        type: 'label',
-        shpType: 'temporaryLayer',
-        layerType: '鏂囨湰鐐�',
-        heightReference: true,
-        checked: true
-      }
-
-    } else if (type == 'polygon') {
-      var mataColor = res.polygon.material.color._value;
-      var outlineColor = res.polygon.outlineColor._value;
-      var val = res.polygon.hierarchy.getValue().positions;
-      var geom = [];
-      for (var i in val) {
-        var coord = this.setCartesianToEightFour(val[i])
-        geom.push(coord.lng, coord.lat)
-      }
-      obj = {
-        id: (new Date()).getTime(),
-        cnName: res.name,
-        metaAlpha: mataColor.alpha,
-        outlineAlpha: outlineColor.alpha,
-        metaColor: this.colorRgbToHex('rgb(' + (mataColor.red * 255) + ',' + (mataColor.green * 255) + ',' + (mataColor.blue * 255) + ')'),
-        outlineColor: this.colorRgbToHex('rgb(' + (outlineColor.red * 255) + ',' + (outlineColor.green * 255) + ',' + (outlineColor.blue * 255) + ')'),
-        near: res.polygon._distanceDisplayCondition._value.near,
-        far: res.polygon._distanceDisplayCondition._value.far,
-        geometry: geom,
-        type: 'polygon',
-        shpType: 'temporaryLayer',
-        layerType: '澶氳竟褰�',
-        heightReference: true,
-        checked: true
-      }
-    } else if (type == 'polyline') {
-
-      var mataColor = res.polyline.material.color._value;
-      var outlineColor = res.polyline.material.outlineColor._value;
-      var val = res.polyline.positions.getValue();
-      var geom = [];
-      for (var i in val) {
-        var coord = this.setCartesianToEightFour(val[i])
-        geom.push([coord.lng, coord.lat])
-      }
-      obj = {
-        id: (new Date()).getTime(),
-        cnName: res.name,
-        metaColor: this.colorRgbToHex('rgb(' + (mataColor.red * 255) + ',' + (mataColor.green * 255) + ',' + (mataColor.blue * 255) + ')'),
-        outlineColor: this.colorRgbToHex('rgb(' + (outlineColor.red * 255) + ',' + (outlineColor.green * 255) + ',' + (outlineColor.blue * 255) + ')'),
-        near: res.polyline._distanceDisplayCondition._value.near,
-        far: res.polyline._distanceDisplayCondition._value.far,
-        metaAlpha: mataColor.alpha,
-        outlineAlpha: outlineColor.alpha,
-        outlineWidth: res.polyline.material.outlineWidth._value,
-        width: res.polyline.width,
-        geometry: geom,
-        type: 'polyline',
-        shpType: 'temporaryLayer',
-        layerType: '绾�',
-        heightReference: true,
-        checked: true
-      }
-    } else if (type === 'rectangle') {
-
-      var mataColor = res.rectangle.material.color._value;
-      var outlineColor = res.rectangle.outlineColor._value;
-      var west = Cesium.Math.toDegrees(
-        res.rectangle._coordinates.getValue().west
-      ); // 鏍规嵁寮у害鑾峰彇鍒扮粡搴�
-      var east = Cesium.Math.toDegrees(
-        res.rectangle._coordinates.getValue().east
-      ); // 鏍规嵁寮у害鑾峰彇鍒扮含搴�
-      var north = Cesium.Math.toDegrees(
-        res.rectangle._coordinates.getValue().north
-      ); // 鏍规嵁寮у害鑾峰彇鍒扮粡搴�
-      var south = Cesium.Math.toDegrees(
-        res.rectangle._coordinates.getValue().south
-      ); // 鏍规嵁寮у害鑾峰彇鍒扮含搴�
-      var geom = [west, south, east, north]
-      obj = {
-        id: (new Date()).getTime(),
-        cnName: res.name,
-        metaColor: this.colorRgbToHex('rgb(' + (mataColor.red * 255) + ',' + (mataColor.green * 255) + ',' + (mataColor.blue * 255) + ')'),
-        outlineColor: this.colorRgbToHex('rgb(' + (outlineColor.red * 255) + ',' + (outlineColor.green * 255) + ',' + (outlineColor.blue * 255) + ')'),
-        near: res.rectangle._distanceDisplayCondition._value.near,
-        far: res.rectangle._distanceDisplayCondition._value.far,
-        metaAlpha: mataColor.alpha,
-        outlineAlpha: outlineColor.alpha,
-        outlineWidth: res.rectangle.outlineWidth._value,
-        rotation: 0,
-        geometry: geom,
-        type: 'rectangle',
-        shpType: 'temporaryLayer',
-        layerType: '鐭╁舰',
-        heightReference: true,
-      }
-    }
-
-    store.state.temporaryLayer = obj;
-
-  },
 
   colorRgbToHex(str) {
 
@@ -630,6 +619,7 @@
 
   //鍦ㄧ嚎鍒跺浘
   setThematicMap() {
+
     earthCtrl.coreMap.scene.mode = SmartEarth.Cesium.SceneMode.SCENE2D;
     // var handle = new SmartEarth.Cesium.ScreenSpaceEventHandler(
     //   earthCtrl.viewer.scene.canvas
@@ -664,6 +654,8 @@
     window.rightViewer.imageryLayers.removeAll();
     window.rightViewer = DoubleScreen.right._Viewer;
     window.rightViewer.animation.container.style.visibility = "hidden";
+    window.rightViewer.scene.sun.show = false; //闅愯棌澶槼鍜屾湀浜� 
+    window.rightViewer.scene.moon.show = false;
     // window.rightViewer.timeline.container.style.visibility = "hidden";
     //澶ф皵灞�
     window.rightViewer.scene.globe.showGroundAtmosphere = false;
@@ -685,6 +677,8 @@
       window.Volumetric.deleteObject();
       window.Volumetric = null;
     }
+    Viewer.scene.globe.depthTestAgainstTerrain = true
+    Viewer.scene.pickTranslucentDepth = true
     window.Volumetric = earthCtrl.analysis.createVolumetricMeasure({});
     window.Volumetric.startDrawing();
   },
@@ -717,14 +711,128 @@
   },
   //鐐规极娓�
   pointRoam() {
-    earthCtrl.Analysis.setPointFly();
+    store.state.menuFlag = "pointRoam"
+ 
+    Viewer.scene.globe.depthTestAgainstTerrain = true;
+    let tooltip = earthCtrl.Core.CreateTooltip();
+    let isFly = false, PointFly;
+    let distance = 2000 //璁剧疆璺濈閫夋嫨鐐硅瀵熺殑鍒濆楂樺害
+    //璁剧疆榧犳爣鏍峰紡
+    earthCtrl.Core.mouse(earthCtrl.Viewer.container, 1, SmartEarthRootUrl + 'Workers/image/cursor/draw.cur');
+    const pickHandler = new Cesium.ScreenSpaceEventHandler(earthCtrl.Viewer.scene.canvas);
+    const end = () => {
+      //鎻愮ず璇嶅叧闂�
+      tooltip.show(false);
+      pickHandler && pickHandler.destroy();
+      //榧犳爣鏍峰紡鎭㈠
+      earthCtrl.Core.mouse(earthCtrl.Viewer.container, 0);
+      PointFly.end(); //绉婚櫎鏃嬭浆瑙嗚椋炶
+    }
+    const fly = (degree) => {
+      const duration = 3 // 浠庤捣濮嬬偣椋炲埌閫夋嫨鐨勭偣浣嶆椂闂�
+      //鍥炶皟缁曢
+      const callback = function () {
+        PointFly = earthCtrl.Analysis.setPointFly({
+          position: Cesium.Cartesian3.fromDegrees(degree.lon, degree.lat, degree.height+2000),
+          distance: distance,
+        })
+      }
+      earthCtrl.camera.flyTo(degree.lon, degree.lat, 100000, 0, -90, 0, duration, callback)
+    }
+    pickHandler.setInputAction(function (movement) {
+      if (!isFly) {
+        tooltip.showAt(movement.position, '鐐瑰嚮缁撴潫缁曢');
+        isFly = true;
+        let degree = earthCtrl.Navigate.getMouseDegrees(movement);
+        fly(degree)
+      } else {
+        end();
+      }
+    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
+
+    pickHandler.setInputAction(function (movement) {
+      !isFly && tooltip.showAt(movement.endPosition, '鐐瑰嚮閫夋嫨瀹氫綅鐐�');
+      isFly && tooltip.showAt(movement.endPosition, '鐐瑰嚮缁撴潫缁曢');
+    }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
+
+    pickHandler.setInputAction(function (movement) {
+      distance -= movement * distance / 300;
+      distance < 1 && (distance = 1);
+      PointFly.distance = distance
+    }, Cesium.ScreenSpaceEventType.WHEEL);
+
+    // earthCtrl.Analysis.setPointFly({distance:5000});
+    // earthCtrl.measure.pickPosition({}, (e) => {
+    //   Viewer.scene.globe.depthTestAgainstTerrain = false;
+    //   const lon = e.result.longitude
+    //   const lat = e.result.latitude
+    //   const alt = e.result.alt
+    //   const hei = 10000 //椋炶鍒扮偣浣嶇殑楂樺害
+    //   const heading = 0
+    //   const pitch = -90
+    //   const roll = 0
+    //   const duration = 3 //椋炶鏃堕棿
+    //   //鏍囪閫夋嫨鐨勭偣浣嶄负绾㈢偣
+    //   const Point1 = earthCtrl.factory.createPoint({
+    //     id: earthCtrl.factory.createUUID(),
+    //     name: '鐐瑰嚮鐨勭偣',
+    //     lon: lon,
+    //     lat: lat,
+    //     alt: 300,
+    //     pixelSize: 15,
+    //     color: SmartEarth.Cesium.Color.fromCssColorString("#ff0000"),
+    //     outlineColor: SmartEarth.Cesium.Color.BLACK,
+    //     outlineWidth: 1,
+    //   });
+    //  this.Point1 =  earthCtrl.factory.createBillboard({
+    //     name: "鏍囩鐐�",
+    //     id: earthCtrl.factory.createUUID(),
+    //     image:imageUrl+"/img/mark.png",
+    //     width:16,
+    //     height:22,
+    //     lon: lon,
+    //     lat: lat,
+    //     alt: 10,
+    //     scale: 1.5,
+    // });
+
+
+
+
+
+    //   //鍥炶皟缁曢
+    //   const callback = () => {
+    //     earthCtrl.tools.clearTool();//缁撴潫鎷惧彇
+    //     const useTime = 5 //鍗曚綅绉�
+    //     //鏃嬭浆缁曢
+    //     const roate = earthCtrl.camera.rotateCamera({
+    //       lon: lon,
+    //       lat: lat,
+    //       distance: hei,
+    //       pitch: -30,
+    //       time: useTime
+    //     })
+    //     const timeout = setTimeout(() => {
+    //       roate.removeFromMap(); //绉婚櫎鏃嬭浆瑙嗚閿佸畾
+    //       clearTimeout(timeout)
+    //       this.Point1.removeFromMap()
+    //     }, useTime * 1000);
+    //   }
+    //   //椋炶
+    //   earthCtrl.camera.flyTo(lon, lat, hei, heading, pitch, roll, duration, callback)
+
+
+    // })
   },
   //绾挎极娓�
   lineRoam() {
+    Viewer.scene.globe.depthTestAgainstTerrain = true;
+    // 缁樺埗璺嚎骞惰幏鍙栬矾寰勫姩鐢绘暟鎹�
     earthCtrl.Command.execute(2, 3, "", (data) => {
+
       data.showPoint = false;
       data.showLine = true;
-      data.mode = 1;
+      data.mode = 0;
       // 寮圭獥鏁版嵁
       window.PathAnimationData = {
         flyData: data,
@@ -742,6 +850,7 @@
         },
       });
     });
+
   },
   //娓呴櫎鎸夐挳
   clearALL(id) {
@@ -750,15 +859,26 @@
 
     // });
   },
+  setCloseEsriLayer() {
+    if (window.esriLayer) {
+      Viewer.imageryLayers.remove(window.esriLayer);
+      window.esriLayer = null
+      this.legendBox = null;
+      store.state.showlegendLayer = false;
+    }
+  },
   //娓呴櫎鏂规硶
   clearTopTools(id) {
     store.state.doubleMap = false;
     store.state.doubleMenu = false;
+    this.setCloseEsriLayer();
     if (earthCtrl.shadows) {
       Viewer.animation.container.style.visibility = "hidden";
       Viewer.timeline.container.style.visibility = "hidden";
       Viewer.clock.shouldAnimate = false;
-      return (earthCtrl.shadows = false);
+      Viewer.scene.globe.enableLighting = false;
+      earthCtrl.shadows = false;
+      return
     }
     if (window.Volumetric) {
       window.Volumetric.deleteObject();
@@ -773,7 +893,12 @@
       window.material = null;
       globe.material = null;
       Viewer.scene.globe.enableLighting = false;
-      return;
+      store.state.slopeQueyFlag = false;
+      store.state.showSlopeQuey = false;
+    }
+    if (this.imageryProvider) {
+      Viewer.imageryLayers.remove(this.imageryProvider)
+      this.imageryProvider = null;
     }
     if (window.DoubleScreen) {
       window.DoubleScreen && window.DoubleScreen.destroy();
@@ -843,7 +968,7 @@
       offset: {
         heading: Cesium.Math.toRadians(0.0),
         pitch: Cesium.Math.toRadians(-90),
-        range: 0
+        range: 40
       }
     }
     );
@@ -901,7 +1026,7 @@
 
       },
     })
-    window.Viewer.flyTo(locationPolygonEntity, {
+    window.Viewer.flyTo(polyline, {
       offset: {
         heading: Cesium.Math.toRadians(0.0),
         pitch: Cesium.Math.toRadians(-90),

--
Gitblit v1.9.3