Skip to content

Commit de96fc7

Browse files
committedFeb 25, 2019
tests for scaled symbol sizes
1 parent 3e86163 commit de96fc7

File tree

6 files changed

+539
-0
lines changed

6 files changed

+539
-0
lines changed
 

‎tests/src/python/test_qgsserver_wms_getlegendgraphic.py

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,106 @@ def test_wms_GetLegendGraphic_wmsRootName(self):
555555
self.assertEqual(-1, h.find(b'Content-Type: text/xml; charset=utf-8'), "Header: %s\nResponse:\n%s" % (h, r))
556556
self.assertNotEqual(-1, h.find(b'Content-Type: image/png'), "Header: %s\nResponse:\n%s" % (h, r))
557557

558+
def test_wms_GetLegendGraphic_ScaleSymbol_Min(self):
559+
# 1:500000000 min
560+
qs = "?" + "&".join(["%s=%s" % i for i in list({
561+
"MAP": self.testdata_path + 'test_project_scaledsymbols.qgs',
562+
"SERVICE": "WMS",
563+
"REQUEST": "GetLegendGraphic",
564+
"LAYER": "testlayer",
565+
"FORMAT": "image/png",
566+
"HEIGHT": "550",
567+
"WIDTH": "850",
568+
"BBOX": "-608.4,-1002.6,698.2,1019.0",
569+
"CRS": "EPSG:4326"
570+
}.items())])
571+
572+
r, h = self._result(self._execute_request(qs))
573+
self._img_diff_error(r, h, "WMS_GetLegendGraphic_ScaleSymbol_Min", max_size_diff=QSize(1, 1))
574+
575+
# 1:1000000000 min
576+
qs = "?" + "&".join(["%s=%s" % i for i in list({
577+
"MAP": self.testdata_path + 'test_project_scaledsymbols.qgs',
578+
"SERVICE": "WMS",
579+
"REQUEST": "GetLegendGraphic",
580+
"LAYER": "testlayer",
581+
"FORMAT": "image/png",
582+
"HEIGHT": "550",
583+
"WIDTH": "850",
584+
"BBOX": "-1261.7,-2013.5,1351.5,2029.9",
585+
"CRS": "EPSG:4326"
586+
}.items())])
587+
588+
r, h = self._result(self._execute_request(qs))
589+
self._img_diff_error(r, h, "WMS_GetLegendGraphic_ScaleSymbol_Min", max_size_diff=QSize(1, 1))
590+
591+
def test_wms_GetLegendGraphic_ScaleSymbol_Scaled_01(self):
592+
# 1:10000000 scaled
593+
qs = "?" + "&".join(["%s=%s" % i for i in list({
594+
"MAP": self.testdata_path + 'test_project_scaledsymbols.qgs',
595+
"SERVICE": "WMS",
596+
"REQUEST": "GetLegendGraphic",
597+
"LAYER": "testlayer",
598+
"FORMAT": "image/png",
599+
"HEIGHT": "550",
600+
"WIDTH": "850",
601+
"BBOX": "31.8,-12.0,58.0,28.4",
602+
"CRS": "EPSG:4326"
603+
}.items())])
604+
605+
r, h = self._result(self._execute_request(qs))
606+
self._img_diff_error(r, h, "WMS_GetLegendGraphic_ScaleSymbol_Scaled_01", max_size_diff=QSize(1, 1))
607+
608+
def test_wms_GetLegendGraphic_ScaleSymbol_Scaled_02(self):
609+
# 1:15000000 scaled
610+
qs = "?" + "&".join(["%s=%s" % i for i in list({
611+
"MAP": self.testdata_path + 'test_project_scaledsymbols.qgs',
612+
"SERVICE": "WMS",
613+
"REQUEST": "GetLegendGraphic",
614+
"LAYER": "testlayer",
615+
"FORMAT": "image/png",
616+
"HEIGHT": "550",
617+
"WIDTH": "850",
618+
"BBOX": "25.3,-22.1,64.5,38.5",
619+
"CRS": "EPSG:4326"
620+
}.items())])
621+
622+
r, h = self._result(self._execute_request(qs))
623+
self._img_diff_error(r, h, "WMS_GetLegendGraphic_ScaleSymbol_Scaled_02", max_size_diff=QSize(1, 1))
624+
625+
def test_wms_GetLegendGraphic_ScaleSymbol_Max(self):
626+
# 1:100000 max
627+
qs = "?" + "&".join(["%s=%s" % i for i in list({
628+
"MAP": self.testdata_path + 'test_project_scaledsymbols.qgs',
629+
"SERVICE": "WMS",
630+
"REQUEST": "GetLegendGraphic",
631+
"LAYER": "testlayer",
632+
"FORMAT": "image/png",
633+
"HEIGHT": "550",
634+
"WIDTH": "850",
635+
"BBOX": "44.8,8.0,45.0,8.4",
636+
"CRS": "EPSG:4326"
637+
}.items())])
638+
639+
r, h = self._result(self._execute_request(qs))
640+
self._img_diff_error(r, h, "WMS_GetLegendGraphic_ScaleSymbol_Max", max_size_diff=QSize(1, 1))
641+
642+
# 1:1000000 max
643+
qs = "?" + "&".join(["%s=%s" % i for i in list({
644+
"MAP": self.testdata_path + 'test_project_scaledsymbols.qgs',
645+
"SERVICE": "WMS",
646+
"REQUEST": "GetLegendGraphic",
647+
"LAYER": "testlayer",
648+
"FORMAT": "image/png",
649+
"HEIGHT": "550",
650+
"WIDTH": "850",
651+
"BBOX": "43.6,6.2,46.2,10.2",
652+
"CRS": "EPSG:4326"
653+
}.items())])
654+
655+
r, h = self._result(self._execute_request(qs))
656+
self._img_diff_error(r, h, "WMS_GetLegendGraphic_ScaleSymbol_Max", max_size_diff=QSize(1, 1))
657+
558658

559659
if __name__ == '__main__':
560660
unittest.main()
Lines changed: 439 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,439 @@
1+
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
2+
<qgis projectname="" version="3.5.0-Master">
3+
<homePath path=""/>
4+
<title></title>
5+
<autotransaction active="0"/>
6+
<evaluateDefaultValues active="0"/>
7+
<trust active="0"/>
8+
<projectCrs>
9+
<spatialrefsys>
10+
<proj4>+proj=longlat +datum=WGS84 +no_defs</proj4>
11+
<srsid>3452</srsid>
12+
<srid>4326</srid>
13+
<authid>EPSG:4326</authid>
14+
<description>WGS 84</description>
15+
<projectionacronym>longlat</projectionacronym>
16+
<ellipsoidacronym>WGS84</ellipsoidacronym>
17+
<geographicflag>true</geographicflag>
18+
</spatialrefsys>
19+
</projectCrs>
20+
<layer-tree-group>
21+
<customproperties/>
22+
<layer-tree-layer providerKey="ogr" expanded="1" checked="Qt::Checked" name="testlayer" id="testlayer_91fbc4ae_de21_417e_b7df_7e0e792194fb" source="./testlayer.shp">
23+
<customproperties/>
24+
</layer-tree-layer>
25+
<custom-order enabled="0">
26+
<item>testlayer_91fbc4ae_de21_417e_b7df_7e0e792194fb</item>
27+
</custom-order>
28+
</layer-tree-group>
29+
<snapping-settings unit="1" tolerance="12" enabled="0" mode="2" intersection-snapping="0" type="1">
30+
<individual-layer-settings>
31+
<layer-setting units="1" tolerance="12" enabled="0" id="testlayer_91fbc4ae_de21_417e_b7df_7e0e792194fb" type="1"/>
32+
</individual-layer-settings>
33+
</snapping-settings>
34+
<relations/>
35+
<mapcanvas annotationsVisible="1" name="theMapCanvas">
36+
<units>degrees</units>
37+
<extent>
38+
<xmin>-11.39541144866212186</xmin>
39+
<ymin>25.30257481872632752</ymin>
40+
<xmax>27.80240601175979265</xmax>
41+
<ymax>64.50039234803233512</ymax>
42+
</extent>
43+
<rotation>0</rotation>
44+
<destinationsrs>
45+
<spatialrefsys>
46+
<proj4>+proj=longlat +datum=WGS84 +no_defs</proj4>
47+
<srsid>3452</srsid>
48+
<srid>4326</srid>
49+
<authid>EPSG:4326</authid>
50+
<description>WGS 84</description>
51+
<projectionacronym>longlat</projectionacronym>
52+
<ellipsoidacronym>WGS84</ellipsoidacronym>
53+
<geographicflag>true</geographicflag>
54+
</spatialrefsys>
55+
</destinationsrs>
56+
<rendermaptile>0</rendermaptile>
57+
<expressionContextScope/>
58+
</mapcanvas>
59+
<projectModels/>
60+
<legend updateDrawingOrder="true">
61+
<legendlayer drawingOrder="-1" checked="Qt::Checked" name="testlayer" open="true" showFeatureCount="0">
62+
<filegroup hidden="false" open="true">
63+
<legendlayerfile isInOverview="0" layerid="testlayer_91fbc4ae_de21_417e_b7df_7e0e792194fb" visible="1"/>
64+
</filegroup>
65+
</legendlayer>
66+
</legend>
67+
<mapViewDocks/>
68+
<mapcanvas annotationsVisible="1" name="mAreaCanvas">
69+
<units>degrees</units>
70+
<extent>
71+
<xmin>0</xmin>
72+
<ymin>0</ymin>
73+
<xmax>0</xmax>
74+
<ymax>0</ymax>
75+
</extent>
76+
<rotation>0</rotation>
77+
<destinationsrs>
78+
<spatialrefsys>
79+
<proj4>+proj=longlat +datum=WGS84 +no_defs</proj4>
80+
<srsid>3452</srsid>
81+
<srid>4326</srid>
82+
<authid>EPSG:4326</authid>
83+
<description>WGS 84</description>
84+
<projectionacronym>longlat</projectionacronym>
85+
<ellipsoidacronym>WGS84</ellipsoidacronym>
86+
<geographicflag>true</geographicflag>
87+
</spatialrefsys>
88+
</destinationsrs>
89+
<rendermaptile>0</rendermaptile>
90+
<expressionContextScope/>
91+
</mapcanvas>
92+
<mapcanvas annotationsVisible="1" name="mAreaCanvas">
93+
<units>degrees</units>
94+
<extent>
95+
<xmin>0</xmin>
96+
<ymin>0</ymin>
97+
<xmax>0</xmax>
98+
<ymax>0</ymax>
99+
</extent>
100+
<rotation>0</rotation>
101+
<destinationsrs>
102+
<spatialrefsys>
103+
<proj4>+proj=longlat +datum=WGS84 +no_defs</proj4>
104+
<srsid>3452</srsid>
105+
<srid>4326</srid>
106+
<authid>EPSG:4326</authid>
107+
<description>WGS 84</description>
108+
<projectionacronym>longlat</projectionacronym>
109+
<ellipsoidacronym>WGS84</ellipsoidacronym>
110+
<geographicflag>true</geographicflag>
111+
</spatialrefsys>
112+
</destinationsrs>
113+
<rendermaptile>0</rendermaptile>
114+
<expressionContextScope/>
115+
</mapcanvas>
116+
<mapcanvas annotationsVisible="1" name="mAreaCanvas">
117+
<units>degrees</units>
118+
<extent>
119+
<xmin>0</xmin>
120+
<ymin>0</ymin>
121+
<xmax>0</xmax>
122+
<ymax>0</ymax>
123+
</extent>
124+
<rotation>0</rotation>
125+
<destinationsrs>
126+
<spatialrefsys>
127+
<proj4>+proj=longlat +datum=WGS84 +no_defs</proj4>
128+
<srsid>3452</srsid>
129+
<srid>4326</srid>
130+
<authid>EPSG:4326</authid>
131+
<description>WGS 84</description>
132+
<projectionacronym>longlat</projectionacronym>
133+
<ellipsoidacronym>WGS84</ellipsoidacronym>
134+
<geographicflag>true</geographicflag>
135+
</spatialrefsys>
136+
</destinationsrs>
137+
<rendermaptile>0</rendermaptile>
138+
<expressionContextScope/>
139+
</mapcanvas>
140+
<projectlayers>
141+
<maplayer refreshOnNotifyMessage="" geometry="Point" autoRefreshEnabled="0" simplifyAlgorithm="0" simplifyMaxScale="1" minScale="1e+8" readOnly="0" autoRefreshTime="0" styleCategories="AllStyleCategories" hasScaleBasedVisibilityFlag="0" simplifyDrawingTol="1" simplifyLocal="1" refreshOnNotifyEnabled="0" simplifyDrawingHints="0" labelsEnabled="0" type="vector" maxScale="0">
142+
<extent>
143+
<xmin>8.20345930703634352</xmin>
144+
<ymin>44.90139483904469131</ymin>
145+
<xmax>8.20354699399348775</xmax>
146+
<ymax>44.90148252600183554</ymax>
147+
</extent>
148+
<id>testlayer_91fbc4ae_de21_417e_b7df_7e0e792194fb</id>
149+
<datasource>./testlayer.shp</datasource>
150+
<keywordList>
151+
<value></value>
152+
</keywordList>
153+
<layername>testlayer</layername>
154+
<srs>
155+
<spatialrefsys>
156+
<proj4>+proj=longlat +datum=WGS84 +no_defs</proj4>
157+
<srsid>3452</srsid>
158+
<srid>4326</srid>
159+
<authid>EPSG:4326</authid>
160+
<description>WGS 84</description>
161+
<projectionacronym>longlat</projectionacronym>
162+
<ellipsoidacronym>WGS84</ellipsoidacronym>
163+
<geographicflag>true</geographicflag>
164+
</spatialrefsys>
165+
</srs>
166+
<resourceMetadata>
167+
<identifier></identifier>
168+
<parentidentifier></parentidentifier>
169+
<language></language>
170+
<type></type>
171+
<title></title>
172+
<abstract></abstract>
173+
<contact>
174+
<name></name>
175+
<organization></organization>
176+
<position></position>
177+
<voice></voice>
178+
<fax></fax>
179+
<email></email>
180+
<role></role>
181+
</contact>
182+
<links/>
183+
<fees></fees>
184+
<encoding></encoding>
185+
<crs>
186+
<spatialrefsys>
187+
<proj4></proj4>
188+
<srsid>0</srsid>
189+
<srid>0</srid>
190+
<authid></authid>
191+
<description></description>
192+
<projectionacronym></projectionacronym>
193+
<ellipsoidacronym></ellipsoidacronym>
194+
<geographicflag>false</geographicflag>
195+
</spatialrefsys>
196+
</crs>
197+
<extent>
198+
<spatial maxy="0" maxz="0" dimensions="2" maxx="0" minx="0" minz="0" crs="" miny="0"/>
199+
<temporal>
200+
<period>
201+
<start></start>
202+
<end></end>
203+
</period>
204+
</temporal>
205+
</extent>
206+
</resourceMetadata>
207+
<provider encoding="UTF-8">ogr</provider>
208+
<vectorjoins/>
209+
<layerDependencies/>
210+
<dataDependencies/>
211+
<legend type="default-vector"/>
212+
<expressionfields/>
213+
<map-layer-style-manager current="default">
214+
<map-layer-style name="default"/>
215+
</map-layer-style-manager>
216+
<auxiliaryLayer/>
217+
<flags>
218+
<Identifiable>1</Identifiable>
219+
<Removable>1</Removable>
220+
<Searchable>1</Searchable>
221+
</flags>
222+
<renderer-v2 forceraster="0" enableorderby="0" symbollevels="0" type="singleSymbol">
223+
<symbols>
224+
<symbol clip_to_extent="1" force_rhr="0" name="0" alpha="1" type="marker">
225+
<layer class="SimpleMarker" enabled="1" locked="0" pass="0">
226+
<prop k="angle" v="0"/>
227+
<prop k="color" v="243,166,178,255"/>
228+
<prop k="horizontal_anchor_point" v="1"/>
229+
<prop k="joinstyle" v="bevel"/>
230+
<prop k="name" v="circle"/>
231+
<prop k="offset" v="0,0"/>
232+
<prop k="offset_map_unit_scale" v="3x:0,0,0,0,0,0"/>
233+
<prop k="offset_unit" v="MM"/>
234+
<prop k="outline_color" v="35,35,35,255"/>
235+
<prop k="outline_style" v="solid"/>
236+
<prop k="outline_width" v="0"/>
237+
<prop k="outline_width_map_unit_scale" v="3x:0,0,0,0,0,0"/>
238+
<prop k="outline_width_unit" v="MM"/>
239+
<prop k="scale_method" v="diameter"/>
240+
<prop k="size" v="10"/>
241+
<prop k="size_map_unit_scale" v="3x:0,0,1,5,1,100"/>
242+
<prop k="size_unit" v="MapUnit"/>
243+
<prop k="vertical_anchor_point" v="1"/>
244+
<data_defined_properties>
245+
<Option type="Map">
246+
<Option value="" name="name" type="QString"/>
247+
<Option name="properties"/>
248+
<Option value="collection" name="type" type="QString"/>
249+
</Option>
250+
</data_defined_properties>
251+
</layer>
252+
</symbol>
253+
</symbols>
254+
<rotation/>
255+
<sizescale/>
256+
</renderer-v2>
257+
<customproperties>
258+
<property value="0" key="embeddedWidgets/count"/>
259+
<property key="variableNames"/>
260+
<property key="variableValues"/>
261+
</customproperties>
262+
<blendMode>0</blendMode>
263+
<featureBlendMode>0</featureBlendMode>
264+
<layerOpacity>1</layerOpacity>
265+
<SingleCategoryDiagramRenderer attributeLegend="1" diagramType="Histogram">
266+
<DiagramCategory minScaleDenominator="0" penWidth="0" scaleBasedVisibility="0" penColor="#000000" lineSizeScale="3x:0,0,0,0,0,0" height="15" lineSizeType="MM" labelPlacementMethod="XHeight" rotationOffset="270" sizeScale="3x:0,0,0,0,0,0" barWidth="5" minimumSize="0" opacity="1" sizeType="MM" maxScaleDenominator="1e+8" backgroundColor="#ffffff" diagramOrientation="Up" enabled="0" scaleDependency="Area" penAlpha="255" backgroundAlpha="255" width="15">
267+
<fontProperties description="Ubuntu,11,-1,5,50,0,0,0,0,0" style=""/>
268+
</DiagramCategory>
269+
</SingleCategoryDiagramRenderer>
270+
<DiagramLayerSettings linePlacementFlags="18" priority="0" obstacle="0" dist="0" placement="0" showAll="1" zIndex="0">
271+
<properties>
272+
<Option type="Map">
273+
<Option value="" name="name" type="QString"/>
274+
<Option name="properties"/>
275+
<Option value="collection" name="type" type="QString"/>
276+
</Option>
277+
</properties>
278+
</DiagramLayerSettings>
279+
<geometryOptions geometryPrecision="0" removeDuplicateNodes="0">
280+
<activeChecks/>
281+
<checkConfiguration/>
282+
</geometryOptions>
283+
<fieldConfiguration>
284+
<field name="id">
285+
<editWidget type="TextEdit">
286+
<config>
287+
<Option/>
288+
</config>
289+
</editWidget>
290+
</field>
291+
<field name="name">
292+
<editWidget type="TextEdit">
293+
<config>
294+
<Option/>
295+
</config>
296+
</editWidget>
297+
</field>
298+
<field name="utf8nameè">
299+
<editWidget type="TextEdit">
300+
<config>
301+
<Option/>
302+
</config>
303+
</editWidget>
304+
</field>
305+
</fieldConfiguration>
306+
<aliases>
307+
<alias field="id" index="0" name=""/>
308+
<alias field="name" index="1" name=""/>
309+
<alias field="utf8nameè" index="2" name=""/>
310+
</aliases>
311+
<excludeAttributesWMS/>
312+
<excludeAttributesWFS/>
313+
<defaults>
314+
<default applyOnUpdate="0" field="id" expression=""/>
315+
<default applyOnUpdate="0" field="name" expression=""/>
316+
<default applyOnUpdate="0" field="utf8nameè" expression=""/>
317+
</defaults>
318+
<constraints>
319+
<constraint field="id" constraints="0" notnull_strength="0" unique_strength="0" exp_strength="0"/>
320+
<constraint field="name" constraints="0" notnull_strength="0" unique_strength="0" exp_strength="0"/>
321+
<constraint field="utf8nameè" constraints="0" notnull_strength="0" unique_strength="0" exp_strength="0"/>
322+
</constraints>
323+
<constraintExpressions>
324+
<constraint exp="" field="id" desc=""/>
325+
<constraint exp="" field="name" desc=""/>
326+
<constraint exp="" field="utf8nameè" desc=""/>
327+
</constraintExpressions>
328+
<expressionfields/>
329+
<attributeactions>
330+
<defaultAction value="{00000000-0000-0000-0000-000000000000}" key="Canvas"/>
331+
</attributeactions>
332+
<attributetableconfig actionWidgetStyle="dropDown" sortExpression="" sortOrder="0">
333+
<columns>
334+
<column hidden="0" name="id" width="-1" type="field"/>
335+
<column hidden="0" name="name" width="-1" type="field"/>
336+
<column hidden="0" name="utf8nameè" width="-1" type="field"/>
337+
<column hidden="1" width="-1" type="actions"/>
338+
</columns>
339+
</attributetableconfig>
340+
<conditionalstyles>
341+
<rowstyles/>
342+
<fieldstyles/>
343+
</conditionalstyles>
344+
<editform tolerant="1"></editform>
345+
<editforminit/>
346+
<editforminitcodesource>0</editforminitcodesource>
347+
<editforminitfilepath></editforminitfilepath>
348+
<editforminitcode><![CDATA[# -*- coding: utf-8 -*-
349+
"""
350+
QGIS forms can have a Python function that is called when the form is
351+
opened.
352+
353+
Use this function to add extra logic to your forms.
354+
355+
Enter the name of the function in the "Python Init function"
356+
field.
357+
An example follows:
358+
"""
359+
from qgis.PyQt.QtWidgets import QWidget
360+
361+
def my_form_open(dialog, layer, feature):
362+
geom = feature.geometry()
363+
control = dialog.findChild(QWidget, "MyLineEdit")
364+
]]></editforminitcode>
365+
<featformsuppress>0</featformsuppress>
366+
<editorlayout>generatedlayout</editorlayout>
367+
<editable>
368+
<field editable="1" name="id"/>
369+
<field editable="1" name="name"/>
370+
<field editable="1" name="utf8nameè"/>
371+
</editable>
372+
<labelOnTop>
373+
<field labelOnTop="0" name="id"/>
374+
<field labelOnTop="0" name="name"/>
375+
<field labelOnTop="0" name="utf8nameè"/>
376+
</labelOnTop>
377+
<widgets/>
378+
<previewExpression>id</previewExpression>
379+
<mapTip></mapTip>
380+
</maplayer>
381+
</projectlayers>
382+
<layerorder>
383+
<layer id="testlayer_91fbc4ae_de21_417e_b7df_7e0e792194fb"/>
384+
</layerorder>
385+
<properties>
386+
<Measure>
387+
<Ellipsoid type="QString">WGS84</Ellipsoid>
388+
</Measure>
389+
<Legend>
390+
<filterByMap type="bool">false</filterByMap>
391+
</Legend>
392+
<Gui>
393+
<SelectionColorAlphaPart type="int">255</SelectionColorAlphaPart>
394+
<SelectionColorGreenPart type="int">255</SelectionColorGreenPart>
395+
<CanvasColorGreenPart type="int">255</CanvasColorGreenPart>
396+
<SelectionColorRedPart type="int">255</SelectionColorRedPart>
397+
<CanvasColorRedPart type="int">255</CanvasColorRedPart>
398+
<SelectionColorBluePart type="int">0</SelectionColorBluePart>
399+
<CanvasColorBluePart type="int">255</CanvasColorBluePart>
400+
</Gui>
401+
<PAL>
402+
<ShowingCandidates type="bool">false</ShowingCandidates>
403+
<CandidatesLine type="int">50</CandidatesLine>
404+
<DrawRectOnly type="bool">false</DrawRectOnly>
405+
<ShowingAllLabels type="bool">false</ShowingAllLabels>
406+
<CandidatesPolygon type="int">30</CandidatesPolygon>
407+
<TextFormat type="int">0</TextFormat>
408+
<SearchMethod type="int">0</SearchMethod>
409+
<CandidatesPoint type="int">16</CandidatesPoint>
410+
<ShowingPartialsLabels type="bool">true</ShowingPartialsLabels>
411+
</PAL>
412+
<PositionPrecision>
413+
<DecimalPlaces type="int">2</DecimalPlaces>
414+
<Automatic type="bool">true</Automatic>
415+
</PositionPrecision>
416+
<Paths>
417+
<Absolute type="bool">false</Absolute>
418+
</Paths>
419+
<Measurement>
420+
<DistanceUnits type="QString"></DistanceUnits>
421+
<AreaUnits type="QString"></AreaUnits>
422+
</Measurement>
423+
</properties>
424+
<visibility-presets/>
425+
<transformContext/>
426+
<projectMetadata>
427+
<identifier></identifier>
428+
<parentidentifier></parentidentifier>
429+
<language></language>
430+
<type></type>
431+
<title></title>
432+
<abstract></abstract>
433+
<links/>
434+
<author>David</author>
435+
<creation>2019-02-25T07:28:13</creation>
436+
</projectMetadata>
437+
<Annotations/>
438+
<Layouts/>
439+
</qgis>

0 commit comments

Comments
 (0)
Please sign in to comment.