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

时间:2017-01-10 22:24:09

标签: javascript cesium

我必须做一些完全错误的事情,因为在阅读文档后我不确定如何在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;
}

我不确定文档会指向我的其他方式来呈现这些内容。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:4)

您在此处混合使用Cesium API图层。 Cesium有2个不同的公共API层,一个“实体”层和一个“原始”层。原始图层用于图形基元:折线的整个集合实际上是单个图形基元(内部,单个“绘制调用”),广告牌的集合是另一个单个基元等。“实体”用于更高的物体或车辆的水平概念,例如单个卡车实体可以具有广告牌,标签和折线,它们都显示卡车所在的位置以及卡车的位置。由于图形性能原因,一组独立的实体将共享一个广告牌集合,以及一个折线集合等。

通常建议在可能或实用的情况下使用实体层,因为这可以让您根据真实世界对象而不是图形基元集合进行思考。但有时,你有如此庞大的静态原语集合,只需直接提交该集合就更有效。

demo you linked中,代码创建了许多实体,并为每个实体附加折线。但是,在您发布的代码中,您手动创建PolylineCollection并尝试显示它。因此,要修复代码,请删除以下行:

viewer.entites.add(Polyline)

并添加以下行:

viewer.scene.primitives.add(polylines);

请注意,polylines已在您的代码中声明,但Polyline只是一个类。另请注意,我们将polylineCollection添加为scene.primitive,而不是entity

根据您实际使用此功能的原因,在此处废弃您的代码并重新复制您链接到的实体演示代码可能会或可能不会更好,而是使用该表单。