1.添加加载自定义地形的地图逻辑;2.添加模型配置的页面内容,添加加载模型的地图逻辑;

This commit is contained in:
zhangquan 2025-05-22 16:42:40 +08:00
parent bcddf0dbfc
commit 4a76c7eadf
3 changed files with 82 additions and 2 deletions

View File

@ -26,6 +26,7 @@ onMounted(async () => {
//
const initMap = async () => {
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()

View File

@ -88,6 +88,27 @@
</el-col>
</el-row>
<el-divider content-position="left">模型配置</el-divider>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="显示列表" prop="model">
<div class="config-modellist">
<div v-for="item in formData.modelList" class="model-item" :key="item">
<span class="model-text">{{ item }}</span>
<el-button type="danger" link @click="formData.modelList = formData.modelList.filter(x => x != item)">删除</el-button>
</div>
</div>
</el-form-item>
<el-form-item label="添加模型">
<el-input v-model="addModel" placeholder="请输入模型根目录下tileset.json文件的url">
<template #append>
<el-button @click="addModelEvent">添加</el-button>
</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-divider content-position="left">其他配置</el-divider>
<el-form-item label="其他配置" prop="configJson">
<JsonEditorVue v-model="formData.configJson" style="width: 100%;" />
@ -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;
}
}
}
</style>

View File

@ -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