1
0
forked from Rowland/EG
EG/Cesium-1.132/Apps/cesium_with_api.html
2025-08-25 17:48:13 +08:00

115 lines
4.2 KiB
HTML

<!-- 在你的 Cesium 安装目录中创建 cesium_with_models.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<title>Cesium with Model Integration</title>
<script src="../Build/Cesium/Cesium.js"></script>
<style>
@import url(../Build/Cesium/Widgets/widgets.css);
html, body, #cesiumContainer {
width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden;
}
</style>
</head>
<body>
<div id="cesiumContainer"></div>
<script>
// 初始化 Cesium Viewer
var viewer = new Cesium.Viewer('cesiumContainer', {
terrainProvider: Cesium.createWorldTerrain()
});
// 存储添加的模型
var addedModels = {};
// 添加模型的函数
function addModel(modelId, url, position, scale) {
try {
// 转换位置(经纬度高度)
var cartographicPosition = Cesium.Cartographic.fromDegrees(
position.longitude,
position.latitude,
position.height || 0
);
var cartesianPosition = Cesium.Cartographic.toCartesian(cartographicPosition);
// 添加模型
var entity = viewer.entities.add({
id: modelId,
position: cartesianPosition,
model: {
uri: url,
scale: scale || 1.0,
minimumPixelSize: 128,
maximumScale: 20000
}
});
addedModels[modelId] = entity;
console.log('Model added:', modelId, 'at', position);
return {success: true, message: 'Model added successfully'};
} catch (error) {
console.error('Failed to add model:', error);
return {success: false, message: error.message};
}
}
// 移除模型的函数
function removeModel(modelId) {
if (addedModels[modelId]) {
viewer.entities.remove(addedModels[modelId]);
delete addedModels[modelId];
console.log('Model removed:', modelId);
return {success: true, message: 'Model removed successfully'};
}
return {success: false, message: 'Model not found'};
}
// 更新模型位置的函数
function updateModelPosition(modelId, position) {
if (addedModels[modelId]) {
var cartographicPosition = Cesium.Cartographic.fromDegrees(
position.longitude,
position.latitude,
position.height || 0
);
var cartesianPosition = Cesium.Cartographic.toCartesian(cartographicPosition);
addedModels[modelId].position = cartesianPosition;
return {success: true, message: 'Model position updated'};
}
return {success: false, message: 'Model not found'};
}
// 获取所有模型信息
function getAllModels() {
var models = [];
for (var id in addedModels) {
models.push(id);
}
return {success: true, models: models};
}
// 通过 Python 调用的接口
window.CesiumAPI = {
addModel: addModel,
removeModel: removeModel,
updateModelPosition: updateModelPosition,
getAllModels: getAllModels
};
// 设置初始视角
viewer.camera.flyTo({
destination: Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706, 5000.0),
duration: 3.0
});
// 示例:添加一个测试模型(可选)
// addModel('testModel', '../Apps/SampleData/models/CesiumAir/Cesium_Air.glb',
// {longitude: -123.0744619, latitude: 44.0503706, height: 5000});
</script>
</body>
</html>