5.Cesium中的Entity(实体)和各种图形

目录

什么是Entity

Entity能做什么

Entity的成员

 如何创建Entity并添加到场景中

创建场景

 创建Entity

 将Entity添加到场景中

 其他的图形

广告牌

标签

 模型

 实体的查询与删除

查询

删除

 监听修改和删除Entity


什么是Entity

       Entity实例是将多种形式的可视化聚合到单个高级对象中,它们可以手动创建并添加到Viewer.entities 中,也可以由数据源(如CzmlDataSource和GeoJsonDataSource)生成。

Entity能做什么

        通过cesium的new Cesium.Entity()可以定义各种各样的实体对象,提供比如cylinder(圆柱)、polygon(多边形)、box(盒子)、polyline(折线) 等

Entity的成员

官方文档

5.Cesium中的Entity(实体)和各种图形_第1张图片

 如何创建Entity并添加到场景中

此处以box图形为例

创建场景





    
    
    
    
    
    
    Entity
    



    

 创建Entity

//2.声明实体
let redBoxEntity = new Cesium.Entity({
    //此对象的唯一标识符。如果未提供,则会生成 GUID。
    id: "1",
    //向用户显示的人类可读名称。它不必是唯一的。
    name: "",
    //指定实体位置的属性
    position: Cesium.Cartesian3.fromDegrees(-107.0, 40.0, 300000.0),
    //实体关联的盒属性
    box: {
        //盒子的长宽高
        dimensions: new Cesium.Cartesian3(400000.0, 300000.0, 500000.0),
        //盒子的材质
        material: Cesium.Color.RED.withAlpha(0.5),
        //盒子边框线
        outline: false,
        //盒子边框线颜色
        outlineColor: Cesium.Color.BLACK
    }
})

 将Entity添加到场景中

//3.将实体添加到viewer.entities中 entities中:获取未绑定到特定数据源的实体的集合
var redBox = viewer.entities.add(redBoxEntity);
//也可以省略new Entity 直接绑定 如果id已经存在那么将会触发修改事件
viewer.entities.add({
    //此对象的唯一标识符。如果未提供,则会生成 GUID。
    id: "1",
    //向用户显示的人类可读名称。它不必是唯一的。
    name: "",
    //指定实体位置的属性
    position: Cesium.Cartesian3.fromDegrees(-107.0, 40.0, 300000.0),
    //实体关联的盒属性
    box: {
        //盒子的长宽高
        dimensions: new Cesium.Cartesian3(400000.0, 300000.0, 500000.0),
        //盒子的材质
        material: Cesium.Color.RED.withAlpha(0.5),
        //盒子边框线
        outline: false,
        //盒子边框线颜色
        outlineColor: Cesium.Color.BLACK
    }
    //实体的简介 可以是字符串或html
    description: "这是个非常红的块块"
})
//重新定义redBoxEntity的简介
redBox.description = `

这是个红块块

`

 其他的图形

广告牌

//2.声明实体
let redBoxEntity = new Cesium.Entity({
    //此对象的唯一标识符。如果未提供,则会生成 GUID。
    id: "1",
    //向用户显示的人类可读名称。它不必是唯一的。
    name: "",
    //指定实体位置的属性
    position: Cesium.Cartesian3.fromDegrees(-107.0, 40.0, 300000.0),
    //实体关联的广告牌属性
    billboard: {
        image: '../img/头像 (1).jpg',
        width: 64,
        height: 64
    }
})

标签

//2.声明实体
let redBoxEntity = new Cesium.Entity({
    //此对象的唯一标识符。如果未提供,则会生成 GUID。
    id: "1",
    //向用户显示的人类可读名称。它不必是唯一的。
    name: "",
    //指定实体位置的属性
    position: Cesium.Cartesian3.fromDegrees(-107.0, 40.0, 300000.0),
    //实体关联的标签属性
    label: {
        text: '我是个标签',
        font: '14pt monospace',
        style: Cesium.LabelStyle.FILL_AND_OUTLINE,
        outlineWidth: 2,
        verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
        pixelOffset: new Cesium.Cartesian2(0, -9)
    }
})

 模型

//2.声明实体
let redBoxEntity = new Cesium.Entity({
    //此对象的唯一标识符。如果未提供,则会生成 GUID。
    id: "1",
    //向用户显示的人类可读名称。它不必是唯一的。
    name: "",
    //指定实体位置的属性
    position: Cesium.Cartesian3.fromDegrees(-107.0, 40.0, 300000.0),
    //实体关联的模型属性
    model: {
        uri: '../model/UFO_Empty.glb'
    }
})

模型链接

链接:https://pan.baidu.com/s/1ZzEbGVfrem0d3-JqHaF3xg?pwd=81fr 
提取码:81fr 

 实体的查询与删除

查询

//在entities实体集合中查询id为1的实体
var entity = viewer.entities.getById('1');

实体存在就会返回实体信息,反之为空

删除

//方法一,先查后删
var entity = viewer.entities.getById('1');
viewer.entities.remove(entity) 
//方法二,直接删除
viewer.entities.removeById('1')
//方法三,删除所有
viewer.entities.removeAll()

 监听修改和删除Entity

//1.定义监听执行响应函数
function onChanged(collection, added, removed, changed) {
    debugger
    let msg = ""
    //collection是当前的entities
    console.log(collection);
    //添加的元素
    console.log(added);
    if (added.length > 0) {
        msg += "我添加了:【"
        for (let index = 0; index < added.length; index++) {
            const element = added[index];
            msg += added.length - index > 1 ? element._id + "," : element._id

        }
        msg += "】"
    } else if (removed.length > 0) {
        msg += "我删除了:【"
        for (let index = 0; index < added.length; index++) {
            const element = added[index];
            msg += added.length - index > 1 ? element._id + "," : element._id

        }
        msg += "】"

    } else {
        msg += "我修改了:【"
        for (let index = 0; index < added.length; index++) {
            const element = added[index];
            msg += added.length - index > 1 ? element._id + "," : element._id

        }
        msg += "】"
    }
    console.log(msg);
}
//2.将代码函数添加到collectionChanged中 
//collectionChanged:获取从集合中添加或删除实体时触发的事件。
viewer.entities.collectionChanged.addEventListener(onChanged);

你可能感兴趣的:(Cesium,前端)