需要使广告牌实体具有可选择的回叫功能并且可能弹出信息

时间:2016-12-18 21:29:15

标签: javascript html cesium

我有一个带有广告牌实体的Cesium地图,其中包含一个图标。我们会定期更新图标的位置。

我需要在地图上选择图标,并且可以调用回调函数,也可以弹出一些有关实体的信息。 这样做有干净的方法吗?

        updateMover: function (aoMover, aoPosition, aoHeading, aoYaw, aoPitch, aoRoll, aoView) {
            aoMover.point = undefined;
            aoMover.label.pixelOffset =  new Cesium.Cartesian2(0, -50);

            if (aoMover.billboard === undefined) {
                // If it moves, its not a fixed radar
                aoMover.billboard = {
                // image: '../images/Green.png', // default: undefined
//...

1 个答案:

答案 0 :(得分:2)

实体的namedescription字段可用于弹出有关该实体的信息。

aoMover.name = 'Plaintext human-readable short name';
aoMover.description = 'Full <strong>HTML</strong> description...';

HTML可以包含任何样式或标记,但默认情况下会放在sandboxed iframe中,以便为用户提供的数据提供一些XSS保护。默认情况下,它显示在查看者拥有的Cesium InfoBox中,该Cesium拥有沙盒iframe。这是一个屏幕截图,显示了右侧的默认InfoBox:

Sample InfoBox screenshot

当选择更改时收到通知有点棘手,目前这被认为是“私人”行为,并且可能在未来版本的Cesium中发生变化,恕不另行通知(例如,通过引入官方事件来解雇)。但是,在存在官方路径之前,您可以使用以下内容:

Cesium.knockout.getObservable(viewer, '_selectedEntity').subscribe(function (entity) {
    if (Cesium.defined(entity)) {
        console.log('Selected ' + (entity.name || entity.id));
    } else {
        console.log('De-selected.');
    }
});