Обновление сущностей в Cesium

У меня есть несколько объектов, чьи позиции устанавливаются с помощью функции 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 секунды), а затем все объекты не обновляются красиво. Это выглядит очень плохо.

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

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


person Zac    schedule 08.07.2015    source источник
comment
Вы не предоставили достаточно информации и кода, чтобы указать, в чем может быть проблема. Ваша реализация CallbackProperty действительно так проста? Откуда берутся долгота/широта/высота и как они обновляются? Какую визуализацию вы делаете (рекламный щит/модель/и т.д..)? Как выглядит ваше обновление? Вы должны передать результат в качестве 4-го параметра в fromDegrees, но это, вероятно, не главная проблема (хотя определенно повлияет на производительность).   -  person Matthew Amato    schedule 08.07.2015
comment
Я добавил более полный пример кода. На что ссылается «4-й параметр fromDegrees»?   -  person Zac    schedule 08.07.2015
comment
cesiumjs.org/Cesium/Build/Documentation/Cartesian3.html — 4-й параметр эллипсоид, на котором лежит позиция (Ellipsoid.fromCartesian3 Ellipsoid.WGS84 или Ellipsoid.UNIT_SPHERE)   -  person Henry Aloni    schedule 31.12.2015


Ответы (1)


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

person Henry Aloni    schedule 31.12.2015
comment
Спасибо за ответ, проблема точно в масштабировании. У меня есть около 15 тысяч сущностей, которые обновляются с разной скоростью. Я немного пренебрег этим постом, но попытка взять под контроль события кажется хорошей идеей. Что вы имеете в виду под шейдером? - person Zac; 10.01.2016
comment
Реализация собственного шейдера означает реализацию собственного вершинного шейдера (и логики) поверх webGl и подключение его к цезиевому дисплею. См. обсуждение здесь groups.google.com/forum/#!topic /cesium-dev/NyQ-woOhWtU - person Henry Aloni; 11.01.2016
comment
Не могли бы вы уточнить, что вы подразумеваете под обновлением за пределами Cesium? У меня тоже более 300 000 объектов, которые постоянно движутся, а частота кадров почти не снижается. Вы имеете в виду события отключения, которые воздействуют на сущности и излучают их сами только тогда, когда это необходимо? - person JHRS; 04.02.2021