Как настроить таргетинг на конкретную точку в коллекции Cesium pointprimitive?

Я работаю над тем, как показать/скрыть точки, чтобы отфильтровать данные, которые я показываю в PointPrimitiveCollection на цезиевом глобусе. Я знаю, что вы можете ориентироваться по номеру индекса, но мне интересно, есть ли способ добавить какие-то метаданные к точкам, чтобы я мог ориентироваться на них на основе этих значений?


person Jessie Contour    schedule 05.06.2017    source источник


Ответы (1)


Вы можете добавить свойство после создания точки (эта строка: 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

person yccteam    schedule 21.08.2017