Skip to content

Commit 02409e9

Browse files
author
Sandro Santilli
committedFeb 8, 2014
Pass extent of loaded views to the provider via URI
Completes the speed up loading of view layers in TopoViewer. Finally and definitely fixes #9510. NOTE: the commit also adds a layer for face's MBR, which serves the purpose (among others) to allow for easy computing extent.
1 parent 4c87b0c commit 02409e9

File tree

3 files changed

+234
-19
lines changed

3 files changed

+234
-19
lines changed
 

‎python/plugins/db_manager/db_plugins/plugin.py

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -201,25 +201,16 @@ def sqlResultModel(self, sql, parent):
201201
from .data_model import SqlResultModel
202202
return SqlResultModel(self, sql, parent)
203203

204-
def toSqlLayer(self, sql, geomCol, uniqueCol, layerName="QueryLayer", layerType=None, avoidSelectById=False, srid=None, wkbType=None):
204+
def toSqlLayer(self, sql, geomCol, uniqueCol, layerName="QueryLayer", layerType=None, avoidSelectById=False):
205205
from qgis.core import QgsMapLayer, QgsVectorLayer, QgsRasterLayer
206206
uri = self.uri()
207207
uri.setDataSource("", u"(%s\n)" % sql, geomCol, "", uniqueCol)
208208
if avoidSelectById:
209209
uri.disableSelectAtId( True )
210-
if srid != None:
211-
print "SRID is not none but %s" % srid
212-
uri.setSrid( srid )
213-
if wkbType != None:
214-
print "WkbType is not none but %s" % wkbType
215-
uri.setWkbType( wkbType )
216210
provider = self.dbplugin().providerName()
217211
if layerType == QgsMapLayer.RasterLayer:
218212
return QgsRasterLayer(uri.uri(), layerName, provider)
219-
print "Creating vector layer -- start, with uri: %s" % uri.uri()
220-
layer = QgsVectorLayer(uri.uri(), layerName, provider)
221-
print "Creating vector layer -- done"
222-
return layer
213+
return QgsVectorLayer(uri.uri(), layerName, provider)
223214

224215
def registerAllActions(self, mainWindow):
225216
self.registerDatabaseActions(mainWindow)

‎python/plugins/db_manager/db_plugins/postgis/plugins/qgis_topoview/__init__.py

Lines changed: 55 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ def run(item, action, mainwindow):
8282
QMessageBox.critical(mainwindow, "Invalid topology", u'Schema "%s" is not registered in topology.topology.' % item.schema().name)
8383
return False
8484

85-
toposrid = res[0]
85+
toposrid = str(res[0])
8686

8787
# load layers into the current project
8888
toponame = item.schema().name
@@ -106,20 +106,40 @@ def run(item, action, mainwindow):
106106
# should not be needed: http://hub.qgis.org/issues/6938
107107
legend.setGroupVisible(group, False)
108108

109-
# face
110-
layer = db.toSqlLayer(u'SELECT face_id, topology.ST_GetFaceGeometry(%s, face_id) as geom ' \
111-
'FROM %s.face WHERE face_id > 0' % (quoteStr(toponame), quoteId(toponame)),
112-
'geom', 'face_id', u'%s.face' % toponame, None, False, str(toposrid), QGis.WKBPolygon)
109+
# face mbr
110+
uri.setDataSource(toponame, 'face', 'mbr', '', 'face_id')
111+
uri.setSrid( toposrid )
112+
uri.setWkbType( QGis.WKBPolygon )
113+
layer = QgsVectorLayer(uri.uri(), u'%s.face_mbr' % toponame, provider)
114+
layer.loadNamedStyle(os.path.join(template_dir, 'face_mbr.qml'))
115+
registry.addMapLayers([layer])
116+
legend.setLayerVisible(layer, False)
117+
legend.setLayerExpanded(layer, False)
118+
legend.moveLayer(layer, group)
119+
face_extent = layer.extent()
120+
121+
# face geometry
122+
sql = u'SELECT face_id, topology.ST_GetFaceGeometry(%s, face_id) as geom ' \
123+
'FROM %s.face WHERE face_id > 0' % (quoteStr(toponame), quoteId(toponame))
124+
uri.setDataSource('', u'(%s\n)' % sql, 'geom', '', 'face_id')
125+
uri.setSrid( toposrid )
126+
uri.setWkbType( QGis.WKBPolygon )
127+
layer = QgsVectorLayer(uri.uri(), u'%s.face' % toponame, provider)
128+
layer.setExtent(face_extent)
113129
layer.loadNamedStyle(os.path.join(template_dir, 'face.qml'))
114130
registry.addMapLayers([layer])
115131
legend.setLayerVisible(layer, False)
116132
legend.setLayerExpanded(layer, False)
117133
legend.moveLayer(layer, group)
118134

119135
# face_seed
120-
layer = db.toSqlLayer(u'SELECT face_id, ST_PointOnSurface(topology.ST_GetFaceGeometry(%s, face_id)) as geom ' \
121-
'FROM %s.face WHERE face_id > 0' % (quoteStr(toponame), quoteId(toponame)),
122-
'geom', 'face_id', u'%s.face_seed' % toponame, None, False, str(toposrid), QGis.WKBPoint)
136+
sql = u'SELECT face_id, ST_PointOnSurface(topology.ST_GetFaceGeometry(%s, face_id)) as geom ' \
137+
'FROM %s.face WHERE face_id > 0' % (quoteStr(toponame), quoteId(toponame))
138+
uri.setDataSource('', u'(%s)' % sql, 'geom', '', 'face_id')
139+
uri.setSrid( toposrid )
140+
uri.setWkbType( QGis.WKBPolygon )
141+
layer = QgsVectorLayer(uri.uri(), u'%s.face_seed' % toponame, provider)
142+
layer.setExtent(face_extent)
123143
layer.loadNamedStyle(os.path.join(template_dir, 'face_seed.qml'))
124144
registry.addMapLayers([layer])
125145
legend.setLayerVisible(layer, False)
@@ -136,16 +156,22 @@ def run(item, action, mainwindow):
136156

137157
# node
138158
uri.setDataSource(toponame, 'node', 'geom', '', 'node_id')
159+
uri.setSrid( toposrid )
160+
uri.setWkbType( QGis.WKBPoint )
139161
layer = QgsVectorLayer(uri.uri(), u'%s.node' % toponame, provider)
140162
layer.loadNamedStyle(os.path.join(template_dir, 'node.qml'))
141163
registry.addMapLayers([layer])
142164
legend.setLayerVisible(layer, False)
143165
legend.setLayerExpanded(layer, False)
144166
legend.moveLayer(layer, group)
167+
node_extent = layer.extent()
145168

146169
# node labels
147170
uri.setDataSource(toponame, 'node', 'geom', '', 'node_id')
171+
uri.setSrid( toposrid )
172+
uri.setWkbType( QGis.WKBPoint )
148173
layer = QgsVectorLayer(uri.uri(), u'%s.node_id' % toponame, provider)
174+
layer.setExtent(node_extent)
149175
layer.loadNamedStyle(os.path.join(template_dir, 'node_label.qml'))
150176
registry.addMapLayers([layer])
151177
legend.setLayerVisible(layer, False)
@@ -159,15 +185,21 @@ def run(item, action, mainwindow):
159185

160186
# edge
161187
uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id')
188+
uri.setSrid( toposrid )
189+
uri.setWkbType( QGis.WKBLineString )
162190
layer = QgsVectorLayer(uri.uri(), u'%s.edge' % toponame, provider)
163191
registry.addMapLayers([layer])
164192
legend.setLayerVisible(layer, False)
165193
legend.setLayerExpanded(layer, False)
166194
legend.moveLayer(layer, group)
195+
edge_extent = layer.extent()
167196

168197
# directed edge
169198
uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id')
199+
uri.setSrid( toposrid )
200+
uri.setWkbType( QGis.WKBLineString )
170201
layer = QgsVectorLayer(uri.uri(), u'%s.directed_edge' % toponame, provider)
202+
layer.setExtent(edge_extent)
171203
layer.loadNamedStyle(os.path.join(template_dir, 'edge.qml'))
172204
registry.addMapLayers([layer])
173205
legend.setLayerVisible(layer, False)
@@ -177,7 +209,10 @@ def run(item, action, mainwindow):
177209

178210
# edge labels
179211
uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id')
212+
uri.setSrid( toposrid )
213+
uri.setWkbType( QGis.WKBLineString )
180214
layer = QgsVectorLayer(uri.uri(), u'%s.edge_id' % toponame, provider)
215+
layer.setExtent(edge_extent)
181216
layer.loadNamedStyle(os.path.join(template_dir, 'edge_label.qml'))
182217
registry.addMapLayers([layer])
183218
legend.setLayerVisible(layer, False)
@@ -186,7 +221,10 @@ def run(item, action, mainwindow):
186221

187222
# face_left
188223
uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id')
224+
uri.setSrid( toposrid )
225+
uri.setWkbType( QGis.WKBLineString )
189226
layer = QgsVectorLayer(uri.uri(), u'%s.face_left' % toponame, provider)
227+
layer.setExtent(edge_extent)
190228
layer.loadNamedStyle(os.path.join(template_dir, 'face_left.qml'))
191229
registry.addMapLayers([layer])
192230
legend.setLayerVisible(layer, False)
@@ -195,7 +233,10 @@ def run(item, action, mainwindow):
195233

196234
# face_right
197235
uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id')
236+
uri.setSrid( toposrid )
237+
uri.setWkbType( QGis.WKBLineString )
198238
layer = QgsVectorLayer(uri.uri(), u'%s.face_right' % toponame, provider)
239+
layer.setExtent(edge_extent)
199240
layer.loadNamedStyle(os.path.join(template_dir, 'face_right.qml'))
200241
registry.addMapLayers([layer])
201242
legend.setLayerVisible(layer, False)
@@ -204,7 +245,10 @@ def run(item, action, mainwindow):
204245

205246
# next_left
206247
uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id')
248+
uri.setSrid( toposrid )
249+
uri.setWkbType( QGis.WKBLineString )
207250
layer = QgsVectorLayer(uri.uri(), u'%s.next_left' % toponame, provider)
251+
layer.setExtent(edge_extent)
208252
layer.loadNamedStyle(os.path.join(template_dir, 'next_left.qml'))
209253
registry.addMapLayers([layer])
210254
legend.setLayerVisible(layer, False)
@@ -213,7 +257,10 @@ def run(item, action, mainwindow):
213257

214258
# next_right
215259
uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id')
260+
uri.setSrid( toposrid )
261+
uri.setWkbType( QGis.WKBLineString )
216262
layer = QgsVectorLayer(uri.uri(), u'%s.next_right' % toponame, provider)
263+
layer.setExtent(edge_extent)
217264
layer.loadNamedStyle(os.path.join(template_dir, 'next_right.qml'))
218265
registry.addMapLayers([layer])
219266
legend.setLayerVisible(layer, False)
Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
2+
<qgis version="2.1.0-Master" minimumScale="-4.65661e-10" maximumScale="1e+08" simplifyDrawingHints="1" minLabelScale="1" maxLabelScale="1e+08" simplifyDrawingTol="1" simplifyMaxScale="1" hasScaleBasedVisibilityFlag="0" simplifyLocal="1" scaleBasedLabelVisibilityFlag="0">
3+
<renderer-v2 symbollevels="0" type="singleSymbol">
4+
<symbols>
5+
<symbol alpha="0.396078" type="fill" name="0">
6+
<layer pass="0" class="SimpleFill" locked="0">
7+
<prop k="border_width_unit" v="MM"/>
8+
<prop k="color" v="170,170,170,255"/>
9+
<prop k="color_border" v="0,0,0,255"/>
10+
<prop k="offset" v="0,0"/>
11+
<prop k="offset_unit" v="MM"/>
12+
<prop k="style" v="solid"/>
13+
<prop k="style_border" v="solid"/>
14+
<prop k="width_border" v="0.26"/>
15+
</layer>
16+
</symbol>
17+
</symbols>
18+
<rotation/>
19+
<sizescale scalemethod="area"/>
20+
</renderer-v2>
21+
<customproperties>
22+
<property key="labeling" value="pal"/>
23+
<property key="labeling/addDirectionSymbol" value="false"/>
24+
<property key="labeling/angleOffset" value="0"/>
25+
<property key="labeling/blendMode" value="0"/>
26+
<property key="labeling/bufferBlendMode" value="0"/>
27+
<property key="labeling/bufferColorA" value="255"/>
28+
<property key="labeling/bufferColorB" value="255"/>
29+
<property key="labeling/bufferColorG" value="255"/>
30+
<property key="labeling/bufferColorR" value="255"/>
31+
<property key="labeling/bufferDraw" value="true"/>
32+
<property key="labeling/bufferJoinStyle" value="64"/>
33+
<property key="labeling/bufferNoFill" value="false"/>
34+
<property key="labeling/bufferSize" value="1"/>
35+
<property key="labeling/bufferSizeInMapUnits" value="false"/>
36+
<property key="labeling/bufferTransp" value="0"/>
37+
<property key="labeling/centroidWhole" value="false"/>
38+
<property key="labeling/decimals" value="0"/>
39+
<property key="labeling/displayAll" value="false"/>
40+
<property key="labeling/dist" value="0"/>
41+
<property key="labeling/distInMapUnits" value="false"/>
42+
<property key="labeling/enabled" value="false"/>
43+
<property key="labeling/fieldName" value="face_id"/>
44+
<property key="labeling/fontBold" value="false"/>
45+
<property key="labeling/fontCapitals" value="0"/>
46+
<property key="labeling/fontFamily" value="DejaVu Sans"/>
47+
<property key="labeling/fontItalic" value="false"/>
48+
<property key="labeling/fontLetterSpacing" value="0"/>
49+
<property key="labeling/fontLimitPixelSize" value="false"/>
50+
<property key="labeling/fontMaxPixelSize" value="10000"/>
51+
<property key="labeling/fontMinPixelSize" value="3"/>
52+
<property key="labeling/fontSize" value="8"/>
53+
<property key="labeling/fontSizeInMapUnits" value="false"/>
54+
<property key="labeling/fontStrikeout" value="false"/>
55+
<property key="labeling/fontUnderline" value="false"/>
56+
<property key="labeling/fontWeight" value="50"/>
57+
<property key="labeling/fontWordSpacing" value="0"/>
58+
<property key="labeling/formatNumbers" value="false"/>
59+
<property key="labeling/isExpression" value="false"/>
60+
<property key="labeling/labelOffsetInMapUnits" value="true"/>
61+
<property key="labeling/labelPerPart" value="false"/>
62+
<property key="labeling/leftDirectionSymbol" value="&lt;"/>
63+
<property key="labeling/limitNumLabels" value="false"/>
64+
<property key="labeling/maxCurvedCharAngleIn" value="20"/>
65+
<property key="labeling/maxCurvedCharAngleOut" value="-20"/>
66+
<property key="labeling/maxNumLabels" value="2000"/>
67+
<property key="labeling/mergeLines" value="false"/>
68+
<property key="labeling/minFeatureSize" value="0"/>
69+
<property key="labeling/multilineAlign" value="0"/>
70+
<property key="labeling/multilineHeight" value="1"/>
71+
<property key="labeling/namedStyle" value="Condensed"/>
72+
<property key="labeling/obstacle" value="true"/>
73+
<property key="labeling/placeDirectionSymbol" value="0"/>
74+
<property key="labeling/placement" value="0"/>
75+
<property key="labeling/placementFlags" value="0"/>
76+
<property key="labeling/plussign" value="false"/>
77+
<property key="labeling/preserveRotation" value="true"/>
78+
<property key="labeling/previewBkgrdColor" value="#ffffff"/>
79+
<property key="labeling/priority" value="5"/>
80+
<property key="labeling/quadOffset" value="4"/>
81+
<property key="labeling/reverseDirectionSymbol" value="false"/>
82+
<property key="labeling/rightDirectionSymbol" value=">"/>
83+
<property key="labeling/scaleMax" value="10000000"/>
84+
<property key="labeling/scaleMin" value="1"/>
85+
<property key="labeling/scaleVisibility" value="false"/>
86+
<property key="labeling/shadowBlendMode" value="6"/>
87+
<property key="labeling/shadowColorB" value="0"/>
88+
<property key="labeling/shadowColorG" value="0"/>
89+
<property key="labeling/shadowColorR" value="0"/>
90+
<property key="labeling/shadowDraw" value="false"/>
91+
<property key="labeling/shadowOffsetAngle" value="135"/>
92+
<property key="labeling/shadowOffsetDist" value="1"/>
93+
<property key="labeling/shadowOffsetGlobal" value="true"/>
94+
<property key="labeling/shadowOffsetUnits" value="1"/>
95+
<property key="labeling/shadowRadius" value="1.5"/>
96+
<property key="labeling/shadowRadiusAlphaOnly" value="false"/>
97+
<property key="labeling/shadowRadiusUnits" value="1"/>
98+
<property key="labeling/shadowScale" value="100"/>
99+
<property key="labeling/shadowTransparency" value="30"/>
100+
<property key="labeling/shadowUnder" value="0"/>
101+
<property key="labeling/shapeBlendMode" value="0"/>
102+
<property key="labeling/shapeBorderColorA" value="255"/>
103+
<property key="labeling/shapeBorderColorB" value="128"/>
104+
<property key="labeling/shapeBorderColorG" value="128"/>
105+
<property key="labeling/shapeBorderColorR" value="128"/>
106+
<property key="labeling/shapeBorderWidth" value="0"/>
107+
<property key="labeling/shapeBorderWidthUnits" value="1"/>
108+
<property key="labeling/shapeDraw" value="false"/>
109+
<property key="labeling/shapeFillColorA" value="255"/>
110+
<property key="labeling/shapeFillColorB" value="255"/>
111+
<property key="labeling/shapeFillColorG" value="255"/>
112+
<property key="labeling/shapeFillColorR" value="255"/>
113+
<property key="labeling/shapeJoinStyle" value="64"/>
114+
<property key="labeling/shapeOffsetUnits" value="1"/>
115+
<property key="labeling/shapeOffsetX" value="0"/>
116+
<property key="labeling/shapeOffsetY" value="0"/>
117+
<property key="labeling/shapeRadiiUnits" value="1"/>
118+
<property key="labeling/shapeRadiiX" value="0"/>
119+
<property key="labeling/shapeRadiiY" value="0"/>
120+
<property key="labeling/shapeRotation" value="0"/>
121+
<property key="labeling/shapeRotationType" value="0"/>
122+
<property key="labeling/shapeSVGFile" value=""/>
123+
<property key="labeling/shapeSizeType" value="0"/>
124+
<property key="labeling/shapeSizeUnits" value="1"/>
125+
<property key="labeling/shapeSizeX" value="0"/>
126+
<property key="labeling/shapeSizeY" value="0"/>
127+
<property key="labeling/shapeTransparency" value="0"/>
128+
<property key="labeling/shapeType" value="0"/>
129+
<property key="labeling/textColorA" value="255"/>
130+
<property key="labeling/textColorB" value="0"/>
131+
<property key="labeling/textColorG" value="0"/>
132+
<property key="labeling/textColorR" value="170"/>
133+
<property key="labeling/textTransp" value="0"/>
134+
<property key="labeling/upsidedownLabels" value="0"/>
135+
<property key="labeling/wrapChar" value=""/>
136+
<property key="labeling/xOffset" value="0"/>
137+
<property key="labeling/xQuadOffset" value="0"/>
138+
<property key="labeling/yOffset" value="0"/>
139+
<property key="labeling/yQuadOffset" value="0"/>
140+
</customproperties>
141+
<blendMode>0</blendMode>
142+
<featureBlendMode>0</featureBlendMode>
143+
<layerTransparency>0</layerTransparency>
144+
<displayfield>face_id</displayfield>
145+
<label>0</label>
146+
<labelattributes>
147+
<label fieldname="" text="Label"/>
148+
<family fieldname="" name="DejaVu Sans"/>
149+
<size fieldname="" units="pt" value="12"/>
150+
<bold fieldname="" on="0"/>
151+
<italic fieldname="" on="0"/>
152+
<underline fieldname="" on="0"/>
153+
<strikeout fieldname="" on="0"/>
154+
<color fieldname="" red="0" blue="0" green="0"/>
155+
<x fieldname=""/>
156+
<y fieldname=""/>
157+
<offset x="0" y="0" units="pt" yfieldname="" xfieldname=""/>
158+
<angle fieldname="" value="0" auto="0"/>
159+
<alignment fieldname="" value="center"/>
160+
<buffercolor fieldname="" red="255" blue="255" green="255"/>
161+
<buffersize fieldname="" units="pt" value="1"/>
162+
<bufferenabled fieldname="" on=""/>
163+
<multilineenabled fieldname="" on=""/>
164+
<selectedonly on=""/>
165+
</labelattributes>
166+
<edittypes>
167+
<edittype labelontop="0" editable="1" type="0" name="face_id"/>
168+
</edittypes>
169+
<editform></editform>
170+
<editforminit></editforminit>
171+
<featformsuppress>0</featformsuppress>
172+
<annotationform></annotationform>
173+
<editorlayout>generatedlayout</editorlayout>
174+
<excludeAttributesWMS/>
175+
<excludeAttributesWFS/>
176+
<attributeactions/>
177+
</qgis>

0 commit comments

Comments
 (0)
Please sign in to comment.