将 billboardCollection 添加到 Cesium 中的实体
Add billboardCollection to an entity in Cesium
我需要在 Cesium JS 中创建一个 billboardCollection
并将其放入 entity
.
我创建了两个广告牌并尝试将其添加到 billboardColletion
,然后在创建 entity
时使用它,但只是标签显示... None广告牌出现了。
到目前为止,这是我的代码:
var pos = Cesium.Cartesian3.fromDegrees(-75.1641667, 39.9522222);
var pinBuilder = new Cesium.PinBuilder();
var pointBillboard = {
image: pinBuilder.fromColor(Cesium.Color.SALMON, 48),
verticalOrigin: Cesium.VerticalOrigin.BOTTOM
};
var lineBillboard = {
color: Cesium.Color.WHITE,
image: "img/white.png",
pixelOffset: new Cesium.Cartesian2(0, 0),
position: pos
};
var billboards = scene.primitives.add(new Cesium.BillboardCollection());
billboards.add(pointBillboard);
billboards.add(lineBillboard);
this.entity = mapa.getViewer.entities.add({
position: Cesium.Cartesian3.fromDegrees(-75.1641667, 39.9522222),
billboard: billboards,
label: {
text: ' Ponto',
verticalOrigin: Cesium.VerticalOrigin.TOP,
horizontalOrigin: Cesium.HorizontalOrigin.RIGHT,
font: '11px Helvetica',
fillColor: Cesium.Color.WHITE,
outlineWidth: 1,
style: Cesium.LabelStyle.FILL
}
});
有什么方法可以在 entity
中插入 billboardCollection
吗?
非常感谢!
不,抱歉,您在这里混合了 API 的两个不同层。 billboardCollection 是图形基元层的一部分,实体构建于其之上,但不以这种方式直接包含基元。
我注意到您已经在 billboardCollection 上调用 scene.primitives.add
,所以它已经在场景中了。由于您忘记将 position: pos
添加到 pointBillboard
定义中,因此未显示图钉。此集合中的广告牌可以完全独立于场景中的任何实体。
场景中的每个实体只允许一个广告牌,而不是一个集合。在幕后,许多实体将他们的广告牌集中到一个集合中。该集合独立于您在自己的代码中构建的集合。
在文档中,请注意 entity.billboard
takes a BillboardGraphics
本质上是对单个广告牌的定义如何随时间变化的描述。它不需要实际的原始广告牌或 billboardCollection。
通常,如果您只有 "thousands" 个广告牌,则每个广告牌可以使用一个实体。但是如果你有更多的东西,你可能不得不放弃高级实体并直接构建你自己的 billboardCollection,就像你在这里所做的那样。
我需要在 Cesium JS 中创建一个 billboardCollection
并将其放入 entity
.
我创建了两个广告牌并尝试将其添加到 billboardColletion
,然后在创建 entity
时使用它,但只是标签显示... None广告牌出现了。
到目前为止,这是我的代码:
var pos = Cesium.Cartesian3.fromDegrees(-75.1641667, 39.9522222);
var pinBuilder = new Cesium.PinBuilder();
var pointBillboard = {
image: pinBuilder.fromColor(Cesium.Color.SALMON, 48),
verticalOrigin: Cesium.VerticalOrigin.BOTTOM
};
var lineBillboard = {
color: Cesium.Color.WHITE,
image: "img/white.png",
pixelOffset: new Cesium.Cartesian2(0, 0),
position: pos
};
var billboards = scene.primitives.add(new Cesium.BillboardCollection());
billboards.add(pointBillboard);
billboards.add(lineBillboard);
this.entity = mapa.getViewer.entities.add({
position: Cesium.Cartesian3.fromDegrees(-75.1641667, 39.9522222),
billboard: billboards,
label: {
text: ' Ponto',
verticalOrigin: Cesium.VerticalOrigin.TOP,
horizontalOrigin: Cesium.HorizontalOrigin.RIGHT,
font: '11px Helvetica',
fillColor: Cesium.Color.WHITE,
outlineWidth: 1,
style: Cesium.LabelStyle.FILL
}
});
有什么方法可以在 entity
中插入 billboardCollection
吗?
非常感谢!
不,抱歉,您在这里混合了 API 的两个不同层。 billboardCollection 是图形基元层的一部分,实体构建于其之上,但不以这种方式直接包含基元。
我注意到您已经在 billboardCollection 上调用 scene.primitives.add
,所以它已经在场景中了。由于您忘记将 position: pos
添加到 pointBillboard
定义中,因此未显示图钉。此集合中的广告牌可以完全独立于场景中的任何实体。
场景中的每个实体只允许一个广告牌,而不是一个集合。在幕后,许多实体将他们的广告牌集中到一个集合中。该集合独立于您在自己的代码中构建的集合。
在文档中,请注意 entity.billboard
takes a BillboardGraphics
本质上是对单个广告牌的定义如何随时间变化的描述。它不需要实际的原始广告牌或 billboardCollection。
通常,如果您只有 "thousands" 个广告牌,则每个广告牌可以使用一个实体。但是如果你有更多的东西,你可能不得不放弃高级实体并直接构建你自己的 billboardCollection,就像你在这里所做的那样。