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

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
JustOnce
Новоприбывший
Сообщения: 6
Зарегистрирован: 03 сен 2015, 10:51
Репутация: 0

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

Сообщение JustOnce » 09 сен 2015, 18:42

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

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

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

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

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

Сообщение Дмитрий Барышников » 10 сен 2015, 00:04

1000 объектов это очень мало. У меня 500 000 в QGIS довольно быстро перерисовываются. Вы в QGIS те же данные смотрели что и в своем приложении, там также медленно? И медленно - это сколько?

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

JustOnce
Новоприбывший
Сообщения: 6
Зарегистрирован: 03 сен 2015, 10:51
Репутация: 0

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

Сообщение JustOnce » 10 сен 2015, 10:25

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

konst555
Активный участник
Сообщения: 214
Зарегистрирован: 11 авг 2015, 16:13
Репутация: 47

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

Сообщение konst555 » 10 сен 2015, 13:37

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

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

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

Сообщение Дмитрий Барышников » 11 сен 2015, 10:42

Мне кажется вы рисуете неверно. Для динамических данных, вам надо рисовать поверх карты, а вы меняете контент слоя, что вызывает перерисовку карты.

JustOnce
Новоприбывший
Сообщения: 6
Зарегистрирован: 03 сен 2015, 10:51
Репутация: 0

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

Сообщение JustOnce » 11 сен 2015, 11:28

Рисовать динамические данные поверх карты средствами QGIS или сторонним инструментом?

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

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

Сообщение Дмитрий Барышников » 11 сен 2015, 21:57

Ну либо средствами QGIS http://anitagraser.com/2015/05/08/traje ... ut-effect/ либо самостоятельно.

yellow-sky
Гуру
Сообщения: 588
Зарегистрирован: 30 мар 2009, 21:53
Репутация: 55
Откуда: Королев

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

Сообщение yellow-sky » 30 сен 2015, 09:42

Поставьте период вывода перерисовки больше вашего обычного периода - например 15 сек.

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

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя