// cesium 模型效果整合
/**
* @description: 背景修改成天空盒(根据时间不同天空盒背景不同)
* @param {any} viewer :实体
* @param {Number} longitude :经度
* @param {Number} latitude :纬度
* @param {Number} height :高度
* @param {string} name :名字
* @param {String} url :模型的文件路径
* @param {Number} scale :缩放比例
* @param {Number} minimumPixelSize :模型的最小像素大小
* @param {Number} maximumScale :模型的最大缩放比例
*/
function addModel(viewer, longitude, latitude, height, name, url, scale, minimumPixelSize, maximumScale, heading, pitch, roll) {
var position = Cesium.Cartesian3.fromDegrees(longitude, latitude, height); // 模型的位置
var orientation = Cesium.Transforms.headingPitchRollQuaternion(position, new Cesium.HeadingPitchRoll(
heading, // 设置这个属性即可(顺时针旋转的角度值)
pitch,
roll
)) // 计算模型的旋转四元数
viewer.entities.add({
name: name /* "model_entity" */,
position: position,
orientation: orientation,
model: {
uri: url, /* "/model/wireless/ty1821.glb", */ // 模型文件的路径
scale: scale /* 1.0 */, // 模型的缩放比例
minimumPixelSize: minimumPixelSize /* 64 */, // 模型的最小像素大小
maximumScale: maximumScale /* 200 */, // 模型的最大缩放比例
}
});
}
/**
* 删除模型
* @param {Viewer} viewer - Cesium 的 Viewer 实例
* @param {Entity} entity - 要删除的模型实体对象
*/
function delModel(viewer, entity) {
if (entity) {
viewer.entities.remove(entity);
}
}
/**
* 获取模型
* @param {Viewer} viewer - Cesium 的 Viewer 实例
* @param {String} name - 模型的名称
* @param {String} type - 模型获取类型,可选值为 'id'、'name'
* @returns {Entity|Array} - 当 type 为 'id' 时返回单个实体,当 type 为 'name' 时返回模型实体数组
*/
function getModel(viewer, name, type) {
var modelArray = []; // 存储模型实体的数组
if (type == 'id') {
var entity = viewer.entities.getById(name);
return entity
} else if (type == 'name') {
var entities = viewer.entities.values;
for (var i = 0; i < entities.length; i++) {
var entity = entities[i];
if (entity.name === name) {
modelArray.push(entity); // 将匹配的实体添加到数组中
}
}
return modelArray; // 返回存储模型实体的数组
}
}
export {
addModel,
delModel,
getModel
};
cesium 模型方法
最新推荐文章于 2024-07-20 18:16:53 发布