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 +++++++++++++++++++++++++++++++++++++++++++++++++++ vue.config.js | 8 + 2 files changed, 317 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); diff --git a/vue.config.js b/vue.config.js index 2823e4d..086e736 100644 --- a/vue.config.js +++ b/vue.config.js @@ -41,6 +41,14 @@ target: 'http://192.168.37.60:8088', changeOrigin: true, secure: false + }, + '/imagery': { // 娣诲姞鏂扮殑浠g悊瑙勫垯 + target: 'http://192.168.37.61:9004', // 鐩爣鏈嶅姟鍣ㄥ湴鍧� + changeOrigin: true, + pathRewrite: { + '^/imagery': '' // 绉婚櫎鍓嶇紑 /imagery + }, + secure: false } } } -- Gitblit v1.9.3