Страница 1 из 2
Отображение карты из PostGis
Добавлено: 25 янв 2012, 15:03
anton21
Хочу использовать QGis для отображения карты из PostGIS.
В качестве теста скачал
http://gis-lab.info/data/vmap0/eur-sql.7z и залил файл trans_road_l.sql в Postgress/PostGis -данные о дорогах в Европе.После чего запускаю QGis и настраиваю его на PostGis - дороги нарисовались.
Вопрос: Почему отрисовка происходит очень медленно - при каждом скроле или передвижении карты программа начинает долго думать?Посмотрел в БД там всего 160000 записей, непонятно если она при таких обьемах тормозит, то возможно ли таким образом загрузить карту России и нормально работать? Может мне нужно как то создать индексы для БД ? Да и почему при масштабировании карты отрисовываются все данные, даже те которых при таком масштабе не должно быть видно - может это как то настраивается?
Re: Отображение карты из PostGis
Добавлено: 25 янв 2012, 15:22
Voltron
Используемая ОС и версия QGIS? Индексы в базе построены?
Включите кеш ренедера в настройках QGIS («Settings-Options-Rendering-Use render caching...»)
Re: Отображение карты из PostGis
Добавлено: 25 янв 2012, 15:45
anton21
Windows7. Насчет индексов не знаю - я просто выполнил sql скрипт trans_road_l.sql из
http://gis-lab.info/data/vmap0/eur-sql.7z и все - как их строить? Так же пробовал подключиться к
Сервер: gis-lab.info
База: osm
Порт: 5432
Имя/пароль: guest/guest
так же при работе с любым слоем тормозит.
Геометрический объект, в котором много точек, но его нужно показать на картинке 100*100 - Почему QGis не выбрасывает точки (которые не сильно изменится геометрия).
Re: Отображение карты из PostGis
Добавлено: 25 янв 2012, 16:17
Voltron
Про индексы написано
здесь.
anton21 писал(а):Геометрический объект, в котором много точек, но его нужно показать на картинке 100*100 - Почему QGis не выбрасывает точки (которые не сильно изменится геометрия).
Если правильно понял, то речь идет о генерализации полигонов/линий. Насколько знаю, «на лету» это и в другом ПО не делается.
P.S.: версию QGIS вы так и не озвучили
Re: Отображение карты из PostGis
Добавлено: 25 янв 2012, 16:43
anton21
Тогда как мне в QGis отобразить карту России из Postgres/PostGis, при этом я бы мог производить манипуляции с картой(перемещение , скролл) например как в Google , а не ждать перерисовки карты при каждом действии- это возможно?
А если я буду использовать QGis в своей программе как карту - смогу ли я нормаль грузить карту из Postgress/Postgis(то есть будет ли достаточно быстро происходить растеризация вектора)?
В том же Open Street Map используется Mapnik - при растеризации вектора в масштабе мира он же не рисует(откидывает) поселки.
Re: Отображение карты из PostGis
Добавлено: 25 янв 2012, 17:14
Voltron
anton21 писал(а):В том же Open Street Map используется Mapnik - при растеризации вектора в масштабе мира он же не рисует(откидывает) поселки.
Настройте отрисовку в зависимости от масштаба
Re: Отображение карты из PostGis
Добавлено: 25 янв 2012, 17:48
anton21
Не совсем понял поясните пожалуйста.
А как в QGis настроить отрисовку в зависимости от масштаба - и может это зависеть от проекции?
Хотелось бы понять как в том же Mapnik задается при каком масштабе что отбрасывать?
Re: Отображение карты из PostGis
Добавлено: 25 янв 2012, 17:57
Максим Дубинин
PostGIS тут непричем.
Вы пытаетесь загрузить в программу большой объем данных, миллионы узлов, разумеется она тормозит (при том, что QGIS и сам по себе не быстр).
OSM быстро показывает данные потому что это растр, а не вектор, если вы попробуете сконвертировать shape в osm.xml и загрузить в редактор - тормозить будет не меньше, а может больше. Конечно OSM и любой другой веб-сервис карт выкидывает часть данных при показе всего мира, это суть генерализации - упрощения данных.
И напоследок построение индекса (свойства слоя)

Re: Отображение карты из PostGis
Добавлено: 25 янв 2012, 18:08
anton21
То есть получается в QGis нельзя работать с картой России(OSM) которая на лету рендериться из вектора?
Может можно как то включить отрисовку в зависимости от масштаба(т.е чтобы обращала на zoom level), ведб тот же Mapnik рендерит как то с учетом zoom level?
Re: Отображение карты из PostGis
Добавлено: 25 янв 2012, 18:29
Дмитрий Барышников
У вас все перепуталось.
Mapnik и иже с ним это WMS сервисы которые растр выдают с нужным zoom level, а PostGIS - это база пространственных данных, что-то круче шейпа или таба. Т.е. PostGIS это источник данных и для QGIS и для WMS серверов.
Re: Отображение карты из PostGis
Добавлено: 25 янв 2012, 19:09
Voltron
anton21 писал(а):Может можно как то включить отрисовку в зависимости от масштаба(т.е чтобы обращала на zoom level)
Да, можно. Каждый слой может отображаться в своем диапазоне масштабов. Например, если у вас отображается все Россия, то отрисовывать здания нет смысла.
Re: Отображение карты из PostGis
Добавлено: 25 янв 2012, 21:32
Максим Дубинин
anton21, и разберитесь окончательно с разницей между понятиями растр и вектор
Re: Отображение карты из PostGis
Добавлено: 26 янв 2012, 10:49
anton21
Упрощаю вопрос: Как пользоваться картой России(OSM) в QGis, если она храниться в Postgres/PostGis словно работаешь с картой на openstreetmap.ru(если у вас отображается все Россия, то отрисовывать здания нет смысла)?
Ситуация следующая - я заливаю Россия.osm в Postgres/PostGis, после этого я хочу с помощью api QGIS(qgis_core.dll qgis_gui.dll и т.п) получить картинку из PostGis(т.е QGis возьмет вектор и отрендерит его).Так вот мне не понятно как она поймет(может это как то задается?) что при масштабе страны не нужно отрисовывать здания?Может быть в Postgres/Postgis данные залитые из Россия.osm храняться ввиде слоев для определенного zoom level и в определенные момент нужно отрисовывать слой для текущего zoomlevel?
Re: Отображение карты из PostGis
Добавлено: 26 янв 2012, 11:33
Voltron
anton21 писал(а):Упрощаю вопрос: Как пользоваться картой России(OSM) в QGis, если она храниться в Postgres/PostGis словно работаешь с картой на openstreetmap.ru(если у вас отображается все Россия, то отрисовывать здания нет смысла)?
Провторяю ответ

. Настроить отображение слоёв в зависимости от масштаба. Еще можно выполнить генерализацию некоторых слоев и на определенных масштабах использовать не полный, а генерализированный слой.
anton21 писал(а):Ситуация следующая - я заливаю Россия.osm в Postgres/PostGis, после этого я хочу с помощью api QGIS(qgis_core.dll qgis_gui.dll и т.п) получить картинку из PostGis(т.е QGis возьмет вектор и отрендерит его).Так вот мне не понятно как она поймет(может это как то задается?) что при масштабе страны не нужно отрисовывать здания?
Совершенно верно, «это как то задается». Через все то же «api QGIS(qgis_core.dll qgis_gui.dll и т.п)».
anton21 писал(а):Может быть в Postgres/Postgis данные залитые из Россия.osm храняться ввиде слоев для определенного zoom level и в определенные момент нужно отрисовывать слой для текущего zoomlevel?
Вы опять путаетесь. PostgreSQL/PostGIS это хранилище данных и больше ничего. Его задача — отдать данные по запросу в ваше приложение. А что приложение будет с ними делать, и как отображать — это уже не забота PostGIS.
Re: Отображение карты из PostGis
Добавлено: 26 янв 2012, 11:40
anton21
Как сказать QGis что при таком масштабе отображай такой то слой , а при другом нет?