GIS-LAB

Географические информационные системы и дистанционное зондирование

Запрос SELECT как векторный слой в QGIS

voltron, 04.05.2010

Долгое время в QGIS отсутствовала возможность отображать результаты пространственных  SELECT-запросов к базам PostGIS. Другими словами не было возможности отобразить на карте результат чего-то похожего на

SELECT id, st_union(the_geom) FROM spatial_table GROUP BY id;

Но теперь, благодаря работе проделанной Giuseppe Sucameli и Jurgen E. Fischer это стало возможным. Недавно принятый патч позволяет выполнять произвольные запросы через провайдер PostgreSQL.

К сожалению, на сегодняшний день пользовательский интерфейс отсутствует, но пользоваться этой несомненно полезной функцией можно из Консоли Python. Например этот код можно использоваться чтобы взять слой растительности из БД Geosample и выполнить операцию объединения по полю eco_name_1:

db_conn = "dbname='geosample' host=gis-lab.info port=5432 user='guest' password='guest'"
id_field = "eco_name_l"
table = "(select eco_name_l, st_union(the_geom) as the_geom from ecoregions group by eco_name_l)"
uri = "%s key=%s table='%s' (the_geom) sql=" % ( db_conn, id_field, table, )
layer = QgsVectorLayer( uri, "testlayer", "postgres" )

созданный слой можно добавить на карту:

QgsMapLayerRegistry.instance().addMapLayer( layer )

Кроме того, можно обращаться к объектам слоя и выполнять измерения

provider = layer.dataProvider()
feat = QgsFeature()
provider.select([], QgsRectangle())
provider.nextFeature(feat)
dist = QgsDistanceArea()
dist.measure(feat.geometry())

См. также пост в блоге Carson Farmer’а

Оставьте комментарий


(Геокруг)

Если Вы обнаружили на сайте ошибку, выберите фрагмент текста и нажмите Ctrl+Enter