SampledPositionProperty
是一个用于在CesiumJS中处理时间相关位置数据的类。它可以用于在时间轴上根据时间插值获取位置信息,也可以用于重放轨迹。
backwardExtrapolationDuration
: Number从第一个时间节点向前外推时使用的持续时间长度(以秒为单位)。默认为0。
backwardExtrapolationType
: ExtrapolationType指定如何在第一个时间节点以前外推。默认为ExtrapolationType.NONE
。
forwardExtrapolationDuration
: Number从最后一个时间节点向前外推时使用的持续时间长度(以秒为单位)。默认为0。
forwardExtrapolationType
: ExtrapolationType指定如何在最后一个时间节点以后外推。默认为ExtrapolationType.NONE
。
interpolationAlgorithm
: HermitePolynomialApproximation时间插值算法。默认为HermitePolynomialApproximation
.
interpolationDegree
: Number时间插值的程度。默认为1
。
isInterpolationForced
: Boolean指示是否总是进行时间插值。如果为true
,则即使只有一个位置数据点也会进行插值。默认为false
。
backwardExtrapolationEnabled
: Boolean指示是否启用从第一个时间节点向前外推。默认为true
。
forwardExtrapolationEnabled
: Boolean指示是否启用从最后一个时间节点向后外推。默认为true
。
length
: Number位置数据的数量。
definitionChanged
: Event当属性发生变化时触发的事件。
addSample(time, position, [interpolate=false])
向该属性中添加一个位置样本。time
是Cesium.JulianDate格式的时间值,position
是Cesium.Cartesian3格式的位置数据。如果interpolate
设为true
,则在添加样本后进行时间插值。
addSamples(times, positions)
向该属性中添加一组位置样本。times
是Cesium.JulianDate格式的时间值数组,positions
是Cesium.Cartesian3格式的位置数据数组。
removeAllSamples()
从该属性中移除所有位置数据样本。
equals(other)
返回一个布尔值,指示该属性是否与其他属性相等。
getValue(time, [result])
获取某个时间点的位置数据。time
是Cesium.JulianDate格式的时间值,result
是Cesium.Cartesian3格式的位置信息返回变量,如果调用时指定,则返回该变量,否则创建一个新变量。
getValueInReferenceFrame(time, referenceFrame, [result])
在参考系中获取某个时间点的位置数据。time
是Cesium.JulianDate格式的时间值,referenceFrame
是参考系名称,result
是Cesium.Cartesian3格式的位置信息返回变量,如果调用时指定,则返回该变量,否则创建一个新变量。
getValues(timeInterval, [result])
获取某个时间段内的所有位置信息。timeInterval
是时间段,result
是位置信息数组返回变量,如果调用时指定,则返回该变量,否则创建一个新变量。
setInterpolationOptions(options)
设置时间插值参数。
// 创建样本位置属性对象
var positionProperty = new Cesium.SampledPositionProperty();
// 添加样本数据
var startTime = Cesium.JulianDate.fromIso8601('2022-01-01T00:00:00.00Z');
var endTime = Cesium.JulianDate.fromIso8601('2022-01-02T00:00:00.00Z');
var timeValue = startTime.clone();
while (Cesium.JulianDate.lessThan(timeValue, endTime)) {
var position = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883, 200);
positionProperty.addSample(timeValue, position);
timeValue = Cesium.JulianDate.addSeconds(timeValue, 1800, new Cesium.JulianDate());
}
// 获取指定时间点的位置数据
var time = Cesium.JulianDate.fromIso8601('2022-01-01T12:00:00.00Z');
var position = new Cesium.Cartesian3();
positionProperty.getValue(time, position);
// 获取指定时间段内的位置数据
var startTime = Cesium.JulianDate.fromIso8601('2022-01-01T06:00:00.00Z');
var endTime = Cesium.JulianDate.fromIso8601('2022-01-01T18:00:00.00Z');
var positions = positionProperty.getValues(new Cesium.TimeInterval({
start: startTime,
stop: endTime
}));
// 在场景中绘制随时间变化的多边形
var polyline = viewer.entities.add({
polyline: {
positions: positionProperty,
material: new Cesium.PolylineGlowMaterialProperty({
glowPower: 0.2,
color: new Cesium.Color(1.0, 1.0, 0.0, 0.5)
}),
width: 10
}
});