Как отобразить коллекцию полилиний в Cesium?

Должно быть, я делаю что-то просто неправильно, потому что после прочтения документов я не уверен, как отобразить коллекцию полилиний в 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;
}

Я не уверен, что другие средства документации укажут мне на то, чтобы отобразить их. Любая помощь приветствуется.


person ThePartyTurtle    schedule 10.01.2017    source источник


Ответы (1)


Здесь вы смешиваете слои Cesium API. Cesium имеет 2 разных уровня общедоступного API: слой «Сущность» и слой «Примитивный». Слой Primitive предназначен для графических примитивов: вся коллекция полилиний фактически является одним графическим примитивом (внутри это один «вызов отрисовки»), набор рекламных щитов — это еще один отдельный примитив и т. д. «Сущность» предназначена для более высокого уровня. Концепция объекта или транспортного средства на уровне уровня, например, один объект грузовика может иметь рекламный щит, метку и полилинию, которые показывают, где находится грузовик и где он был. Набор отдельных объектов будет использовать один набор рекламных щитов, а также один набор полилиний и т. д. по соображениям производительности графики.

Обычно рекомендуется использовать слой Entity там, где это возможно или целесообразно, так как это позволяет вам думать с точки зрения объектов реального мира, а не наборов графических примитивов. Но иногда у вас есть такая большая коллекция статических примитивов, что более эффективно просто отправить эту коллекцию напрямую.

В демо, на которое вы ссылаетесь, код создает несколько объектов и прикрепляет полилинию к каждому из них. Но в опубликованном вами коде вы вручную создаете PolylineCollection и пытаетесь отобразить его. Итак, чтобы исправить ваш код, удалите эту строку:

viewer.entites.add(Polyline)

и добавьте эту строку:

viewer.scene.primitives.add(polylines);

Обратите внимание, что polylines объявлен в вашем коде, а Polyline — это просто класс. Также обратите внимание, что мы добавляем polylineCollection как scene.primitive, а не entity.

В зависимости от того, для чего вы действительно используете это, может быть лучше или не лучше удалить свой код здесь и повторно скопировать демонстрационный код сущности, на который вы ссылались, и использовать вместо этого эту форму.

person emackey    schedule 10.01.2017
comment
Ах, это имеет смысл! Блин, я пропускал документацию, просто пытаясь сделать что-то конкретное; Я пропустил некоторые основные понятия. Спасибо тебе за пояснение. В моем фактическом приложении полилиний у меня будет много полилиний, опорные местоположения которых являются объектами, но которые на самом деле не связаны с объектом объекта (поскольку они должны быть скрыты/показаны/представлены в моей модели данных независимо). Поэтому я думаю, что в этом случае я мог бы оставить их примитивными, пока я все еще могу назначать им местоположения конечных точек. Просто сейчас мысли вслух. Ваш ответ прояснил мое замешательство. Спасибо! - person ThePartyTurtle; 11.01.2017