From 4a76c7eadf9273953bf0ac0830629c338c8b53fd Mon Sep 17 00:00:00 2001 From: zhangquan <2523589960@qq.com> Date: Thu, 22 May 2025 16:42:40 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=B7=BB=E5=8A=A0=E5=8A=A0=E8=BD=BD=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E5=9C=B0=E5=BD=A2=E7=9A=84=E5=9C=B0=E5=9B=BE?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=9B2.=E6=B7=BB=E5=8A=A0=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E9=85=8D=E7=BD=AE=E7=9A=84=E9=A1=B5=E9=9D=A2=E5=86=85?= =?UTF-8?q?=E5=AE=B9=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=8A=A0=E8=BD=BD=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E7=9A=84=E5=9C=B0=E5=9B=BE=E9=80=BB=E8=BE=91=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/CesiumMap/index.vue | 32 ++++++++++++- .../gisManagement/configSetting/index.vue | 46 +++++++++++++++++++ vite.config.js | 6 ++- 3 files changed, 82 insertions(+), 2 deletions(-) diff --git a/src/components/CesiumMap/index.vue b/src/components/CesiumMap/index.vue index 671e129..da6368a 100644 --- a/src/components/CesiumMap/index.vue +++ b/src/components/CesiumMap/index.vue @@ -25,7 +25,8 @@ onMounted(async () => { // 初始化地图 const initMap = async () => { - let terrainProvider = await Cesium.createWorldTerrainAsync() + let terrainProvider = await Cesium.createWorldTerrainAsync() + const oldOptions = { // 动画仪表盘 animation: false, @@ -69,6 +70,13 @@ const initMap = async () => { configJson = {} } if (props.options.isTerrainProvider) { + // 是否使用自定义地形 + if(props.options.cesiumTerrainProviderUrl) { + const customTerrainProvider = await Cesium.CesiumTerrainProvider.fromUrl(props.options.cesiumTerrainProviderUrl); + if(customTerrainProvider) { + terrainProvider = customTerrainProvider; + } + } oldOptions.terrainProvider = terrainProvider; } let options = Object.assign(oldOptions, configJson) @@ -95,6 +103,7 @@ const setInitConfig = () => { } setMapImg(options); + setModel(options); } // 设置地图 @@ -166,6 +175,27 @@ const mapSetView = (options) => { } } +// 设置模型 +const setModel = async (options) => { + // 3d模型参数 + const tilesetOption = { + maximumScreenSpaceError: 1, // 应对大疆一键生成的模型问题;如模型能正常显示但文件加载太过频繁,可增大数值 + skipLevelOfDetail: true, + // baseScreenSpaceError: 1024, + // skipScreenSpaceErrorFactor: 16, + skipLevels: 5, + // immediatelyLoadDesiredLevelOfDetail: false, + // loadSiblings: false, + // cullWithChildrenBounds: true + }; + for (const url of options.modelList) { + const primitive = await Cesium.Cesium3DTileset.fromUrl(url, tilesetOption); + if(primitive) { + viewer.scene.primitives.add(primitive); + } + } +} + onUnmounted(() => { if (viewer) { viewer.entities.removeAll() diff --git a/src/views/gisManagement/configSetting/index.vue b/src/views/gisManagement/configSetting/index.vue index 9046e6b..c3cc33f 100644 --- a/src/views/gisManagement/configSetting/index.vue +++ b/src/views/gisManagement/configSetting/index.vue @@ -88,6 +88,27 @@ + 模型配置 + + + + + + {{ item }} + x != item)">删除 + + + + + + + 添加 + + + + + + 其他配置 @@ -123,6 +144,7 @@ const dituList = [ value: 'tianditu' } ] +const addModel = ref(null); // 添加模型的输入框 const formData = ref({ setView: { @@ -139,9 +161,18 @@ const formData = ref({ isTerrainProvider: true, // 是否显示地形 cesiumTerrainProviderUrl: '', // 自定义地形 ditu: '', // 底图选择 + modelList: ['test1', 'test2'], // 模型列表 configJson: {} }) +const addModelEvent = () => { + if (!addModel.value || addModel.value.indexOf('tileset.json') < 0) { + return; + } + formData.value.modelList.push(addModel.value); + addModel.value = null; +} + // 点击保存 const saveClick = () => { // todo 调保存接口 @@ -172,4 +203,19 @@ onMounted(() => { justify-content: flex-end; } } +.config-modellist { + border: 1px solid #e2e2e3; + width: 100%; + padding: 0 12px; + height: 80px; + overflow: auto; + + .model-item { + display: flex; + + .model-text { + flex: auto; + } + } +} \ No newline at end of file diff --git a/vite.config.js b/vite.config.js index f4830ec..2609848 100644 --- a/vite.config.js +++ b/vite.config.js @@ -34,7 +34,11 @@ export default defineConfig(({ mode, command }) => { target: 'http://localhost:9100', changeOrigin: true, rewrite: (p) => p.replace(/^\/dev-api/, '') - } + }, + '/model': { + target: 'http://47.109.202.121:8081/', + changeOrigin: true, + }, } }, //fix:error:stdin>:7356:1: warning: "@charset" must be the first rule in the file