Страница 1 из 1

Перерисовка слоев в своем приложении

Добавлено: 09 сен 2015, 18:42
JustOnce
Добрый день!
Наверняка этот вопрос уже обсуждался неоднократно, но я только недавно перешел с продуктов Панорамы на использование QGis и никак не могу прояснить для себя такой вопрос:
загружаю в своем c++ приложении через canvas (или в сам QGis 2.10) переконвертированный sxf или пусть даже shp-файл с достаточно большим количеством объектов(в пределах 1000), то каждая перерисовка идет слева-направо очень долгое время, каждое смещение карты или изменение масштаба, добавление объектов и прочее вызывает перерисовку карты и снова эту долгую загрузку.

Можно ли как-то заставить qgis отображать карту уже полностью отрисованной, а не постепенно рисовать в отдельном потоке? Чтобы пользователь в любой момент времени видел всю карту, а не ее отрисовку?

Заранее благодарен за помощь!

Re: Перерисовка слоев в своем приложении

Добавлено: 10 сен 2015, 00:04
Дмитрий Барышников
1000 объектов это очень мало. У меня 500 000 в QGIS довольно быстро перерисовываются. Вы в QGIS те же данные смотрели что и в своем приложении, там также медленно? И медленно - это сколько?

Идею не показывать карту до полной отрисовки - это что то из прошлого, где после каждого сдвига экран очищался и все замирало на сколько то секунд (минут, часов) пока все не отрисоывавалось. Все современные ГИС показывают хоть что-то в первые секунды, что бы панить дальше можно было.

Re: Перерисовка слоев в своем приложении

Добавлено: 10 сен 2015, 10:25
JustOnce
То, что картой можно управлять во время отрисовки - это здорово, но проблема в том, что в том же QGIS после каждого сдвига, смены масштаба, добавления объекта экран полностью очищается и потом заново секунду-две-десять(в зависимости от числа векторных объектов) перерисовывается слева-направо. Можно ли как-то сделать, чтобы при сдвиге уже нарисованная область не обнулялась, а только дорисовывалась появившаяся новая, при смене масштаба просто прорисовалась на месте старой с другой детализацией, после добавления объекта дорисовывался сам объект на карте?
А то у нас, например, в реальном времени отрисовывается траектория движения объекта - что тоже приводит к полной перерисовке карты.

Re: Перерисовка слоев в своем приложении

Добавлено: 10 сен 2015, 13:37
konst555
Это вы зря так про QGIS. В отличии от других программ в нем все прозрачно, а QT движок для графики очень быстрый.
Во-первых, оцените что отображаете? Объекты в файлах, базе данных, их формат, содержимое. Например, взял векторную топо карту России в формате ArcGIS mdb - очень медленно, перевел в файловую базу - gdb - ожила, но если разобрать на shape, то снова заткнется.
Во-вторых, QGIS -> Параметры -> отрисовка. Небольшое загрубление не помешает. Есть настройки и у каждого слоя.
В-третьих, если карта медленно отрисовывается, а предыдущие пункты соблюдены, то значит она не для масштаба вашего отображения. Делайте пирамиды. Например. У меня была карта России миллионного масштаба, но в масштабах 5 млн и более будет рисоваться медленно. Делаем прореживание всех векторов и настраиваем отображение разных слоев при разных масштабах. При обзоре пользователь видит одни слои, а при приближении - другие. Скорость возросла многократно.
... Это бесконечная тема. Главное не зацикливаться на этом, а понять что и как происходит.

Re: Перерисовка слоев в своем приложении

Добавлено: 11 сен 2015, 10:42
Дмитрий Барышников
Мне кажется вы рисуете неверно. Для динамических данных, вам надо рисовать поверх карты, а вы меняете контент слоя, что вызывает перерисовку карты.

Re: Перерисовка слоев в своем приложении

Добавлено: 11 сен 2015, 11:28
JustOnce
Рисовать динамические данные поверх карты средствами QGIS или сторонним инструментом?

Re: Перерисовка слоев в своем приложении

Добавлено: 11 сен 2015, 21:57
Дмитрий Барышников
Ну либо средствами QGIS http://anitagraser.com/2015/05/08/traje ... ut-effect/ либо самостоятельно.

Re: Перерисовка слоев в своем приложении

Добавлено: 30 сен 2015, 09:42
yellow-sky
Поставьте период вывода перерисовки больше вашего обычного периода - например 15 сек.

[ Сообщение с мобильного устройства ]