如何针对Cesium pointprimitivecollection中的特定点?

时间:2017-06-05 16:46:34

标签: javascript cesium

我正在研究如何显示/隐藏点,以便过滤我在Cesium globe上的PointPrimitiveCollection中显示的数据。我知道你可以通过索引编号进行定位,但我想知道是否有办法向点添加某种元数据,以便我可以根据这些值来定位它们?

1 个答案:

答案 0 :(得分:0)

您可以在创建点后添加属性(此行:points.add({ position : Cesium.Cartesian3.fromDegrees(longitude, latitude), color : color }).customId = [longitude, latitude];) 这是一个有效的代码:

var viewer = new Cesium.Viewer('cesiumContainer');
var points = viewer.scene.primitives.add(new Cesium.PointPrimitiveCollection());

for (var longitude = -180; longitude < 180; longitude++) {
    var color = Cesium.Color.PINK;
    if ((longitude % 2) === 0) {
        color = Cesium.Color.CYAN;
    }

    for (var latitude = -90; latitude < 90; latitude++) {
        points.add({
            position : Cesium.Cartesian3.fromDegrees(longitude, latitude),
            color : color
        }).customId = [longitude, latitude];
    }
}

var red = false;
setInterval(function() {
  var myPoints = points._pointPrimitives.filter(function(point){return point.customId[1] > -20 && point.customId[1] < 20;});
  red = !red;
  myPoints.forEach(function(point) {
    point.color = red ? Cesium.Color.GREEN : Cesium.Color.RED;
  })
}, 2000);

此代码切换纬度为-20到20之间的点的颜色。您可以设置任何您想要的自定义属性并使用它(注意 - 此代码不是最佳的,只是用于演示)。 工作范例: http://plnkr.co/edit/DxWMwfdr4L5pfHRlVmlX?p=preview