Cesium的CallbackProperty有回调功能,凡是属性是Property的类型的均可以使用Property,这里一定得注意必须是Property类型,像什么PositionProperty、MaterialProperty这些最好不要用,要不然结果很可能不是你期望的。
那好,既然有回调功能,如下代码应该不断打印1111才对。
var callback = new Cesium.CallbackProperty(function() {
console.log(11111);
return new GeoPosition(113,25,80).toCartesian();
},false);
可事实是没有。记得曾经研究过CallbackProperty的实现机制,看了CallbackProperty源码,没看出个所以然。它的神奇之处在于,return 那个地方,返回什么类型,那个callback就是什么类型。这一点一直没明白。今天遇到这个问题,让我再次研究为什么他不起作用,仔细对比我之前的使用,发现后面都要把这个东西赋值给Entity,难道是这里的问题?就在那一瞬间我明白了,其实CallbackProperty并没有回调的功能,之所以出现回调,一定是系统内部在不断调用,这时候就可以获取CallbackProperty里的函数,进而获取到返回值。根本不是我前面写的那样。写到这里,我忽然觉得我之前对回调的理解是错误的,谁说回调就是创建之后不断调用。回调是让别人不断调用,不是自己。那所以如下代码应该能如我所愿了。
var callback = new Cesium.CallbackProperty(function() {
console.log(11111);
return new GeoPosition(113,25,80).toCartesian();
},false);
var viewer = mainControl.viewer;
var en = new Cesium.Entity({
position : callback,//注意这里我用了CallbackProperty,只是为了验证是否进行了回调。
});
viewer.entities.add(en);
果不其然,还是没出来。。。。那这样呢
var callback = new Cesium.CallbackProperty(function() {
console.log(11111);
return new GeoPosition(113,25,80).toCartesian();
},false);
var viewer = mainControl.viewer;
var en = new Cesium.Entity({
position : callback,
box :{
dimensions : new Cesium.Cartesian3(5000,5000,5000)
}
});
viewer.entities.add(en);
出来了,好吧,必须得为Entity的Graphics属性赋值。。。
开源GIS视频教程点这里