使用Cesium JS

时间:2015-09-28 19:07:24

标签: javascript cesium

我想在Cesium中拖动标签(或标签集合)而不改变其位置。 在创建标签后,我考虑过更改pixelOffset。我这样做了:

            var entity = mapa.getViewer.entities.add({
            position: Cesium.Cartesian3.fromDegrees(-75.1641667, 39.9522222),
            billboard: {
                image: pinBuilder.fromColor(Cesium.Color.SALMON, 48),
                verticalOrigin: Cesium.VerticalOrigin.BOTTOM
            },
            label: {
                text: ' Ponto',
                verticalOrigin: Cesium.VerticalOrigin.TOP,
                horizontalOrigin: Cesium.HorizontalOrigin.RIGHT,
                font: '20px Helvetica',
                fillColor: Cesium.Color.WHITE,
                outlineWidth: 1,
                style: Cesium.LabelStyle.FILL,
                pixelOffset: new Cesium.Cartesian3(0,0,0)
            }
            });
            //Tried to update the pixelOffset value
            entity.pixelOffset = new Cesium.Cartesian3(200, 20);

但没有任何反应。我在控制台上记录了实体,并且出现了pixelOffset的值,但地图上没有变化。

提前致谢!

1 个答案:

答案 0 :(得分:3)

您的代码有两个问题。

  1. 分配entity.pixelOffset的最后一行不正确。它应该是entity.label.pixelOffset。这是你没有工作的主要原因。
  2. LabelGraphics.pixelOffsetCartesian2个实例,而不是Cartesian3个实例。由于JavaScript的动态类型,代码可以使用,但使用正确类型的优良做法将有助于浏览器更好地优化代码。
  3. 在创建时也没有必要设置pixelOffset,因为默认值为Cartesian2.ZERO,创建新实例只会浪费内存。

    这是您的代码的更新工作版本:

    var entity = mapa.getViewer.entities.add({
        position: Cesium.Cartesian3.fromDegrees(-75.1641667, 39.9522222),
        billboard: {
            image: pinBuilder.fromColor(Cesium.Color.SALMON, 48),
            verticalOrigin: Cesium.VerticalOrigin.BOTTOM
        },
        label: {
            text: ' Ponto',
            verticalOrigin: Cesium.VerticalOrigin.TOP,
            horizontalOrigin: Cesium.HorizontalOrigin.RIGHT,
            font: '20px Helvetica',
            fillColor: Cesium.Color.WHITE,
            outlineWidth: 1,
            style: Cesium.LabelStyle.FILL
        }
    });
    
    entity.label.pixelOffset = new Cesium.Cartesian2(200, 20);