2015-07-08 2 views
2

У меня есть несколько объектов, у которых позиции задаются с помощью функции CallbackProperty.Обновление объектов в цезие

cesium.renderPolygon = function(mapContext, polygon, existingEntity) { 
      var p; 
      if (existingEntity) { 
       p = existingEntity; 
      } else { 
       var polOpts = getStyleOptions(polygon.style); 
       // function for getting location 
       polygon.getHierarachy = new Cesium.CallbackProperty(function(time, result) { 
        var hierarchy = []; 
        for (var i = 0; i < polygon.coordinates.length; i++) { 
         var coordinate = polygon.coordinates[i]; 
         hierarchy.push(Cesium.Cartesian3.fromDegrees(coordinate.longitude, coordinate.latitude, coordinate.altitude)); 
        } 
        return hierarchy; 
       }, false); 

       polOpts.hierarchy = polygon.getHierarachy; 

       p = mapContext.entities.add({ 
        name: polygon.name, 
        polygon: polOpts 
       }); 
      } 
      return p; 
     }; 

Если я добавлю единое целое, он, похоже, отлично работает. Поскольку я добавляю больше, есть задержка (1-3 секунды), и тогда все сущности не обновляются красиво. Это выглядит очень плохо.

Есть ли способ ограничить количество раз, когда это обновляет объекты. Я читал документацию Цези, но ничего не могу найти по этому поводу.

Или есть лучший способ динамически и последовательно обновлять объекты?

+1

Вы не указали достаточную информацию и код, чтобы указать, в чем проблема. Действительно ли ваша реализация CallbackProperty проста? Откуда берутся долгота/широта/высота и как они обновляются? Какую визуализацию вы делаете (рекламный щит/модель/и т. Д.)? Как выглядит ваше обновление? Вы должны передавать результат как 4-й параметр fromDegrees, но это, вероятно, не основная проблема (хотя это определенно повлияет на производительность). –

+0

Я добавил более полный образец кода. Что означает «4-й параметр toDegrees»? – Zac

+0

https://cesiumjs.org/Cesium/Build/Documentation/Cartesian3.html - 4-й параметр - это эллипсоид, на котором находится позиция (Ellipsoid.fromCartesian3 Ellipsoid.WGS84 или Ellipsoid.UNIT_SPHERE) –

ответ

1

Руководство Cesium утверждает, что API-интерфейс Entity API обеспечивает гибкую высокоэффективную визуализацию, демонстрируя последовательный, простой в освоении и простой в использовании интерфейс. У меня есть опыт, чтобы сказать вам, что обновление снаружи цезия работает быстрее. Вы также можете использовать EntitiCollection (https://cesiumjs.org/Cesium/Build/Documentation/EntityCollection.html?classFilter=EntityCol) для getByID, suspendEvents и removeEvents для упорядочивания цезия для обновления только тогда, когда вы готовы. Мы смогли обновить 1000 объектов каждые 200 мс таким образом, не повредив производительность вообще. Мы выяснили, что если вам нужны лучшие результаты (например, 10 тыс. Сущностей каждые 200 мс), вам нужно будет реализовать свой собственный шейдер.

+0

Спасибо за ответ, масштабирование - проблема наверняка. У меня около 15 тыс. Сущностей, которые обновляются по разным ставкам. Я немного проигнорировал этот пост, но поиск контроля над событиями кажется хорошей идеей. Что вы имеете в виду с «Shader»? – Zac

+0

Реализация собственного шейдера означает реализацию собственного вершинного шейдера (и логики) поверх webGl и подключение его к дисплею цезия. См. Обсуждение здесь https://groups.google.com/forum/#!topic/cesium-dev/NyQ-woOhWtU –

Смежные вопросы