如何在铯中显示折线集合?
How to display a polyline collection in Cesium?
我一定是做错了什么,因为在阅读文档后我不确定如何在 Cesium 中显示折线集合。我没有在文档 here about displaying the polyline collection. Nor are there any tutorials in the sand box that I can find that seem more on point that 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;
}
我不确定文档会指向我呈现这些的其他方式。感谢任何帮助。
您在此处混合铯 API 层。 Cesium 有 2 个不同的层 public API,一个 "Entity" 层和一个 "Primitive" 层。图元层用于图形图元:整个多段线集合实际上是一个图形图元(在内部,单个 "draw call"),广告牌集合是另一个图元,等等。"Entity" 用于对象或车辆的更高级别概念,例如,单个卡车实体可能有广告牌、标签和多段线,它们都显示卡车的位置和位置。出于图形性能原因,一组单独的实体将共享一组广告牌,以及一组多段线等。
通常建议在可能或可行的情况下使用实体层,因为这样可以让您根据现实世界的对象而不是图形基元的集合来思考。但有时,您拥有如此庞大的静态基元集合,以至于直接提交该集合的性能更高。
在 demo you linked 中,代码创建了多个实体,并为每个实体附加了一条折线。但是,在您发布的代码中,您正在手动创建 PolylineCollection,并尝试显示它。因此,要修复您的代码,请删除此行:
viewer.entites.add(Polyline)
并添加这一行:
viewer.scene.primitives.add(polylines);
请注意,polylines
已在您的代码中声明,但 Polyline
只是一个 class。另请注意,我们将 polylineCollection 添加为 scene.primitive
,而不是 entity
.
根据您实际使用它的目的,在此处废弃您的代码并重新复制您链接到的实体演示代码并改用该表单可能会更好,也可能不会更好。
我一定是做错了什么,因为在阅读文档后我不确定如何在 Cesium 中显示折线集合。我没有在文档 here about displaying the polyline collection. Nor are there any tutorials in the sand box that I can find that seem more on point that 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;
}
我不确定文档会指向我呈现这些的其他方式。感谢任何帮助。
您在此处混合铯 API 层。 Cesium 有 2 个不同的层 public API,一个 "Entity" 层和一个 "Primitive" 层。图元层用于图形图元:整个多段线集合实际上是一个图形图元(在内部,单个 "draw call"),广告牌集合是另一个图元,等等。"Entity" 用于对象或车辆的更高级别概念,例如,单个卡车实体可能有广告牌、标签和多段线,它们都显示卡车的位置和位置。出于图形性能原因,一组单独的实体将共享一组广告牌,以及一组多段线等。
通常建议在可能或可行的情况下使用实体层,因为这样可以让您根据现实世界的对象而不是图形基元的集合来思考。但有时,您拥有如此庞大的静态基元集合,以至于直接提交该集合的性能更高。
在 demo you linked 中,代码创建了多个实体,并为每个实体附加了一条折线。但是,在您发布的代码中,您正在手动创建 PolylineCollection,并尝试显示它。因此,要修复您的代码,请删除此行:
viewer.entites.add(Polyline)
并添加这一行:
viewer.scene.primitives.add(polylines);
请注意,polylines
已在您的代码中声明,但 Polyline
只是一个 class。另请注意,我们将 polylineCollection 添加为 scene.primitive
,而不是 entity
.
根据您实际使用它的目的,在此处废弃您的代码并重新复制您链接到的实体演示代码并改用该表单可能会更好,也可能不会更好。