使用 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 个问题。
- 最后一行赋值
entity.pixelOffset
不正确。应该是entity.label.pixelOffset
。这是你不起作用的主要原因。
LabelGraphics.pixelOffset
是 Cartesian2
实例,而不是 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);
我想在 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 个问题。
- 最后一行赋值
entity.pixelOffset
不正确。应该是entity.label.pixelOffset
。这是你不起作用的主要原因。 LabelGraphics.pixelOffset
是Cartesian2
实例,而不是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);