16
16
'''
17
17
import qgis
18
18
import unittest
19
+ import os
20
+ import glob
21
+ import shutil
22
+ import tempfile
19
23
from utilities import getQgisTestApp , unitTestDataPath
20
24
from PyQt4 .QtCore import QFileInfo , QRectF , qWarning
21
- from qgis .core import QGis , QgsVectorLayer , QgsMapLayerRegistry , QgsMapRenderer , QgsCoordinateReferenceSystem , QgsComposition , QgsFillSymbolV2 , QgsSingleSymbolRendererV2 , QgsComposerLabel , QgsComposerMap , QgsFontUtils , QgsRectangle
25
+ from qgis .core import QGis , QgsVectorLayer , QgsMapLayerRegistry , QgsMapRenderer , QgsCoordinateReferenceSystem , \
26
+ QgsComposition , QgsFillSymbolV2 , QgsSingleSymbolRendererV2 , QgsComposerLabel , QgsComposerMap , QgsFontUtils , \
27
+ QgsRectangle
22
28
from qgscompositionchecker import QgsCompositionChecker
23
29
24
30
QGISAPP , CANVAS , IFACE , PARENT = getQgisTestApp ()
25
31
26
- class TestQgsAtlasComposition (unittest .TestCase ):
27
32
33
+ class TestQgsAtlasComposition (unittest .TestCase ):
28
34
def testCase (self ):
29
35
self .TEST_DATA_DIR = unitTestDataPath ()
30
- vectorFileInfo = QFileInfo ( self .TEST_DATA_DIR + "/france_parts.shp" )
31
- mVectorLayer = QgsVectorLayer ( vectorFileInfo .filePath (), vectorFileInfo .completeBaseName (), "ogr" )
36
+ tmppath = tempfile .mkdtemp ()
37
+ for file in glob .glob (os .path .join (self .TEST_DATA_DIR , 'france_parts.*' )):
38
+ shutil .copy (os .path .join (self .TEST_DATA_DIR , file ), tmppath )
39
+ vectorFileInfo = QFileInfo (tmppath + "/france_parts.shp" )
40
+ mVectorLayer = QgsVectorLayer (vectorFileInfo .filePath (), vectorFileInfo .completeBaseName (), "ogr" )
32
41
33
- QgsMapLayerRegistry .instance ().addMapLayers ( [mVectorLayer ] )
42
+ QgsMapLayerRegistry .instance ().addMapLayers ([mVectorLayer ])
34
43
35
44
# create composition with composer map
36
45
mMapRenderer = QgsMapRenderer ()
37
46
layerStringList = []
38
- layerStringList .append ( mVectorLayer .id () )
39
- mMapRenderer .setLayerSet ( layerStringList )
40
- mMapRenderer .setProjectionsEnabled ( True )
41
- mMapRenderer .setMapUnits ( QGis .Meters )
47
+ layerStringList .append (mVectorLayer .id ())
48
+ mMapRenderer .setLayerSet (layerStringList )
49
+ mMapRenderer .setProjectionsEnabled (True )
50
+ mMapRenderer .setMapUnits (QGis .Meters )
42
51
43
52
# select epsg:2154
44
53
crs = QgsCoordinateReferenceSystem ()
45
- crs .createFromSrid ( 2154 )
46
- mMapRenderer .setDestinationCrs ( crs )
54
+ crs .createFromSrid (2154 )
55
+ mMapRenderer .setDestinationCrs (crs )
47
56
48
- self .mComposition = QgsComposition ( mMapRenderer )
49
- self .mComposition .setPaperSize ( 297 , 210 )
57
+ self .mComposition = QgsComposition (mMapRenderer )
58
+ self .mComposition .setPaperSize (297 , 210 )
50
59
51
60
# fix the renderer, fill with green
52
- props = { "color" : "0,127,0" }
53
- fillSymbol = QgsFillSymbolV2 .createSimple ( props )
54
- renderer = QgsSingleSymbolRendererV2 ( fillSymbol )
55
- mVectorLayer .setRendererV2 ( renderer )
61
+ props = {"color" : "0,127,0" }
62
+ fillSymbol = QgsFillSymbolV2 .createSimple (props )
63
+ renderer = QgsSingleSymbolRendererV2 (fillSymbol )
64
+ mVectorLayer .setRendererV2 (renderer )
56
65
57
66
# the atlas map
58
- self .mAtlasMap = QgsComposerMap ( self .mComposition , 20 , 20 , 130 , 130 )
59
- self .mAtlasMap .setFrameEnabled ( True )
60
- self .mComposition .addComposerMap ( self .mAtlasMap )
67
+ self .mAtlasMap = QgsComposerMap (self .mComposition , 20 , 20 , 130 , 130 )
68
+ self .mAtlasMap .setFrameEnabled (True )
69
+ self .mComposition .addComposerMap (self .mAtlasMap )
61
70
62
71
# the atlas
63
72
self .mAtlas = self .mComposition .atlasComposition ()
64
- self .mAtlas .setCoverageLayer ( mVectorLayer )
65
- self .mAtlas .setEnabled ( True )
66
- self .mComposition .setAtlasMode ( QgsComposition .ExportAtlas )
73
+ self .mAtlas .setCoverageLayer (mVectorLayer )
74
+ self .mAtlas .setEnabled (True )
75
+ self .mComposition .setAtlasMode (QgsComposition .ExportAtlas )
67
76
68
77
# an overview
69
- mOverview = QgsComposerMap ( self .mComposition , 180 , 20 , 50 , 50 )
70
- mOverview .setFrameEnabled ( True )
71
- mOverview .setOverviewFrameMap ( self .mAtlasMap .id () )
72
- self .mComposition .addComposerMap ( mOverview )
73
- nextent = QgsRectangle ( 49670.718 , 6415139.086 , 699672.519 , 7065140.887 )
74
- mOverview .setNewExtent ( nextent )
78
+ mOverview = QgsComposerMap (self .mComposition , 180 , 20 , 50 , 50 )
79
+ mOverview .setFrameEnabled (True )
80
+ mOverview .setOverviewFrameMap (self .mAtlasMap .id ())
81
+ self .mComposition .addComposerMap (mOverview )
82
+ nextent = QgsRectangle (49670.718 , 6415139.086 , 699672.519 , 7065140.887 )
83
+ mOverview .setNewExtent (nextent )
75
84
76
85
# set the fill symbol of the overview map
77
- props2 = { "color" : "127,0,0,127" }
78
- fillSymbol2 = QgsFillSymbolV2 .createSimple ( props2 )
79
- mOverview .setOverviewFrameMapSymbol ( fillSymbol2 )
86
+ props2 = {"color" : "127,0,0,127" }
87
+ fillSymbol2 = QgsFillSymbolV2 .createSimple (props2 )
88
+ mOverview .setOverviewFrameMapSymbol (fillSymbol2 )
80
89
81
90
# header label
82
- self .mLabel1 = QgsComposerLabel ( self .mComposition )
83
- self .mComposition .addComposerLabel ( self .mLabel1 )
84
- self .mLabel1 .setText ( "[% \" NAME_1\" %] area" )
85
- self .mLabel1 .setFont ( QgsFontUtils .getStandardTestFont () )
91
+ self .mLabel1 = QgsComposerLabel (self .mComposition )
92
+ self .mComposition .addComposerLabel (self .mLabel1 )
93
+ self .mLabel1 .setText ("[% \" NAME_1\" %] area" )
94
+ self .mLabel1 .setFont (QgsFontUtils .getStandardTestFont ())
86
95
self .mLabel1 .adjustSizeToText ()
87
- self .mLabel1 .setSceneRect ( QRectF ( 150 , 5 , 60 , 15 ) )
96
+ self .mLabel1 .setSceneRect (QRectF (150 , 5 , 60 , 15 ) )
88
97
89
- qWarning ( "header label font: %s exactMatch:%s" % ( self .mLabel1 .font ().toString (), self .mLabel1 .font ().exactMatch () ) )
98
+ qWarning (
99
+ "header label font: %s exactMatch:%s" % (self .mLabel1 .font ().toString (), self .mLabel1 .font ().exactMatch ()))
90
100
91
101
# feature number label
92
- self .mLabel2 = QgsComposerLabel ( self .mComposition )
93
- self .mComposition .addComposerLabel ( self .mLabel2 )
94
- self .mLabel2 .setText ( "# [%$feature || ' / ' || $numfeatures%]" )
95
- self .mLabel2 .setFont ( QgsFontUtils .getStandardTestFont () )
102
+ self .mLabel2 = QgsComposerLabel (self .mComposition )
103
+ self .mComposition .addComposerLabel (self .mLabel2 )
104
+ self .mLabel2 .setText ("# [%$feature || ' / ' || $numfeatures%]" )
105
+ self .mLabel2 .setFont (QgsFontUtils .getStandardTestFont ())
96
106
self .mLabel2 .adjustSizeToText ()
97
- self .mLabel2 .setSceneRect ( QRectF ( 150 , 200 , 60 , 15 ) )
107
+ self .mLabel2 .setSceneRect (QRectF (150 , 200 , 60 , 15 ) )
98
108
99
- qWarning ( "feature number label font: %s exactMatch:%s" % ( self .mLabel2 .font ().toString (), self .mLabel2 .font ().exactMatch () ) )
109
+ qWarning ("feature number label font: %s exactMatch:%s" % (
110
+ self .mLabel2 .font ().toString (), self .mLabel2 .font ().exactMatch ()))
100
111
101
112
self .filename_test ()
102
113
self .autoscale_render_test ()
@@ -105,25 +116,27 @@ def testCase(self):
105
116
self .predefinedscales_render_test ()
106
117
self .hidden_render_test ()
107
118
108
- def filename_test ( self ):
119
+ shutil . rmtree ( tmppath )
109
120
110
- self .mAtlas .setFilenamePattern ( "'output_' || $feature" )
121
+ def filename_test (self ):
122
+
123
+ self .mAtlas .setFilenamePattern ("'output_' || $feature" )
111
124
self .mAtlas .beginRender ()
112
125
for i in range (0 , self .mAtlas .numFeatures ()):
113
- self .mAtlas .prepareForFeature ( i )
114
- expected = "output_%d" % (i + 1 )
126
+ self .mAtlas .prepareForFeature (i )
127
+ expected = "output_%d" % (i + 1 )
115
128
assert self .mAtlas .currentFilename () == expected
116
129
self .mAtlas .endRender ()
117
130
118
- def autoscale_render_test ( self ):
119
- self .mAtlasMap .setAtlasDriven ( True )
120
- self .mAtlasMap .setAtlasScalingMode ( QgsComposerMap .Auto )
121
- self .mAtlasMap .setAtlasMargin ( 0.10 )
131
+ def autoscale_render_test (self ):
132
+ self .mAtlasMap .setAtlasDriven (True )
133
+ self .mAtlasMap .setAtlasScalingMode (QgsComposerMap .Auto )
134
+ self .mAtlasMap .setAtlasMargin (0.10 )
122
135
123
136
self .mAtlas .beginRender ()
124
137
125
138
for i in range (0 , 2 ):
126
- self .mAtlas .prepareForFeature ( i )
139
+ self .mAtlas .prepareForFeature (i )
127
140
self .mLabel1 .adjustSizeToText ()
128
141
129
142
checker = QgsCompositionChecker ('atlas_autoscale%d' % (i + 1 ), self .mComposition )
@@ -132,19 +145,19 @@ def autoscale_render_test( self ):
132
145
assert myTestResult
133
146
self .mAtlas .endRender ()
134
147
135
- self .mAtlasMap .setAtlasDriven ( False )
136
- self .mAtlasMap .setAtlasScalingMode ( QgsComposerMap .Fixed )
137
- self .mAtlasMap .setAtlasMargin ( 0 )
148
+ self .mAtlasMap .setAtlasDriven (False )
149
+ self .mAtlasMap .setAtlasScalingMode (QgsComposerMap .Fixed )
150
+ self .mAtlasMap .setAtlasMargin (0 )
138
151
139
- def autoscale_render_test_old_api ( self ):
140
- self .mAtlas .setComposerMap ( self .mAtlasMap )
141
- self .mAtlas .setFixedScale ( False )
142
- self .mAtlas .setMargin ( 0.10 )
152
+ def autoscale_render_test_old_api (self ):
153
+ self .mAtlas .setComposerMap (self .mAtlasMap )
154
+ self .mAtlas .setFixedScale (False )
155
+ self .mAtlas .setMargin (0.10 )
143
156
144
157
self .mAtlas .beginRender ()
145
158
146
159
for i in range (0 , 2 ):
147
- self .mAtlas .prepareForFeature ( i )
160
+ self .mAtlas .prepareForFeature (i )
148
161
self .mLabel1 .adjustSizeToText ()
149
162
150
163
checker = QgsCompositionChecker ('atlas_autoscale_old_api%d' % (i + 1 ), self .mComposition )
@@ -153,20 +166,20 @@ def autoscale_render_test_old_api( self ):
153
166
assert myTestResult
154
167
self .mAtlas .endRender ()
155
168
156
- self .mAtlas .setFixedScale ( True )
157
- self .mAtlas .setMargin ( 0 )
158
- self .mAtlas .setComposerMap ( None )
159
- self .mAtlasMap .setAtlasDriven ( False )
169
+ self .mAtlas .setFixedScale (True )
170
+ self .mAtlas .setMargin (0 )
171
+ self .mAtlas .setComposerMap (None )
172
+ self .mAtlasMap .setAtlasDriven (False )
160
173
161
- def fixedscale_render_test ( self ):
162
- self .mAtlasMap .setNewExtent ( QgsRectangle ( 209838.166 , 6528781.020 , 610491.166 , 6920530.620 ) )
163
- self .mAtlasMap .setAtlasDriven ( True )
164
- self .mAtlasMap .setAtlasScalingMode ( QgsComposerMap .Fixed )
174
+ def fixedscale_render_test (self ):
175
+ self .mAtlasMap .setNewExtent (QgsRectangle (209838.166 , 6528781.020 , 610491.166 , 6920530.620 ) )
176
+ self .mAtlasMap .setAtlasDriven (True )
177
+ self .mAtlasMap .setAtlasScalingMode (QgsComposerMap .Fixed )
165
178
166
179
self .mAtlas .beginRender ()
167
180
168
181
for i in range (0 , 2 ):
169
- self .mAtlas .prepareForFeature ( i )
182
+ self .mAtlas .prepareForFeature (i )
170
183
self .mLabel1 .adjustSizeToText ()
171
184
172
185
checker = QgsCompositionChecker ('atlas_fixedscale%d' % (i + 1 ), self .mComposition )
@@ -175,20 +188,20 @@ def fixedscale_render_test( self ):
175
188
assert myTestResult
176
189
self .mAtlas .endRender ()
177
190
178
- def predefinedscales_render_test ( self ):
179
- self .mAtlasMap .setNewExtent ( QgsRectangle ( 209838.166 , 6528781.020 , 610491.166 , 6920530.620 ) )
180
- self .mAtlasMap .setAtlasDriven ( True )
181
- self .mAtlasMap .setAtlasScalingMode ( QgsComposerMap .Predefined )
191
+ def predefinedscales_render_test (self ):
192
+ self .mAtlasMap .setNewExtent (QgsRectangle (209838.166 , 6528781.020 , 610491.166 , 6920530.620 ) )
193
+ self .mAtlasMap .setAtlasDriven (True )
194
+ self .mAtlasMap .setAtlasScalingMode (QgsComposerMap .Predefined )
182
195
183
196
scales = [1800000 , 5000000 ]
184
- self .mAtlas .setPredefinedScales ( scales )
197
+ self .mAtlas .setPredefinedScales (scales )
185
198
for i , s in enumerate (self .mAtlas .predefinedScales ()):
186
199
assert s == scales [i ]
187
200
188
201
self .mAtlas .beginRender ()
189
202
190
203
for i in range (0 , 2 ):
191
- self .mAtlas .prepareForFeature ( i )
204
+ self .mAtlas .prepareForFeature (i )
192
205
self .mLabel1 .adjustSizeToText ()
193
206
194
207
checker = QgsCompositionChecker ('atlas_predefinedscales%d' % (i + 1 ), self .mComposition )
@@ -197,15 +210,15 @@ def predefinedscales_render_test( self ):
197
210
assert myTestResult
198
211
self .mAtlas .endRender ()
199
212
200
- def hidden_render_test ( self ):
201
- self .mAtlasMap .setNewExtent ( QgsRectangle ( 209838.166 , 6528781.020 , 610491.166 , 6920530.620 ) )
202
- self .mAtlasMap .setAtlasScalingMode ( QgsComposerMap .Fixed )
203
- self .mAtlas .setHideCoverage ( True )
213
+ def hidden_render_test (self ):
214
+ self .mAtlasMap .setNewExtent (QgsRectangle (209838.166 , 6528781.020 , 610491.166 , 6920530.620 ) )
215
+ self .mAtlasMap .setAtlasScalingMode (QgsComposerMap .Fixed )
216
+ self .mAtlas .setHideCoverage (True )
204
217
205
218
self .mAtlas .beginRender ()
206
219
207
220
for i in range (0 , 2 ):
208
- self .mAtlas .prepareForFeature ( i )
221
+ self .mAtlas .prepareForFeature (i )
209
222
self .mLabel1 .adjustSizeToText ()
210
223
211
224
checker = QgsCompositionChecker ('atlas_hiding%d' % (i + 1 ), self .mComposition )
@@ -214,19 +227,19 @@ def hidden_render_test( self ):
214
227
assert myTestResult
215
228
self .mAtlas .endRender ()
216
229
217
- def sorting_render_test ( self ):
218
- self .mAtlasMap .setNewExtent ( QgsRectangle ( 209838.166 , 6528781.020 , 610491.166 , 6920530.620 ) )
219
- self .mAtlasMap .setAtlasScalingMode ( QgsComposerMap .Fixed )
220
- self .mAtlas .setHideCoverage ( False )
230
+ def sorting_render_test (self ):
231
+ self .mAtlasMap .setNewExtent (QgsRectangle (209838.166 , 6528781.020 , 610491.166 , 6920530.620 ) )
232
+ self .mAtlasMap .setAtlasScalingMode (QgsComposerMap .Fixed )
233
+ self .mAtlas .setHideCoverage (False )
221
234
222
- self .mAtlas .setSortFeatures ( True )
223
- self .mAtlas .setSortKeyAttributeIndex ( 4 ) # departement name
224
- self .mAtlas .setSortAscending ( False )
235
+ self .mAtlas .setSortFeatures (True )
236
+ self .mAtlas .setSortKeyAttributeIndex (4 ) # departement name
237
+ self .mAtlas .setSortAscending (False )
225
238
226
239
self .mAtlas .beginRender ()
227
240
228
241
for i in range (0 , 2 ):
229
- self .mAtlas .prepareForFeature ( i )
242
+ self .mAtlas .prepareForFeature (i )
230
243
self .mLabel1 .adjustSizeToText ()
231
244
232
245
checker = QgsCompositionChecker ('atlas_sorting%d' % (i + 1 ), self .mComposition )
@@ -235,20 +248,20 @@ def sorting_render_test( self ):
235
248
assert myTestResult
236
249
self .mAtlas .endRender ()
237
250
238
- def filtering_render_test ( self ):
239
- self .mAtlasMap .setNewExtent ( QgsRectangle ( 209838.166 , 6528781.020 , 610491.166 , 6920530.620 ) )
240
- self .mAtlasMap .setAtlasScalingMode ( QgsComposerMap .Fixed )
241
- self .mAtlas .setHideCoverage ( False )
251
+ def filtering_render_test (self ):
252
+ self .mAtlasMap .setNewExtent (QgsRectangle (209838.166 , 6528781.020 , 610491.166 , 6920530.620 ) )
253
+ self .mAtlasMap .setAtlasScalingMode (QgsComposerMap .Fixed )
254
+ self .mAtlas .setHideCoverage (False )
242
255
243
- self .mAtlas .setSortFeatures ( False )
256
+ self .mAtlas .setSortFeatures (False )
244
257
245
- self .mAtlas .setFilterFeatures ( True )
246
- self .mAtlas .setFeatureFilter ( "substr(NAME_1,1,1)='P'" ) # select only 'Pays de la loire'
258
+ self .mAtlas .setFilterFeatures (True )
259
+ self .mAtlas .setFeatureFilter ("substr(NAME_1,1,1)='P'" ) # select only 'Pays de la loire'
247
260
248
261
self .mAtlas .beginRender ()
249
262
250
263
for i in range (0 , 1 ):
251
- self .mAtlas .prepareForFeature ( i )
264
+ self .mAtlas .prepareForFeature (i )
252
265
self .mLabel1 .adjustSizeToText ()
253
266
254
267
checker = QgsCompositionChecker ('atlas_filtering%d' % (i + 1 ), self .mComposition )
@@ -257,5 +270,6 @@ def filtering_render_test( self ):
257
270
assert myTestResult
258
271
self .mAtlas .endRender ()
259
272
273
+
260
274
if __name__ == '__main__' :
261
275
unittest .main ()
0 commit comments