我肯定做错了什么,因为在阅读文档后不确定如何在Cesium中显示折线集合。我在此处的文档中没有明确看到有关显示折线集合的任何方法或教程。在沙盒中也没有任何教程,我发现它似乎更重要,因为该教程仅显示带有
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个不同的公共API层,一个“实体”层和一个“原始”层。图元层用于图形图元:折线的整个集合实际上是一个图形图元(内部,是一个“绘制调用”),广告牌的集合是另一个图元,等等。“实体”用于更高的级别物体或车辆的高级概念,例如单个卡车实体可能具有广告牌,标签和折线,它们都显示卡车在哪里以及去过哪里。出于图形性能的原因,一个单独的实体的集合将共享一个广告牌集合,以及一个折线集合,等等。
通常,建议在可能或可行的地方使用实体层,因为这可以让您根据实际对象而不是图形基元的集合进行思考。但是有时候,您有如此庞大的静态原语集合,以至于直接直接提交该集合会更有性能。
在链接的演示中,其中的代码创建了许多实体,并在每个实体上附加了一条折线。但是,在您发布的代码中,您正在手动创建PolylineCollection,并尝试显示它。因此,要修复您的代码,请删除以下行:
viewer.entites.add(Polyline)
并添加以下行:
viewer.scene.primitives.add(polylines);
请注意,这polylines
是在您的代码中声明的,但Polyline
仅仅是一个类。另外请注意,我们将polylineCollection添加为scene.primitive
,而不是添加entity
。
根据您实际使用此代码的情况,在此处抓取代码并重新复制链接到的实体演示代码,然后使用该表单可能更好,也可能更好。