在Cesium中,Property 是一种用于动态或静态数据的机制,可用于定义图形元素在时间和空间上的演变。
如空间位置。比如几何体的某一属性随时间动态变化,如高度或长度或位置等,在三维中最常见的是时间演变效果。
Property的基类接口
1、definitionChanged
获取每当此属性的定义更改时引发的事件。每当使用与当前值不同的数据调用 setValue 时,定义都会更改。可以通过该事件,来监听该Property自身所发生的变化。(只读属性)
2、getValue
用来获取某个时间点的特定属性值。getValue(time【时间点】,result【储存属性值】),返回修改后的结果参数或新实例
setValue(value【属性值】) 设置属性值
toString()返回表示属性值的字符串。
valueOf() 获取该属性的值。
3、isConstant
用来判断该属性是否会随时间变化,是一个布尔值
4、equals
用来检测属性值是否相等。(具体不知道干什么用的)
基本Property类型
1、ConstantProperty
用于定义一个恒定的属性,即属性值在整个时间范围内保持不变。
const constantProperty = new Cesium.ConstantProperty(42);
2、SampleProperty
用于表示一个随时间变化的属性,以时间和值的样本点数组形式存储。
const sampledProperty = new Cesium.SampledProperty(Number);
sampledProperty.addSample(Cesium.JulianDate.now(), 42);
window.viewer.entities.add({
id:"hyp",
position : Cesium.Cartesian3.fromDegrees(104.1, 30.6, 200),
box : {
dimensions : new Cesium.Cartesian3(200.0, 200.0, 200.0),
material : Cesium.Color.fromRandom({alpha : 1.0})
}
})
window.viewer.flyTo(window.viewer.entities.getById("hyp"))
const clock = window.viewer.cesiumWidget.clock;
clock.currentTime = Cesium.JulianDate.fromDate(new Date());
let handler = new Cesium.ScreenSpaceEventHandler(window.viewer.scene.canvas);
handler.setInputAction(function (event) {
let pick = window.viewer.scene.pick(event.position);
if (Cesium.defined(pick)) {
const property = new Cesium.SampledProperty(Cesium.Cartesian3);
const startTime = new Cesium.JulianDate.fromDate(new Date());
property.addSample(startTime,new Cesium.Cartesian3(200.0, 200.0, 200.0))
const stopTime = Cesium.JulianDate.addSeconds(startTime,60, new Cesium.JulianDate());
property.addSample(stopTime,new Cesium.Cartesian3(400.0, 400.0, 600.0));
pick.id.box.dimensions = property
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
3、TimeIntervalCollectionProperty
用于表示速度向量,通过指定速度和方向属性来定义一个移动的图形元素。
window.viewer.entities.add({
id: "tk",
position : Cesium.Cartesian3.fromDegrees(104.1, 30.6, 200),
box : {
dimensions : new Cesium.Cartesian3(200.0, 200.0, 200.0),
material : Cesium.Color.fromRandom({alpha : 1.0})
},
});
const trackedEntity = window.viewer.entities.getById("tk");
const CollectionProperty = new Cesium.TimeIntervalCollectionProperty();
const clock = window.viewer.cesiumWidget.clock;
clock.currentTime = Cesium.JulianDate.fromDate(new Date());
const startTime = new Cesium.JulianDate.fromDate(new Date());
CollectionProperty.intervals.addInterval(
new Cesium.TimeInterval({
start: Cesium.JulianDate.addSeconds(startTime,1, new Cesium.JulianDate()),
stop: Cesium.JulianDate.addSeconds(startTime,10, new Cesium.JulianDate()),
data : new Cesium.Cartesian3(500.0, 500.0, 500.0),
})
)
trackedEntity._box._dimensions = CollectionProperty
window.viewer.flyTo(trackedEntity)
4、CompositeProperty
CompositeProperty 是一种属性类型,用于组合多个属性,使其在某些方面行为类似于一个属性。
window.viewer.entities.add({
id:"1",
position : Cesium.Cartesian3.fromDegrees(104.1, 30.6, 200),
box : {
dimensions : new Cesium.Cartesian3(200.0, 200.0, 200.0),
material : Cesium.Color.fromRandom({alpha : 1.0})
}
})
const property = new Cesium.SampledProperty(Cesium.Cartesian3);
const startTime = new Cesium.JulianDate.fromDate(new Date());
property.addSample(startTime,new Cesium.Cartesian3(200.0, 200.0, 200.0))
const stopTime = Cesium.JulianDate.addSeconds(startTime,60, new Cesium.JulianDate());
property.addSample(stopTime,new Cesium.Cartesian3(400.0, 400.0, 600.0));
var compositeProperty = new Cesium.CompositeProperty()
compositeProperty.intervals.addInterval(
new Cesium.TimeInterval({
start: Cesium.JulianDate.addSeconds(startTime,1, new Cesium.JulianDate()),
stop: Cesium.JulianDate.addSeconds(startTime,10, new Cesium.JulianDate()),
data : property
})
)
const trackedEntity = window.viewer.entities.getById("1");
trackedEntity._box._dimensions = compositeProperty