使用 Cesium JS 更改标签的偏移量

Change offset of label using Cesium JS

我想在 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 的值,但地图上没有任何变化。

提前致谢!

您的代码有 2 个问题。

  1. 最后一行赋值 entity.pixelOffset 不正确。应该是entity.label.pixelOffset。这是你不起作用的主要原因。
  2. LabelGraphics.pixelOffsetCartesian2 实例,而不是 Cartesian3 实例。由于 JavaScript 的动态类型,代码将适用于其中任何一种,但使用正确的类型是一种很好的做法,这将有助于浏览器更好地优化代码。

也无需在创建时设置 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);