我一定是做错了什么,因为在阅读文档后我不确定如何在 Cesium 中显示折线集合。我没有在文档中明确看到任何方法或教程 here关于显示折线集合。在沙盒中也没有任何我能找到的教程似乎比 this one 更重要。 , 它只显示带有
的单折线viewer.entites.add(Polyline)
我已经尝试在这个沙盒中使用 PolylineCollection 的添加示例代码(以及迭代然后切换的建议),但没有显示任何内容,也没有显示任何错误:
// 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;
}
我不确定文档会用什么其他方式指向我来呈现这些内容。感谢您的帮助。
最佳答案
您在这里混合了 Cesium API 层。 Cesium 有 2 个不同的公共(public) API 层,一个“实体”层和一个“原始”层。基元层用于图形基元:整个多段线集合实际上是一个单一的图形基元(在内部,一个单一的“绘图调用”),广告牌的集合是另一个单一的基元,等等。一个“实体”是一个更高层次的- 物体或车辆的概念,例如,单个卡车实体可能有一个广告牌、一个标签和一条多段线,它们都显示了卡车所在的位置和曾经去过的地方。出于图形性能原因,一组单独的实体将共享一组广告牌,以及一组折线等。
通常建议在可能或可行的情况下使用实体层,因为这样可以让您根据真实世界的对象而不是图形基元的集合来思考。但有时,您拥有如此庞大的静态基元集合,以至于直接提交该集合的性能更高。
在demo you linked ,那里的代码创建了许多实体,并为每个实体附加一条折线。但是,在您发布的代码中,您正在手动创建 PolylineCollection,并尝试显示它。因此,要修复您的代码,请删除此行:
viewer.entites.add(Polyline)
并添加这一行:
viewer.scene.primitives.add(polylines);
请注意,polylines
已在您的代码中声明,但 Polyline
只是一个类。另请注意,我们将 polylineCollection 添加为 scene.primitive
,而不是 entity
。
根据您实际使用它的目的,在此处废弃您的代码并重新复制您链接到的实体演示代码并改用该表单可能会更好,也可能不会更好。
关于javascript - 如何在铯中显示折线集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41579516/