1
wangjuncheng
15 小时以前 e920ac72802131d53ecd56dd3e15afe404126257
1
已修改2个文件
321 ■■■■■ 文件已修改
src/components/tools/LayerTree.vue 313 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vue.config.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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,
    });
    // 将创建的影像图层添加到Cesium 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);
vue.config.js
@@ -41,6 +41,14 @@
        target: 'http://192.168.37.60:8088',
        changeOrigin: true,
        secure: false
      },
      '/imagery': {  // 添加新的代理规则
        target: 'http://192.168.37.61:9004', // 目标服务器地址
        changeOrigin: true,
        pathRewrite: {
          '^/imagery': '' // 移除前缀 /imagery
        },
        secure: false
      }
    }
  }