forked from Rowland/EG
115 lines
4.2 KiB
HTML
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>
|