如何在Cesium中显示折线集合?

10
我一定做错了什么,因为看完文档后我不确定如何在Cesium中显示折线集合。在这里的文档中没有明确的方法或教程来显示折线集合。在沙盒中也没有找到更相关的教程,只有这个,它只显示单个折线。请注意保留HTML标记。
viewer.entites.add(Polyline)

我尝试在这个沙盒中使用PolylineCollection的add示例代码(以及迭代后切换的建议),但是没有显示任何内容,也没有显示错误:

// Create a polyline collection with two polylines
var polylines = new Cesium.PolylineCollection();
polylines.add({
  positions : Cesium.Cartesian3.fromDegreesArray([
    -75.10, 39.57,
    -77.02, 38.53,
    -80.50, 35.14,
    -80.12, 25.46]),
  width : 2
});

polylines.add({
  positions : Cesium.Cartesian3.fromDegreesArray([
    -73.10, 37.57,
    -75.02, 36.53,
    -78.50, 33.14,
    -78.12, 23.46]),
  width : 4
});
// Toggle the show property of every polyline in the collection
var len = polylines.length;
for (var i = 0; i < len; ++i) {
  var p = polylines.get(i);
  p.show = true;
}

我不确定文档会指向哪些其他方法来呈现它们。非常感谢您的帮助。

1个回答

10
您在这里混合了Cesium API层。Cesium有两个不同的公共API层,一个是“Entity”层,另一个是“Primitive”层。“Primitive”层用于图形原语:整个折线集实际上是一个单独的图形原语(内部为单个“绘制调用”),一组广告牌是另一个单一的原语等等。“Entity”用于更高级别的对象或车辆概念,例如单个卡车实体可能具有广告牌、标签和折线,这些都显示了卡车的位置以及它所在的位置。一组单独的实体将共享一个广告牌集合,再加上一个折线集合等,出于图形性能方面的考虑。
通常建议尽可能使用实体层,因为这样可以让您以真实世界对象的视角来思考,而不是以图形原语集合的方式。但有时,如果您有如此庞大的静态原语集合,直接提交该集合会更有效率。
在您链接的演示中,代码正在创建多个实体,并将折线附加到每个实体上。但是,在您发布的代码中,您正在手动创建PolylineCollection,并尝试显示它。因此,要修复您的代码,请删除此行:
viewer.entites.add(Polyline)

并添加这行代码:
viewer.scene.primitives.add(polylines);

请注意,您的代码中声明了polylines,但Polyline只是一个类。此外,请注意我们将polylineCollection添加为scene.primitive而不是entity
根据您实际使用的情况,最好放弃此处的代码,并重新复制您链接到的实体演示代码,并改用该表单。

啊,这很有道理!我在文档中跳来跳去,只是试图做一些特定的事情;我错过了一些核心概念。感谢您的澄清。在我的折线实际应用中,我将有许多折线,它们的参考位置是实体,但实际上并没有与实体对象关联(因为它们需要独立地在我的数据模型中隐藏/显示/表示)。所以我想在这种情况下可以将它们保持为基元,只要我仍然可以将端点位置分配给它们。现在只是在“大声思考”。您的答案解决了我的困惑。谢谢! - ThePartyTurtle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接