Найкращий спосіб анімації радіолокаційних даних у відкритих шарах


9

У мене є проект із використанням OpenLayers, який відображає радіолокаційні дані на карті. Самі дані радіолокатора - це лише купа полігонів, кожен з яких заповнений одним із 6 можливих кольорів. Мета - анімувати радари на карті. Кожен файл містить радіолокаційні дані за певний час, і файли розділені приблизно на 5 хвилин, тому мій поточний підхід полягає в тому, щоб переглядати всі файли та завантажувати їх один за одним у нові окремі шари. Після того, як кожен шар буде створений, його видимість встановлена ​​на хибну, і він додається до карти. Потім я анімую шари за допомогою таймера, який вмикає видимість одного шару і вимикає видимість попереднього шару. В даний час шари - це всі векторні шари, і дані завантажуються з KML-файлів, хоча файли даних можуть бути майже будь-якого формату, які найкраще працюватимуть для цього проекту.

Проблема такого підходу полягає в тому, що як тільки я потрапляю на досить великий проміжок часу (приблизно 3 години або близько того) даних (що становить приблизно 36 шарів), споживання пам'яті стає досить високим (близько 250 Мб). Кінцевий продукт повинен мати можливість обробляти до 18 годин даних в одному циклі, що, виходячи з вищевказаного числа, вимагатиме понад 1 Гб оперативної пам'яті лише для анімації, і, швидше за все, вийде з ладу веб-переглядача або принаймні зробить його дуже млявим.

Я спробував те ж саме, використовуючи WMS-шари для кожного шару, але перемальовування було занадто повільним (анімація змінює шари кожні 100 мс), а споживання пам'яті було не набагато кращим, ніж векторна версія.

Я переглянув мережу, намагаючись знайти якийсь приклад, як це зробити, але поки що я виходжу з порожніми руками. Хтось там має якісь пропозиції, як це зробити? Я прийму будь-які ідеї, які ви маєте на даний момент, оскільки я вже тиждень зациклювався на цьому, не маючи жодної відповіді.

Відповіді:


9

Спробуйте розсувне вікно сортування. Ви можете буферувати 10 шарів одночасно. Почніть руйнувати шари та видаляти їх з DOM та пам'яті, як тільки ви досягнете 10 шарів. Отже, коли ви потрапляєте на шар 10, шар 0-9 руйнується, а шари 20-30 завантажуються з видимістю на помилку. Це дасть вам буфер приблизно в 10 шарів, але ви можете змінити допуск, як вважаєте, що підходить для продуктивності. Якщо вам здається, що 20 шарів працює краще, перейдіть з 20.

          {Destroy Layers} |10|11...19|20| {Start Loading Layers}
|---------------------------------------------------------------------------|
                           
        Timespan           Current Possition

Ви, сер, геній! Я ще не реалізував це на практиці, але я не бачу причин, щоб він не працював, а регульований буфер означає, що ми можемо додатково налаштувати це для різних середовищ. Я не можу подякувати вам за цю пропозицію!
TheOx

Дякую, я сподіваюся, що це працює на практиці. Дайте нам знати, як це виходить.
CaptDragon

Щойно завершено початкове тестування, і воно працює добре! У коді ще є можливість оптимізації, але цей спосіб зменшує слід пам’яті та налаштовується на основі пам’яті та пропускної здатності клієнтської машини. Ще раз дякую за чудову пропозицію!
TheOx

Дивовижно, добре це чути.
CaptDragon

@CaptDragon: (або TheOx) Чи можна було б опублікувати робочий приклад? Я розумію рішення до певної точки, але бачення простого прикладу і коду могло б допомогти, оскільки у мене майже однакова проблема. Дякую!
tekcreator

1

Чи вирішили ви спростити векторні шари, щоб зменшити їх розмір файлу. Якщо багатокутники містять більше вершин, ніж потрібно для потреб вашого дисплея, то спрощення (згладжування) їх зменшить розмір файлу за рахунок зменшення деталей. Я не впевнений, яке програмне забезпечення у вас є, але декілька програм для настільних систем GIS містять функцію геообробки для спрощення функцій.


Це гарна ідея, але, на жаль, проект вимагає відображення даних у повному дозволі. Однак я пам’ятаю, що для деяких інших шарів даних вниз дорога, де ми могли б використовувати цей трюк.
TheOx

1

Окрім спрощення даних (навіть небагато може економити багато місця), ви спробували MapServer або інший спосіб перетворення даних у плитки прозорістю та створення шару карти, щоб лежати на верхньому шарі фону. Я бачив такий підхід з хороплетними картами, які містять сотні до сотень тисяч полігонів (або маркерів), але ще не змогли його спробувати (із-за потреби сервера).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.