2015-05-18 2 views
3

Может кто-нибудь, пожалуйста, скажите мне, что случилось с этим фрагментом кода?Отображение полилинии (с некоторой высотой) в цезие

Cesium.Math.setRandomNumberSeed(1234); 

    var viewer = new Cesium.Viewer('cesiumContainer'); 
    var entities = viewer.entities; 
    var boxes = entities.add(new Cesium.Entity()); 
    var polylines = new Cesium.PolylineCollection(); 

    //Create the entities and assign each entity's parent to the group to which it belongs. 
    for (var i = 0; i < 5; ++i) { 
     var height = 100000.0 + (200000.0 * i); 
     entities.add({ 
      parent : boxes, 
      position : Cesium.Cartesian3.fromDegrees(-106.0, 45.0, height), 
      box : { 
       dimensions : new Cesium.Cartesian3(90000.0, 90000.0, 90000.0), 
       material : Cesium.Color.fromRandom({alpha : 1.0}) 
      } 
     }); 
     entities.add({ 
      parent : polylines, 
      position : Cesium.Cartesian3.fromDegrees(-86.0, 55.0, height), 
      polyline : { 
       width : new Cesium.ConstantProperty(2), 
       material : Cesium.Color.fromRandom({alpha : 1.0}), 
       followSurface : new Cesium.ConstantProperty(false) 
      } 
     }); 
    } 
    viewer.zoomTo(viewer.entities); 

Он отображает окна в заданные координаты, но когда я пытаюсь нарисовать поли-линии дает эту ошибку: Uncaught TypeError: Не удается прочитать свойство «толчок» неопределенных (на линии 300 из https://cesiumjs.org/Cesium/Source/DataSources/Entity.js)

Я хочу что-то вроде этого https://cesiumjs.org/Cesium/Apps/Sandcastle/index.html?src=Custom%20DataSource.html&label=Showcases

Спасибо заранее.

ответ

1

Вы смешиваете API-интерфейс Entity (API более высокого уровня с отслеживаемыми объектами с именами и описаниями) с API примитивной графики (ниже расположенный ниже слой, который просто отображает графические примитивы).

EDIT: Похож на то, что Скотт Рейнольдс также ответил на это для вас на mailing list, и вы опубликовали следующий вопрос. Здесь я заимствовал код «вертикальных линий» от Скотта, удалил «родительские» отношения, так как они, похоже, не используются здесь, и добавили описания интерактивных описаний с информацией обо всех объектах.

Cesium.Math.setRandomNumberSeed(1234); 

var viewer = new Cesium.Viewer('cesiumContainer'); 
var entities = viewer.entities; 

var prevHeight = 0.0; 
for (var i = 0; i < 5; ++i) { 
    var height = 100000.0 + (200000.0 * i); 
    entities.add({ 
     name : 'Box ' + i, 
     description : 'This box is at height: ' + height.toLocaleString() + ' m', 
     position : Cesium.Cartesian3.fromDegrees(-106.0, 45.0, height), 
     box : { 
      dimensions : new Cesium.Cartesian3(90000.0, 90000.0, 90000.0), 
      material : Cesium.Color.fromRandom({alpha : 1.0}) 
     } 
    }); 
    entities.add({ 
     name : 'Line ' + i, 
     description : 'This line is from height ' + prevHeight.toLocaleString() + 
      ' m to height ' + height.toLocaleString() + ' m', 
     position : Cesium.Cartesian3.fromDegrees(-86.0, 55.0, height), 
     polyline : { 
      positions: [ 
       Cesium.Cartesian3.fromDegrees(-86.0, 55.0, prevHeight), 
       Cesium.Cartesian3.fromDegrees(-86.0, 55.0, height) 
      ], 
      width : new Cesium.ConstantProperty(2), 
      material : Cesium.Color.fromRandom({alpha : 1.0}), 
      followSurface : new Cesium.ConstantProperty(false) 
     } 
    }); 

    prevHeight = height; 
} 
viewer.zoomTo(viewer.entities); 
+0

Большое спасибо @emackey. Оно работает. Но я хочу показать полилинию вертикально. Как и в [this] (https://cesiumjs.org/Cesium/Apps/Sandcastle/index.html?src=Custom%20DataSource.html&label=Showcases) – Mushu

+0

Обновлен мой ответ. – emackey