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 () => { const initMap = async () => {
let terrainProvider = await Cesium.createWorldTerrainAsync() let terrainProvider = await Cesium.createWorldTerrainAsync()
const oldOptions = { const oldOptions = {
// //
animation: false, animation: false,
@ -69,6 +70,13 @@ const initMap = async () => {
configJson = {} configJson = {}
} }
if (props.options.isTerrainProvider) { if (props.options.isTerrainProvider) {
// 使
if(props.options.cesiumTerrainProviderUrl) {
const customTerrainProvider = await Cesium.CesiumTerrainProvider.fromUrl(props.options.cesiumTerrainProviderUrl);
if(customTerrainProvider) {
terrainProvider = customTerrainProvider;
}
}
oldOptions.terrainProvider = terrainProvider; oldOptions.terrainProvider = terrainProvider;
} }
let options = Object.assign(oldOptions, configJson) let options = Object.assign(oldOptions, configJson)
@ -95,6 +103,7 @@ const setInitConfig = () => {
} }
setMapImg(options); 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(() => { onUnmounted(() => {
if (viewer) { if (viewer) {
viewer.entities.removeAll() viewer.entities.removeAll()

View File

@ -88,6 +88,27 @@
</el-col> </el-col>
</el-row> </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-divider content-position="left">其他配置</el-divider>
<el-form-item label="其他配置" prop="configJson"> <el-form-item label="其他配置" prop="configJson">
<JsonEditorVue v-model="formData.configJson" style="width: 100%;" /> <JsonEditorVue v-model="formData.configJson" style="width: 100%;" />
@ -123,6 +144,7 @@ const dituList = [
value: 'tianditu' value: 'tianditu'
} }
] ]
const addModel = ref(null); //
const formData = ref({ const formData = ref({
setView: { setView: {
@ -139,9 +161,18 @@ const formData = ref({
isTerrainProvider: true, // isTerrainProvider: true, //
cesiumTerrainProviderUrl: '', // cesiumTerrainProviderUrl: '', //
ditu: '', // ditu: '', //
modelList: ['test1', 'test2'], //
configJson: {} configJson: {}
}) })
const addModelEvent = () => {
if (!addModel.value || addModel.value.indexOf('tileset.json') < 0) {
return;
}
formData.value.modelList.push(addModel.value);
addModel.value = null;
}
// //
const saveClick = () => { const saveClick = () => {
// todo // todo
@ -172,4 +203,19 @@ onMounted(() => {
justify-content: flex-end; 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> </style>

View File

@ -34,7 +34,11 @@ export default defineConfig(({ mode, command }) => {
target: 'http://localhost:9100', target: 'http://localhost:9100',
changeOrigin: true, changeOrigin: true,
rewrite: (p) => p.replace(/^\/dev-api/, '') 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 //fix:error:stdin>:7356:1: warning: "@charset" must be the first rule in the file