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 }} + 删除 +
+
+
+ + + + + +
+
+ 其他配置 @@ -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