目录
什么是Entity
Entity能做什么
Entity的成员
如何创建Entity并添加到场景中
创建场景
创建Entity
将Entity添加到场景中
其他的图形
广告牌
标签
模型
实体的查询与删除
查询
删除
监听修改和删除Entity
Entity实例是将多种形式的可视化聚合到单个高级对象中,它们可以手动创建并添加到Viewer.entities 中,也可以由数据源(如CzmlDataSource和GeoJsonDataSource)生成。
通过cesium的new Cesium.Entity()可以定义各种各样的实体对象,提供比如cylinder(圆柱)、polygon(多边形)、box(盒子)、polyline(折线) 等
官方文档
此处以box图形为例
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
}
})
//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()
//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);