diff --git a/python/plugins/db_manager/db_plugins/plugin.py b/python/plugins/db_manager/db_plugins/plugin.py index 7554b9f2e34..7613fb1dd99 100644 --- a/python/plugins/db_manager/db_plugins/plugin.py +++ b/python/plugins/db_manager/db_plugins/plugin.py @@ -201,25 +201,16 @@ class Database(DbItemObject): from .data_model import SqlResultModel return SqlResultModel(self, sql, parent) - def toSqlLayer(self, sql, geomCol, uniqueCol, layerName="QueryLayer", layerType=None, avoidSelectById=False, srid=None, wkbType=None): + def toSqlLayer(self, sql, geomCol, uniqueCol, layerName="QueryLayer", layerType=None, avoidSelectById=False): from qgis.core import QgsMapLayer, QgsVectorLayer, QgsRasterLayer uri = self.uri() uri.setDataSource("", u"(%s\n)" % sql, geomCol, "", uniqueCol) if avoidSelectById: uri.disableSelectAtId( True ) - if srid != None: - print "SRID is not none but %s" % srid - uri.setSrid( srid ) - if wkbType != None: - print "WkbType is not none but %s" % wkbType - uri.setWkbType( wkbType ) provider = self.dbplugin().providerName() if layerType == QgsMapLayer.RasterLayer: return QgsRasterLayer(uri.uri(), layerName, provider) - print "Creating vector layer -- start, with uri: %s" % uri.uri() - layer = QgsVectorLayer(uri.uri(), layerName, provider) - print "Creating vector layer -- done" - return layer + return QgsVectorLayer(uri.uri(), layerName, provider) def registerAllActions(self, mainWindow): self.registerDatabaseActions(mainWindow) diff --git a/python/plugins/db_manager/db_plugins/postgis/plugins/qgis_topoview/__init__.py b/python/plugins/db_manager/db_plugins/postgis/plugins/qgis_topoview/__init__.py index 5c5320d451f..645dbae7c24 100644 --- a/python/plugins/db_manager/db_plugins/postgis/plugins/qgis_topoview/__init__.py +++ b/python/plugins/db_manager/db_plugins/postgis/plugins/qgis_topoview/__init__.py @@ -82,7 +82,7 @@ def run(item, action, mainwindow): QMessageBox.critical(mainwindow, "Invalid topology", u'Schema "%s" is not registered in topology.topology.' % item.schema().name) return False - toposrid = res[0] + toposrid = str(res[0]) # load layers into the current project toponame = item.schema().name @@ -106,10 +106,26 @@ def run(item, action, mainwindow): # should not be needed: http://hub.qgis.org/issues/6938 legend.setGroupVisible(group, False) - # face - layer = db.toSqlLayer(u'SELECT face_id, topology.ST_GetFaceGeometry(%s, face_id) as geom ' \ - 'FROM %s.face WHERE face_id > 0' % (quoteStr(toponame), quoteId(toponame)), - 'geom', 'face_id', u'%s.face' % toponame, None, False, str(toposrid), QGis.WKBPolygon) + # face mbr + uri.setDataSource(toponame, 'face', 'mbr', '', 'face_id') + uri.setSrid( toposrid ) + uri.setWkbType( QGis.WKBPolygon ) + layer = QgsVectorLayer(uri.uri(), u'%s.face_mbr' % toponame, provider) + layer.loadNamedStyle(os.path.join(template_dir, 'face_mbr.qml')) + registry.addMapLayers([layer]) + legend.setLayerVisible(layer, False) + legend.setLayerExpanded(layer, False) + legend.moveLayer(layer, group) + face_extent = layer.extent() + + # face geometry + sql = u'SELECT face_id, topology.ST_GetFaceGeometry(%s, face_id) as geom ' \ + 'FROM %s.face WHERE face_id > 0' % (quoteStr(toponame), quoteId(toponame)) + uri.setDataSource('', u'(%s\n)' % sql, 'geom', '', 'face_id') + uri.setSrid( toposrid ) + uri.setWkbType( QGis.WKBPolygon ) + layer = QgsVectorLayer(uri.uri(), u'%s.face' % toponame, provider) + layer.setExtent(face_extent) layer.loadNamedStyle(os.path.join(template_dir, 'face.qml')) registry.addMapLayers([layer]) legend.setLayerVisible(layer, False) @@ -117,9 +133,13 @@ def run(item, action, mainwindow): legend.moveLayer(layer, group) # face_seed - layer = db.toSqlLayer(u'SELECT face_id, ST_PointOnSurface(topology.ST_GetFaceGeometry(%s, face_id)) as geom ' \ - 'FROM %s.face WHERE face_id > 0' % (quoteStr(toponame), quoteId(toponame)), - 'geom', 'face_id', u'%s.face_seed' % toponame, None, False, str(toposrid), QGis.WKBPoint) + sql = u'SELECT face_id, ST_PointOnSurface(topology.ST_GetFaceGeometry(%s, face_id)) as geom ' \ + 'FROM %s.face WHERE face_id > 0' % (quoteStr(toponame), quoteId(toponame)) + uri.setDataSource('', u'(%s)' % sql, 'geom', '', 'face_id') + uri.setSrid( toposrid ) + uri.setWkbType( QGis.WKBPolygon ) + layer = QgsVectorLayer(uri.uri(), u'%s.face_seed' % toponame, provider) + layer.setExtent(face_extent) layer.loadNamedStyle(os.path.join(template_dir, 'face_seed.qml')) registry.addMapLayers([layer]) legend.setLayerVisible(layer, False) @@ -136,16 +156,22 @@ def run(item, action, mainwindow): # node uri.setDataSource(toponame, 'node', 'geom', '', 'node_id') + uri.setSrid( toposrid ) + uri.setWkbType( QGis.WKBPoint ) layer = QgsVectorLayer(uri.uri(), u'%s.node' % toponame, provider) layer.loadNamedStyle(os.path.join(template_dir, 'node.qml')) registry.addMapLayers([layer]) legend.setLayerVisible(layer, False) legend.setLayerExpanded(layer, False) legend.moveLayer(layer, group) + node_extent = layer.extent() # node labels uri.setDataSource(toponame, 'node', 'geom', '', 'node_id') + uri.setSrid( toposrid ) + uri.setWkbType( QGis.WKBPoint ) layer = QgsVectorLayer(uri.uri(), u'%s.node_id' % toponame, provider) + layer.setExtent(node_extent) layer.loadNamedStyle(os.path.join(template_dir, 'node_label.qml')) registry.addMapLayers([layer]) legend.setLayerVisible(layer, False) @@ -159,15 +185,21 @@ def run(item, action, mainwindow): # edge uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id') + uri.setSrid( toposrid ) + uri.setWkbType( QGis.WKBLineString ) layer = QgsVectorLayer(uri.uri(), u'%s.edge' % toponame, provider) registry.addMapLayers([layer]) legend.setLayerVisible(layer, False) legend.setLayerExpanded(layer, False) legend.moveLayer(layer, group) + edge_extent = layer.extent() # directed edge uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id') + uri.setSrid( toposrid ) + uri.setWkbType( QGis.WKBLineString ) layer = QgsVectorLayer(uri.uri(), u'%s.directed_edge' % toponame, provider) + layer.setExtent(edge_extent) layer.loadNamedStyle(os.path.join(template_dir, 'edge.qml')) registry.addMapLayers([layer]) legend.setLayerVisible(layer, False) @@ -177,7 +209,10 @@ def run(item, action, mainwindow): # edge labels uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id') + uri.setSrid( toposrid ) + uri.setWkbType( QGis.WKBLineString ) layer = QgsVectorLayer(uri.uri(), u'%s.edge_id' % toponame, provider) + layer.setExtent(edge_extent) layer.loadNamedStyle(os.path.join(template_dir, 'edge_label.qml')) registry.addMapLayers([layer]) legend.setLayerVisible(layer, False) @@ -186,7 +221,10 @@ def run(item, action, mainwindow): # face_left uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id') + uri.setSrid( toposrid ) + uri.setWkbType( QGis.WKBLineString ) layer = QgsVectorLayer(uri.uri(), u'%s.face_left' % toponame, provider) + layer.setExtent(edge_extent) layer.loadNamedStyle(os.path.join(template_dir, 'face_left.qml')) registry.addMapLayers([layer]) legend.setLayerVisible(layer, False) @@ -195,7 +233,10 @@ def run(item, action, mainwindow): # face_right uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id') + uri.setSrid( toposrid ) + uri.setWkbType( QGis.WKBLineString ) layer = QgsVectorLayer(uri.uri(), u'%s.face_right' % toponame, provider) + layer.setExtent(edge_extent) layer.loadNamedStyle(os.path.join(template_dir, 'face_right.qml')) registry.addMapLayers([layer]) legend.setLayerVisible(layer, False) @@ -204,7 +245,10 @@ def run(item, action, mainwindow): # next_left uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id') + uri.setSrid( toposrid ) + uri.setWkbType( QGis.WKBLineString ) layer = QgsVectorLayer(uri.uri(), u'%s.next_left' % toponame, provider) + layer.setExtent(edge_extent) layer.loadNamedStyle(os.path.join(template_dir, 'next_left.qml')) registry.addMapLayers([layer]) legend.setLayerVisible(layer, False) @@ -213,7 +257,10 @@ def run(item, action, mainwindow): # next_right uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id') + uri.setSrid( toposrid ) + uri.setWkbType( QGis.WKBLineString ) layer = QgsVectorLayer(uri.uri(), u'%s.next_right' % toponame, provider) + layer.setExtent(edge_extent) layer.loadNamedStyle(os.path.join(template_dir, 'next_right.qml')) registry.addMapLayers([layer]) legend.setLayerVisible(layer, False) diff --git a/python/plugins/db_manager/db_plugins/postgis/plugins/qgis_topoview/templates/face_mbr.qml b/python/plugins/db_manager/db_plugins/postgis/plugins/qgis_topoview/templates/face_mbr.qml new file mode 100644 index 00000000000..bfc999b2da6 --- /dev/null +++ b/python/plugins/db_manager/db_plugins/postgis/plugins/qgis_topoview/templates/face_mbr.qml @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + 0 + face_id + + + + + + + + + 0 + + generatedlayout + + + +