From e920ac72802131d53ecd56dd3e15afe404126257 Mon Sep 17 00:00:00 2001
From: wangjuncheng <1>
Date: 星期三, 23 七月 2025 19:54:38 +0800
Subject: [PATCH] 1

---
 src/components/tools/LayerTree.vue |  313 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 309 insertions(+), 4 deletions(-)

diff --git a/src/components/tools/LayerTree.vue b/src/components/tools/LayerTree.vue
index c217cd7..20650ac 100644
--- a/src/components/tools/LayerTree.vue
+++ b/src/components/tools/LayerTree.vue
@@ -1,5 +1,11 @@
 <template>
   <div class="layer-tree">
+    <!-- 娣诲姞鎸夐挳 -->
+    <el-button @click="printCurrentView" type="primary" style="margin-bottom: 10px;">
+      鎵撳嵃褰撳墠瑙嗗浘淇℃伅
+    </el-button>
+
+    <!-- 鍥惧眰鏍� -->
     <el-tree
       ref="treeRef"
       style="max-width: 600px"
@@ -36,10 +42,32 @@
 const route = useRoute();
 
 /**
+ * 鎵撳嵃褰撳墠瑙嗗浘鐨勭浉鏈虹姸鎬�
+ */
+ function printCurrentView() {
+  window.Viewer = earthCtrl.viewer;// 鍋囪浣犲凡缁忓湪 data 鎴� setup 涓畾涔変簡 viewer
+    const camera = earthCtrl.viewer.camera;
+
+    const view = {
+      destination: {
+        x: camera.position.x,
+        y: camera.position.y,
+        z: camera.position.z,
+      },
+      orientation: {
+        pitch: camera.pitch,
+        roll: camera.roll,
+        heading: camera.heading,
+      },
+    };
+
+    console.log('褰撳墠瑙嗗浘鍙傛暟锛�', view);
+}
+/**
  * 鍥惧眰鏍戦厤缃暟鎹�
  * 鍖呭惈涓夌淮鏈嶅姟鍜屽浘灞傛暟鎹袱澶у垎绫�
  */
-const treeData = ref([
+ const treeData = ref([
   {
     label: "涓夌淮鏈嶅姟",
     children: [
@@ -58,6 +86,166 @@
       { label: "閬块櫓鍦烘墍" },
     ],
   },
+  {
+  label: "鍏朵粬鏁版嵁",
+  children: [
+    // 鏉戝簞褰卞儚鍥惧眰锛堟棤 view锛�
+    { label: "鍗楃獤涔″奖鍍�", type: "imagery", url: "/imagery/tile/image/wmts/pTkjV3J9/{z}/{x}/{y}?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo" },
+    { label: "閲戦浮鍙版潙褰卞儚", type: "imagery", url: "/imagery/tile/image/wmts/qEToHR5Z/{z}/{x}/{y}?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo" },
+    { label: "榫欐硥搴勬潙褰卞儚", type: "imagery", url: "/imagery/tile/image/wmts/Tdjg608Z/{z}/{x}/{y}?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo" },
+    { label: "宄矡鏉戝奖鍍�", type: "imagery", url: "/imagery/tile/image/wmts/okRsdbWk/{z}/{x}/{y}?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo" },
+    { label: "鐏垫按鏉戝奖鍍�", type: "imagery", url: "/imagery/tile/image/wmts/sxVRibjH/{z}/{x}/{y}?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo" },
+    { label: "鐢板簞鏉戝奖鍍�", type: "imagery", url: "/imagery/tile/image/wmts/EDtElo3U/{z}/{x}/{y}?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo" },
+
+    // 鏉戝簞鍦板舰鍥惧眰
+    {
+      label: "鐢板簞鏉戝湴褰�",
+      type: "terrain",
+      url: "/imagery/tile/terrain/sDpC3pM8?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
+      view: {
+        destination: { x: -2136032.9273641515, y: 4399423.940210319, z: 4084681.6412534667 },
+        orientation: { pitch: -0.6380935762087248, roll: 6.283155058648237, heading: 6.117892190518964 }
+      }
+    },
+    {
+      label: "鐏垫按鏉戝湴褰�",
+      type: "terrain",
+      url: "/imagery/tile/terrain/N0INPZIN?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
+      view: {
+        destination: { x: -2127000.0250662216, y: 4408369.621939603, z: 4078610.664222384 },
+        orientation: { pitch: -0.4326441481504202, roll: 0.000025937982368162693, heading: 4.9973143963984015 }
+      }
+    },
+    {
+      label: "鍗楃獤涔″湴褰�",
+      type: "terrain",
+      url: "/imagery/tile/terrain/TBKJCcqO?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
+      view: {
+        destination: { x: -2148291.712223941, y: 4429896.46897996, z: 4055778.9577251095 },
+        orientation: { pitch: -0.7094729926433327, roll: 6.2829983479026374, heading: 6.228640490951177 }
+      }
+    },
+    {
+      label: "榫欐硥搴勬潙鍦板舰",
+      type: "terrain",
+      url: "/imagery/tile/terrain/pLtaLGeZ?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
+      view: {
+        destination: { x: -2168757.031244387, y: 4352617.776664691, z: 4114967.541317504 },
+        orientation: { pitch: -0.4435676845783054, roll: 6.283154708563269, heading: 5.537612876549447 }
+      }
+    },
+    {
+      label: "宄矡鏉戝湴褰�",
+      type: "terrain",
+      url: "/imagery/tile/terrain/2LBx9e7E?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
+      view: {
+        destination: { x: -2170854.0167420367, y: 4358200.634596329, z: 4110425.3427262204 },
+        orientation: { pitch: -0.847848874762068, roll: 0.00008577448108137986, heading: 0.4679505123692884 }
+      }
+    },
+    {
+      label: "閲戦浮鍙版潙鍦板舰",
+      type: "terrain",
+      url: "/imagery/tile/terrain/aEIeI21o?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
+      view: {
+        destination: { x: -2130224.9623079575, y: 4426008.165349956, z: 4068795.580264238 },
+        orientation: { pitch: -0.9127940858026111, roll: 6.282740114172059, heading: 0.08207325160381274 }
+      }
+    },
+
+    // 妯″瀷鍥惧眰
+    {
+      label: "妯″瀷-LSR5ezfl",
+      type: "model",
+      url: "/imagery/tile/model/service/LSR5ezfl/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
+      view: {
+        destination: { x: -2146689.939461115, y: 4426047.413821165, z: 4057984.6498454507 },
+        orientation: { pitch: -0.9541138124492012, roll: 0.00031687828366511184, heading: 6.140422591164119 }
+      }
+    },
+    {
+      label: "妯″瀷-1J2wMbnU",
+      type: "model",
+      url: "/imagery/tile/model/service/1J2wMbnU/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
+      view: {
+        destination: { x: -2133104.794919741, y: 4425812.523913443, z: 4069478.3137610652 },
+        orientation: { pitch: -0.9541137913665527, roll: 0.00031687304371175173, heading: 6.140422595438931 }
+      }
+    },
+    {
+      label: "妯″瀷-gaeULxdB",
+      type: "model",
+      url: "/imagery/tile/model/service/gaeULxdB/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
+      view: {
+        destination: { x: -2130956.971562582, y: 4426818.080505688, z: 4069740.7525420994 },
+        orientation: { pitch: -0.9541137309940142, roll: 0.0003168580385137787, heading: 6.140422607680212 }
+      }
+    },
+    {
+      label: "妯″瀷-haujMGBj",
+      type: "model",
+      url: "/imagery/tile/model/service/haujMGBj/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
+      view: {
+        destination: { x: -2132142.087145638, y: 4425161.123976678, z: 4070278.934587119 },
+        orientation: { pitch: -0.9541140402489301, roll: 0.0003169349017886347, heading: 6.140422544975061 }
+      }
+    },
+    {
+      label: "妯″瀷-4QnI3jUW",
+      type: "model",
+      url: "/imagery/tile/model/service/4QnI3jUW/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
+      view: {
+        destination: { x: -2173100.959020146, y: 4359294.155857249, z: 4110691.2853415837 },
+        orientation: { pitch: -0.9540973990229973, roll: 0.00031279893049074303, heading: 6.140425919087564 }
+      }
+    },
+    {
+      label: "妯″瀷-vv0P5FuH",
+      type: "model",
+      url: "/imagery/tile/model/service/vv0P5FuH/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
+      view: {
+        destination: { x: -2168663.968240228, y: 4355261.718587015, z: 4115712.067191204 },
+        orientation: { pitch: -0.9540906570127872, roll: 0.00031112334289318255, heading: 6.140427286015401 }
+      }
+    },
+    {
+      label: "妯″瀷-uNsdeKPc",
+      type: "model",
+      url: "/imagery/tile/model/service/uNsdeKPc/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
+      view: {
+        destination: { x: -2145340.8188580503, y: 4424796.321883301, z: 4059623.85371558 },
+        orientation: { pitch: -0.9541017116169872, roll: 0.000313870753641865, heading: 6.140425044701509 }
+      }
+    },
+    {
+      label: "妯″瀷-qMRvXo9Q",
+      type: "model",
+      url: "/imagery/tile/model/service/qMRvXo9Q/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
+      view: {
+        destination: { x: -2127321.106886179, y: 4421820.211235223, z: 4068832.7651704233 },
+        orientation: { pitch: -0.9541063907093843, roll: 0.00031503367875540533, heading: 6.140424095992006 }
+      }
+    },
+    {
+      label: "妯″瀷-hj3Ipgwk",
+      type: "model",
+      url: "/imagery/tile/model/service/hj3Ipgwk/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
+      view: {
+        destination: { x: -2128232.405466075, y: 4415420.0330180405, z: 4079261.2309530703 },
+        orientation: { pitch: -0.9541075114138131, roll: 0.00031531221697900236, heading: 6.140423868761242 }
+      }
+    },
+    {
+      label: "妯″瀷-Iakp0nhx",
+      type: "model",
+      url: "/imagery/tile/model/service/Iakp0nhx/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
+      view: {
+        destination: { x: -2138006.584911224, y: 4402665.343671573, z: 4086466.2821442005 },
+        orientation: { pitch: -0.9541030942818041, roll: 0.0003142143946410769, heading: 6.140424764361058 }
+      }
+    }
+  ]
+}
 ]);
 
 // 榛樿閫変腑鐨勮妭鐐癸紙鍦板舰鏁版嵁榛樿寮�鍚級
@@ -96,22 +284,43 @@
 async function initImageryLayer() {
   try {
     ImageryLayer = await earthCtrl.factory.createImageryLayer({
-      sourceType: "tms",
+      sourceType: "wmts",
       url: "http://106.120.22.26:9103/gisserver/tmsserver/sunhugoudom",
+      // url: "/imagery/tile/image/wmts/pTkjV3J9/{z}/{x}/{y}?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
     });
     treeMap.set("褰卞儚鏁版嵁", ImageryLayer);
   } catch (error) {
     console.error("褰卞儚鏁版嵁鍒濆鍖栧け璐�:", error);
   }
 }
+async function initImageryLayerByName(name, url) {
+  try {
+    // 鍒涘缓褰卞儚鍥惧眰
+    const imageryLayer = await earthCtrl.factory.createImageryLayer({
+      sourceType: "wmts", // 鏍规嵁瀹為檯鎯呭喌璋冩暣sourceType
+      url: url,
+    });
 
+    // 灏嗗垱寤虹殑褰卞儚鍥惧眰娣诲姞鍒癈esium Viewer涓�
+    // if (imageryLayer) {
+    //   viewer.imageryLayers.add(imageryLayer);
+    // }
+
+    // 灏嗗浘灞傚疄渚嬩繚瀛樺埌treeMap涓�
+    treeMap.set(name, imageryLayer);
+
+    console.log(`${name} 褰卞儚鏁版嵁鍒濆鍖栨垚鍔焋);
+  } catch (error) {
+    console.error(`${name} 褰卞儚鏁版嵁鍒濆鍖栧け璐�:`, error);
+  }
+}
 /**
  * 澶勭悊鏍戣妭鐐瑰嬀閫夊彉鍖�
  * @param {Object} data - 鑺傜偣鏁版嵁
  * @param {Boolean} checked - 鏄惁閫変腑
  * @param {Boolean} indeterminate - 涓嶇‘瀹氱姸鎬�
  */
-function handleCheckChange(data, checked) {
+ function handleCheckChange(data, checked) {
   const label = data.label;
 
   // 鍦板舰鏁版嵁澶勭悊
@@ -144,13 +353,109 @@
     return;
   }
 
+  // 鏉戝簞鍥惧眰澶勭悊
+if (data.type === "imagery") {
+    if (checked) {
+      initImageryLayerByName(label, data.url);
+    } else {
+      const layer = treeMap.get(label);
+      if (layer) {
+        viewer.imageryLayers.remove(layer);
+        treeMap.delete(label);
+      }
+    }
+    return;
+  }
+  if (data.type === "terrain") {
+  handleTerrainLayerByName(label, data.url, checked, data.view);
+  return;
+}
+
+if (data.type === "model") {
+  handleModelLayerByUrl(label, data.url, checked, data.view);
+  return;
+}
+
   // 鍏朵粬鍥惧眰鐨勫鐞�
   const layer = treeMap.get(label);
   if (layer) {
     toggleLayerVisible(label, checked);
   }
 }
+async function handleTerrainLayerByName(name, url, checked, view) {
+  if (checked) {
+    try {
+      const layer = await earthCtrl.factory.createTerrainLayer({
+        sourceType: "ctb",
+        url,
+        requestVertexNormals: true,
+      });
+      treeMap.set(name, layer);
+      viewer.terrain = layer;
 
+      console.log(view, 'zhelishi shuju'); // 鐜板湪搴旇鏈夋暟鎹簡
+
+      if (view && view.destination && view.orientation) {
+        viewer.scene.camera.flyTo({
+          destination: new Cesium.Cartesian3(
+            view.destination.x,
+            view.destination.y,
+            view.destination.z
+          ),
+          orientation: {
+            heading: view.orientation.heading,
+            pitch: view.orientation.pitch,
+            roll: view.orientation.roll
+          }
+        });
+      }
+
+    } catch (error) {
+      console.error(`鍦板舰鍥惧眰 ${name} 鍔犺浇澶辫触:`, error);
+    }
+  } else {
+    const layer = treeMap.get(name);
+    if (layer) {
+      toggleLayerVisible(name, false);
+      layer.removeFromMap();
+      treeMap.delete(name);
+    }
+  }
+}
+
+async function handleModelLayerByUrl(name, url, checked, view) {
+  if (checked) {
+    try {
+      const model = await addTileset(url);
+      treeMap.set(name, model);
+      viewer.scene.primitives.add(model);
+
+      if (view && view.destination && view.orientation) {
+        viewer.scene.camera.flyTo({
+          destination: new Cesium.Cartesian3(
+            view.destination.x,
+            view.destination.y,
+            view.destination.z
+          ),
+          orientation: {
+            heading: view.orientation.heading,
+            pitch: view.orientation.pitch,
+            roll: view.orientation.roll
+          }
+        });
+      }
+
+    } catch (error) {
+      console.error(`妯″瀷鍥惧眰 ${name} 鍔犺浇澶辫触:`, error);
+    }
+  } else {
+    const model = treeMap.get(name);
+    if (model) {
+      viewer.scene.primitives.remove(model);
+      treeMap.delete(name);
+    }
+  }
+}
 /**
  * 澶勭悊鍦板舰鍥惧眰
  */
@@ -192,7 +497,7 @@
   if (checked) {
     addTileset(
       // "http://106.120.22.26:9103/gisserver/c3dserver/sunhugou3d/tileset.json"
-      "http://192.168.37.61:9004/tile/model/service/Iakp0nhx/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo"
+      "/imagery/tile/model/service/Iakp0nhx/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo"
     )
       .then((model) => {
         treeMap.set("妯″瀷鏁版嵁", model);

--
Gitblit v1.9.3