tests for meter based default scales

This commit is contained in:
signedav 2023-02-24 14:01:32 +01:00
parent 6ec0c75d6d
commit e1d43b01a8
15 changed files with 2018 additions and 24 deletions

View File

@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
"""QGIS Unit tests for QgsServer WMS GetLegendGraphic.
From build dir, run: ctest -R PyQgsServerWMSGetLegendGraphic -V
@ -18,27 +19,31 @@ import os
# Needed on Qt 5 so that the serialization of XML is consistent among all executions
os.environ['QT_HASH_SEED'] = '1'
import re
import json
import urllib.error
import urllib.parse
import urllib.request
import urllib.parse
import urllib.error
from qgis.testing import unittest
from qgis.PyQt.QtCore import QSize
import osgeo.gdal # NOQA
from test_qgsserver_wms import TestQgsServerWMSTestBase
from qgis.core import (
QgsMarkerSymbol,
QgsProject,
QgsMarkerSymbol,
QgsRuleBasedRenderer,
QgsVectorLayer,
)
from qgis.PyQt.QtCore import QSize
from qgis.server import (
QgsBufferServerRequest,
QgsBufferServerResponse,
QgsServer,
QgsServerRequest,
)
from qgis.testing import unittest
from test_qgsserver_wms import TestQgsServerWMSTestBase
# Strip path and content length because path may vary
RE_STRIP_UNCHECKABLE = br'MAP=[^"]+|Content-Length: \d+'
@ -63,10 +68,10 @@ class TestQgsServerWMSGetLegendGraphic(TestQgsServerWMSTestBase):
# 'HEIGHT': '20', # optional
'LAYER': 'testlayer%20èé',
}
qs = '?' + '&'.join([f"{k}={v}" for k, v in parms.items()])
qs = '?' + '&'.join(["%s=%s" % (k, v) for k, v in parms.items()])
h, r = self._execute_request(qs)
self.assertEqual(-1, h.find(b'Content-Type: text/xml; charset=utf-8'), f"Header: {h}\nResponse:\n{r}")
self.assertNotEqual(-1, h.find(b'Content-Type: image/png'), f"Header: {h}\nResponse:\n{r}")
self.assertEqual(-1, h.find(b'Content-Type: text/xml; charset=utf-8'), "Header: %s\nResponse:\n%s" % (h, r))
self.assertNotEqual(-1, h.find(b'Content-Type: image/png'), "Header: %s\nResponse:\n%s" % (h, r))
def test_wms_GetLegendGraphic_LayerSpace(self):
qs = "?" + "&".join(["%s=%s" % i for i in list({
@ -185,7 +190,7 @@ class TestQgsServerWMSGetLegendGraphic(TestQgsServerWMSTestBase):
'LAYERTITLE': 'TRUE',
'RULELABEL': 'TRUE'
}
qs = '?' + '&'.join([f"{k}={v}" for k, v in parms.items()])
qs = '?' + '&'.join(["%s=%s" % (k, v) for k, v in parms.items()])
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_test", 250, QSize(15, 15))
@ -206,7 +211,7 @@ class TestQgsServerWMSGetLegendGraphic(TestQgsServerWMSTestBase):
'ITEMFONTFAMILY': self.fontFamily,
'ITEMFONTSIZE': '20'
}
qs = '?' + '&'.join([f"{k}={v}" for k, v in parms.items()])
qs = '?' + '&'.join(["%s=%s" % (k, v) for k, v in parms.items()])
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_test", 250, QSize(15, 15))
@ -223,7 +228,7 @@ class TestQgsServerWMSGetLegendGraphic(TestQgsServerWMSTestBase):
'LAYERTITLE': 'FALSE',
'RULELABEL': 'FALSE'
}
qs = '?' + '&'.join([f"{k}={v}" for k, v in parms.items()])
qs = '?' + '&'.join(["%s=%s" % (k, v) for k, v in parms.items()])
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_test_layertitle_false", 250, QSize(15, 15))
@ -244,7 +249,7 @@ class TestQgsServerWMSGetLegendGraphic(TestQgsServerWMSTestBase):
'ITEMFONTFAMILY': self.fontFamily,
'RULELABEL': 'FALSE'
}
qs = '?' + '&'.join([f"{k}={v}" for k, v in parms.items()])
qs = '?' + '&'.join(["%s=%s" % (k, v) for k, v in parms.items()])
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_rulelabel_false", 250, QSize(15, 15))
@ -264,7 +269,7 @@ class TestQgsServerWMSGetLegendGraphic(TestQgsServerWMSTestBase):
'LAYERTITLE': 'FALSE',
'RULELABEL': 'TRUE'
}
qs = '?' + '&'.join([f"{k}={v}" for k, v in parms.items()])
qs = '?' + '&'.join(["%s=%s" % (k, v) for k, v in parms.items()])
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_rulelabel_true", 250, QSize(15, 15))
@ -284,7 +289,7 @@ class TestQgsServerWMSGetLegendGraphic(TestQgsServerWMSTestBase):
'ITEMFONTFAMILY': self.fontFamily,
'LAYERTITLE': 'FALSE'
}
qs = '?' + '&'.join([f"{k}={v}" for k, v in parms.items()])
qs = '?' + '&'.join(["%s=%s" % (k, v) for k, v in parms.items()])
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_rulelabel_notset", 250, QSize(15, 15))
@ -299,7 +304,7 @@ class TestQgsServerWMSGetLegendGraphic(TestQgsServerWMSTestBase):
'LAYERTITLE': 'FALSE',
'RULELABEL': 'AUTO'
}
qs = '?' + '&'.join([f"{k}={v}" for k, v in parms.items()])
qs = '?' + '&'.join(["%s=%s" % (k, v) for k, v in parms.items()])
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_rulelabel_auto", 250, QSize(15, 15))
@ -316,7 +321,7 @@ class TestQgsServerWMSGetLegendGraphic(TestQgsServerWMSTestBase):
'HEIGHT': '20',
'RULE': 'rule0',
}
qs = '?' + '&'.join([f"{k}={v}" for k, v in parms.items()])
qs = '?' + '&'.join(["%s=%s" % (k, v) for k, v in parms.items()])
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_rule0", 250, QSize(15, 15))
@ -331,7 +336,7 @@ class TestQgsServerWMSGetLegendGraphic(TestQgsServerWMSTestBase):
'HEIGHT': '20',
'RULE': 'rule1',
}
qs = '?' + '&'.join([f"{k}={v}" for k, v in parms.items()])
qs = '?' + '&'.join(["%s=%s" % (k, v) for k, v in parms.items()])
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_rule1", 250, QSize(15, 15))
@ -626,8 +631,8 @@ class TestQgsServerWMSGetLegendGraphic(TestQgsServerWMSTestBase):
}.items())])
h, r = self._execute_request(qs)
self.assertEqual(-1, h.find(b'Content-Type: text/xml; charset=utf-8'), f"Header: {h}\nResponse:\n{r}")
self.assertNotEqual(-1, h.find(b'Content-Type: image/png'), f"Header: {h}\nResponse:\n{r}")
self.assertEqual(-1, h.find(b'Content-Type: text/xml; charset=utf-8'), "Header: %s\nResponse:\n%s" % (h, r))
self.assertNotEqual(-1, h.find(b'Content-Type: image/png'), "Header: %s\nResponse:\n%s" % (h, r))
def test_wms_GetLegendGraphic_wmsRootName(self):
"""Test an unreported issue when a wmsRootName short name is set in the service capabilities"""
@ -648,8 +653,8 @@ class TestQgsServerWMSGetLegendGraphic(TestQgsServerWMSTestBase):
}.items())])
h, r = self._execute_request(qs)
self.assertEqual(-1, h.find(b'Content-Type: text/xml; charset=utf-8'), f"Header: {h}\nResponse:\n{r}")
self.assertNotEqual(-1, h.find(b'Content-Type: image/png'), f"Header: {h}\nResponse:\n{r}")
self.assertEqual(-1, h.find(b'Content-Type: text/xml; charset=utf-8'), "Header: %s\nResponse:\n%s" % (h, r))
self.assertNotEqual(-1, h.find(b'Content-Type: image/png'), "Header: %s\nResponse:\n%s" % (h, r))
# Then test with the wmsRootName short name:
qs = "?" + "&".join(["%s=%s" % i for i in list({
@ -667,8 +672,8 @@ class TestQgsServerWMSGetLegendGraphic(TestQgsServerWMSTestBase):
}.items())])
h, r = self._execute_request(qs)
self.assertEqual(-1, h.find(b'Content-Type: text/xml; charset=utf-8'), f"Header: {h}\nResponse:\n{r}")
self.assertNotEqual(-1, h.find(b'Content-Type: image/png'), f"Header: {h}\nResponse:\n{r}")
self.assertEqual(-1, h.find(b'Content-Type: text/xml; charset=utf-8'), "Header: %s\nResponse:\n%s" % (h, r))
self.assertNotEqual(-1, h.find(b'Content-Type: image/png'), "Header: %s\nResponse:\n%s" % (h, r))
def test_wms_GetLegendGraphic_ScaleSymbol_Min(self):
# 1:500000000 min
@ -816,6 +821,102 @@ class TestQgsServerWMSGetLegendGraphic(TestQgsServerWMSTestBase):
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_ScaleSymbol_DefaultScale_2056", max_size_diff=QSize(15, 15))
def test_wms_GetLegendGraphic_MetersAtScaleSymbol_Scaled(self):
# meters at scale symbols on EPSG:4326 calculated with BBOX
qs = "?" + "&".join(["%s=%s" % i for i in list({
"MAP": self.testdata_path + 'test_project_meters_at_scaledsymbols.qgs',
"SERVICE": "WMS",
"REQUEST": "GetLegendGraphic",
"LAYER": "testlayer",
"FORMAT": "image/png",
"SRCHEIGHT": "2550",
"SRCWIDTH": "3850",
"BBOX": "44.89945254864102964,8.20044117721021948,44.90400902275693085,8.20936038559772285",
"CRS": "EPSG:4326"
}.items())])
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_MetersAtScaleSymbol_Scaled", max_size_diff=QSize(15, 15))
def test_wms_GetLegendGraphic_MetersAtScaleSymbol_DefaultScale(self):
# meters at scale symbols on EPSG:4326 calculated with Default Scale set in the projects configuration
qs = "?" + "&".join(["%s=%s" % i for i in list({
"MAP": self.testdata_path + 'test_project_meters_at_scaledsymbols.qgs',
"SERVICE": "WMS",
"REQUEST": "GetLegendGraphic",
"LAYER": "testlayer",
"FORMAT": "image/png",
"CRS": "EPSG:4326"
}.items())])
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_MetersAtScaleSymbol_DefaultScale", max_size_diff=QSize(15, 15))
def test_wms_GetLegendGraphic_MetersAtScaleSymbol_Rule(self):
# meters at scale symbols on EPSG:4326 calculated with Default Scale set in the projects configuration and having a rule
qs = "?" + "&".join(["%s=%s" % i for i in list({
"MAP": self.testdata_path + 'test_project_meters_at_scaledsymbols.qgs',
"SERVICE": "WMS",
"REQUEST": "GetLegendGraphic",
"LAYER": "testlayer",
"FORMAT": "image/png",
"CRS": "EPSG:4326",
"WIDTH": "50",
"HEIGHT": "50",
"RULE": "two"
}.items())])
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_MetersAtScaleSymbol_Rule", max_size_diff=QSize(15, 15))
def test_wms_GetLegendGraphic_MetersAtScaleSymbol_Scaled_2056(self):
# meters at scale symbols on EPSG:2056 calculated with BBOX
qs = "?" + "&".join(["%s=%s" % i for i in list({
"MAP": self.testdata_path + 'test_project_meters_at_scaledsymbols_2056.qgs',
"SERVICE": "WMS",
"REQUEST": "GetLegendGraphic",
"LAYER": "testlayer_2056",
"FORMAT": "image/png",
"SRCHEIGHT": "1100",
"SRCWIDTH": "1700",
"BBOX": "2662610.7,1268841.8,2663010.5,1269000.05",
"CRS": "EPSG:2056"
}.items())])
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_MetersAtScaleSymbol_Scaled_2056", max_size_diff=QSize(15, 15))
def test_wms_GetLegendGraphic_MetersAtScaleSymbol_DefaultScale_2056(self):
# meters at scale symbols on EPSG:2056 calculated with Default Scale set in the projects configuration
qs = "?" + "&".join(["%s=%s" % i for i in list({
"MAP": self.testdata_path + 'test_project_meters_at_scaledsymbols_2056.qgs',
"SERVICE": "WMS",
"REQUEST": "GetLegendGraphic",
"LAYER": "testlayer_2056",
"FORMAT": "image/png",
"CRS": "EPSG:2056"
}.items())])
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_MetersAtScaleSymbol_DefaultScale_2056", max_size_diff=QSize(15, 15))
def test_wms_GetLegendGraphic_MetersAtScaleSymbol_Rule_2056(self):
# meters at scale symbols on EPSG:2056 calculated with Default Scale set in the projects configuration and having a rule
qs = "?" + "&".join(["%s=%s" % i for i in list({
"MAP": self.testdata_path + 'test_project_meters_at_scaledsymbols_2056.qgs',
"SERVICE": "WMS",
"REQUEST": "GetLegendGraphic",
"LAYER": "testlayer_2056",
"FORMAT": "image/png",
"CRS": "EPSG:2056",
"WIDTH": "50",
"HEIGHT": "50",
"RULE": "test"
}.items())])
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_MetersAtScaleSymbol_Rule_2056", max_size_diff=QSize(15, 15))
def test_wms_GetLegendGraphic_LAYERFONTCOLOR(self):
qs = "?" + "&".join(["%s=%s" % i for i in list({
"MAP": urllib.parse.quote(self.projectPath),

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,890 @@
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
<qgis projectname="" saveUser="dave" saveUserFull="dave" version="3.29.0-Master" saveDateTime="2023-02-03T15:27:58">
<homePath path=""/>
<title></title>
<transaction mode="Disabled"/>
<projectFlags set=""/>
<projectCrs>
<spatialrefsys nativeFormat="Wkt">
<wkt>PROJCRS["CH1903+ / LV95",BASEGEOGCRS["CH1903+",DATUM["CH1903+",ELLIPSOID["Bessel 1841",6377397.155,299.1528128,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4150]],CONVERSION["Swiss Oblique Mercator 1995",METHOD["Hotine Oblique Mercator (variant B)",ID["EPSG",9815]],PARAMETER["Latitude of projection centre",46.9524055555556,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8811]],PARAMETER["Longitude of projection centre",7.43958333333333,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8812]],PARAMETER["Azimuth of initial line",90,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8813]],PARAMETER["Angle from Rectified to Skew Grid",90,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8814]],PARAMETER["Scale factor on initial line",1,SCALEUNIT["unity",1],ID["EPSG",8815]],PARAMETER["Easting at projection centre",2600000,LENGTHUNIT["metre",1],ID["EPSG",8816]],PARAMETER["Northing at projection centre",1200000,LENGTHUNIT["metre",1],ID["EPSG",8817]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Cadastre, engineering survey, topographic mapping (large and medium scale)."],AREA["Liechtenstein; Switzerland."],BBOX[45.82,5.96,47.81,10.49]],ID["EPSG",2056]]</wkt>
<proj4>+proj=somerc +lat_0=46.9524055555556 +lon_0=7.43958333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs</proj4>
<srsid>47</srsid>
<srid>2056</srid>
<authid>EPSG:2056</authid>
<description>CH1903+ / LV95</description>
<projectionacronym>somerc</projectionacronym>
<ellipsoidacronym>EPSG:7004</ellipsoidacronym>
<geographicflag>false</geographicflag>
</spatialrefsys>
</projectCrs>
<elevation-shading-renderer edl-distance="0.5" hillshading-is-active="0" light-azimuth="315" edl-is-active="1" hillshading-z-factor="1" light-altitude="45" edl-strength="1000" combined-method="0" hillshading-is-multidirectional="0" is-active="0" edl-distance-unit="0"/>
<layer-tree-group>
<customproperties>
<Option/>
</customproperties>
<layer-tree-layer providerKey="ogr" expanded="1" id="testlayer_2056_0a0d85af_384f_43a8_aafd_ce618f07606c" source="./testlayer_2056.shp" checked="Qt::Checked" patch_size="0,0" legend_split_behavior="0" name="testlayer_2056" legend_exp="">
<customproperties>
<Option/>
</customproperties>
</layer-tree-layer>
<custom-order enabled="0">
<item>testlayer_2056_0a0d85af_384f_43a8_aafd_ce618f07606c</item>
</custom-order>
</layer-tree-group>
<snapping-settings enabled="0" scaleDependencyMode="0" mode="2" unit="1" self-snapping="0" tolerance="12" type="1" intersection-snapping="0" minScale="0" maxScale="0">
<individual-layer-settings>
<layer-setting enabled="0" id="testlayer_2056_0a0d85af_384f_43a8_aafd_ce618f07606c" tolerance="12" type="1" minScale="0" maxScale="0" units="1"/>
</individual-layer-settings>
</snapping-settings>
<relations/>
<polymorphicRelations/>
<mapcanvas annotationsVisible="1" name="theMapCanvas">
<units>meters</units>
<extent>
<xmin>2662688.59528037672862411</xmin>
<ymin>1268906.44275068677961826</ymin>
<xmax>2663017.47236404521390796</xmax>
<ymax>1269115.71788927260786295</ymax>
</extent>
<rotation>0</rotation>
<destinationsrs>
<spatialrefsys nativeFormat="Wkt">
<wkt>PROJCRS["CH1903+ / LV95",BASEGEOGCRS["CH1903+",DATUM["CH1903+",ELLIPSOID["Bessel 1841",6377397.155,299.1528128,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4150]],CONVERSION["Swiss Oblique Mercator 1995",METHOD["Hotine Oblique Mercator (variant B)",ID["EPSG",9815]],PARAMETER["Latitude of projection centre",46.9524055555556,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8811]],PARAMETER["Longitude of projection centre",7.43958333333333,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8812]],PARAMETER["Azimuth of initial line",90,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8813]],PARAMETER["Angle from Rectified to Skew Grid",90,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8814]],PARAMETER["Scale factor on initial line",1,SCALEUNIT["unity",1],ID["EPSG",8815]],PARAMETER["Easting at projection centre",2600000,LENGTHUNIT["metre",1],ID["EPSG",8816]],PARAMETER["Northing at projection centre",1200000,LENGTHUNIT["metre",1],ID["EPSG",8817]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Cadastre, engineering survey, topographic mapping (large and medium scale)."],AREA["Liechtenstein; Switzerland."],BBOX[45.82,5.96,47.81,10.49]],ID["EPSG",2056]]</wkt>
<proj4>+proj=somerc +lat_0=46.9524055555556 +lon_0=7.43958333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs</proj4>
<srsid>47</srsid>
<srid>2056</srid>
<authid>EPSG:2056</authid>
<description>CH1903+ / LV95</description>
<projectionacronym>somerc</projectionacronym>
<ellipsoidacronym>EPSG:7004</ellipsoidacronym>
<geographicflag>false</geographicflag>
</spatialrefsys>
</destinationsrs>
<rendermaptile>0</rendermaptile>
<expressionContextScope/>
</mapcanvas>
<legend updateDrawingOrder="true">
<legendlayer showFeatureCount="0" open="true" checked="Qt::Checked" drawingOrder="-1" name="testlayer_2056">
<filegroup open="true" hidden="false">
<legendlayerfile visible="1" layerid="testlayer_2056_0a0d85af_384f_43a8_aafd_ce618f07606c" isInOverview="0"/>
</filegroup>
</legendlayer>
</legend>
<mapViewDocks/>
<main-annotation-layer styleCategories="AllStyleCategories" hasScaleBasedVisibilityFlag="0" legendPlaceholderImage="" refreshOnNotifyMessage="" refreshOnNotifyEnabled="0" autoRefreshTime="0" type="annotation" maxScale="0" minScale="0" autoRefreshEnabled="0">
<id>Beschriftungen_554a318e_171a_47fd_9858_924d3d726ea6</id>
<datasource></datasource>
<keywordList>
<value></value>
</keywordList>
<layername></layername>
<srs>
<spatialrefsys nativeFormat="Wkt">
<wkt></wkt>
<proj4></proj4>
<srsid>0</srsid>
<srid>0</srid>
<authid></authid>
<description></description>
<projectionacronym></projectionacronym>
<ellipsoidacronym></ellipsoidacronym>
<geographicflag>false</geographicflag>
</spatialrefsys>
</srs>
<resourceMetadata>
<identifier></identifier>
<parentidentifier></parentidentifier>
<language></language>
<type></type>
<title></title>
<abstract></abstract>
<links/>
<dates/>
<fees></fees>
<encoding></encoding>
<crs>
<spatialrefsys nativeFormat="Wkt">
<wkt></wkt>
<proj4></proj4>
<srsid>0</srsid>
<srid>0</srid>
<authid></authid>
<description></description>
<projectionacronym></projectionacronym>
<ellipsoidacronym></ellipsoidacronym>
<geographicflag>false</geographicflag>
</spatialrefsys>
</crs>
<extent/>
</resourceMetadata>
<items/>
<flags>
<Identifiable>1</Identifiable>
<Removable>1</Removable>
<Searchable>1</Searchable>
<Private>0</Private>
</flags>
<customproperties>
<Option/>
</customproperties>
<layerOpacity>1</layerOpacity>
<blendMode>0</blendMode>
<paintEffect/>
</main-annotation-layer>
<projectlayers>
<maplayer maxScale="0" simplifyAlgorithm="0" autoRefreshTime="0" wkbType="Point" geometry="Point" simplifyMaxScale="1" refreshOnNotifyMessage="" simplifyLocal="1" hasScaleBasedVisibilityFlag="0" styleCategories="AllStyleCategories" minScale="100000000" simplifyDrawingTol="1" type="vector" simplifyDrawingHints="0" legendPlaceholderImage="" autoRefreshEnabled="0" labelsEnabled="0" symbologyReferenceScale="-1" readOnly="0" refreshOnNotifyEnabled="0">
<extent>
<xmin>2662810.22610628698021173</xmin>
<ymin>1268958.9145528266672045</ymin>
<xmax>2662810.22610628698021173</xmax>
<ymax>1268958.9145528266672045</ymax>
</extent>
<wgs84extent>
<xmin>8.2733168707200484</xmin>
<ymin>47.56833412279832629</ymin>
<xmax>8.2733168707200484</xmax>
<ymax>47.56833412279832629</ymax>
</wgs84extent>
<id>testlayer_2056_0a0d85af_384f_43a8_aafd_ce618f07606c</id>
<datasource>./testlayer_2056.shp</datasource>
<keywordList>
<value></value>
</keywordList>
<layername>testlayer_2056</layername>
<srs>
<spatialrefsys nativeFormat="Wkt">
<wkt>PROJCRS["CH1903+ / LV95",BASEGEOGCRS["CH1903+",DATUM["CH1903+",ELLIPSOID["Bessel 1841",6377397.155,299.1528128,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4150]],CONVERSION["Swiss Oblique Mercator 1995",METHOD["Hotine Oblique Mercator (variant B)",ID["EPSG",9815]],PARAMETER["Latitude of projection centre",46.9524055555556,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8811]],PARAMETER["Longitude of projection centre",7.43958333333333,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8812]],PARAMETER["Azimuth of initial line",90,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8813]],PARAMETER["Angle from Rectified to Skew Grid",90,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8814]],PARAMETER["Scale factor on initial line",1,SCALEUNIT["unity",1],ID["EPSG",8815]],PARAMETER["Easting at projection centre",2600000,LENGTHUNIT["metre",1],ID["EPSG",8816]],PARAMETER["Northing at projection centre",1200000,LENGTHUNIT["metre",1],ID["EPSG",8817]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Cadastre, engineering survey, topographic mapping (large and medium scale)."],AREA["Liechtenstein; Switzerland."],BBOX[45.82,5.96,47.81,10.49]],ID["EPSG",2056]]</wkt>
<proj4>+proj=somerc +lat_0=46.9524055555556 +lon_0=7.43958333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs</proj4>
<srsid>47</srsid>
<srid>2056</srid>
<authid>EPSG:2056</authid>
<description>CH1903+ / LV95</description>
<projectionacronym>somerc</projectionacronym>
<ellipsoidacronym>EPSG:7004</ellipsoidacronym>
<geographicflag>false</geographicflag>
</spatialrefsys>
</srs>
<resourceMetadata>
<identifier></identifier>
<parentidentifier></parentidentifier>
<language></language>
<type>dataset</type>
<title></title>
<abstract></abstract>
<contact>
<name></name>
<organization></organization>
<position></position>
<voice></voice>
<fax></fax>
<email></email>
<role></role>
</contact>
<links/>
<dates/>
<fees></fees>
<encoding></encoding>
<crs>
<spatialrefsys nativeFormat="Wkt">
<wkt></wkt>
<proj4>+proj=somerc +lat_0=46.9524055555556 +lon_0=7.43958333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs</proj4>
<srsid>0</srsid>
<srid>0</srid>
<authid></authid>
<description></description>
<projectionacronym></projectionacronym>
<ellipsoidacronym></ellipsoidacronym>
<geographicflag>false</geographicflag>
</spatialrefsys>
</crs>
<extent>
<spatial crs="" maxy="0" minx="0" minz="0" miny="0" maxz="0" dimensions="2" maxx="0"/>
<temporal>
<period>
<start></start>
<end></end>
</period>
</temporal>
</extent>
</resourceMetadata>
<provider encoding="UTF-8">ogr</provider>
<vectorjoins/>
<layerDependencies/>
<dataDependencies/>
<expressionfields/>
<map-layer-style-manager current="default">
<map-layer-style name="default"/>
</map-layer-style-manager>
<auxiliaryLayer/>
<metadataUrls/>
<flags>
<Identifiable>1</Identifiable>
<Removable>1</Removable>
<Searchable>1</Searchable>
<Private>0</Private>
</flags>
<temporal fixedDuration="0" enabled="0" endExpression="" durationUnit="min" accumulate="0" endField="" durationField="" startField="" mode="0" startExpression="" limitMode="0">
<fixedRange>
<start></start>
<end></end>
</fixedRange>
</temporal>
<elevation clamping="Terrain" extrusionEnabled="0" symbology="Line" respectLayerSymbol="1" extrusion="0" showMarkerSymbolInSurfacePlots="0" type="IndividualFeatures" zoffset="0" zscale="1" binding="Centroid">
<data-defined-properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data-defined-properties>
<profileLineSymbol>
<symbol is_animated="0" frame_rate="10" clip_to_extent="1" alpha="1" force_rhr="0" name="" type="line">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer enabled="1" locked="0" pass="0" class="SimpleLine">
<Option type="Map">
<Option name="align_dash_pattern" type="QString" value="0"/>
<Option name="capstyle" type="QString" value="square"/>
<Option name="customdash" type="QString" value="5;2"/>
<Option name="customdash_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="customdash_unit" type="QString" value="MM"/>
<Option name="dash_pattern_offset" type="QString" value="0"/>
<Option name="dash_pattern_offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="dash_pattern_offset_unit" type="QString" value="MM"/>
<Option name="draw_inside_polygon" type="QString" value="0"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="line_color" type="QString" value="190,178,151,255"/>
<Option name="line_style" type="QString" value="solid"/>
<Option name="line_width" type="QString" value="0.6"/>
<Option name="line_width_unit" type="QString" value="MM"/>
<Option name="offset" type="QString" value="0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="ring_filter" type="QString" value="0"/>
<Option name="trim_distance_end" type="QString" value="0"/>
<Option name="trim_distance_end_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="trim_distance_end_unit" type="QString" value="MM"/>
<Option name="trim_distance_start" type="QString" value="0"/>
<Option name="trim_distance_start_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="trim_distance_start_unit" type="QString" value="MM"/>
<Option name="tweak_dash_pattern_on_corners" type="QString" value="0"/>
<Option name="use_custom_dash" type="QString" value="0"/>
<Option name="width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</profileLineSymbol>
<profileFillSymbol>
<symbol is_animated="0" frame_rate="10" clip_to_extent="1" alpha="1" force_rhr="0" name="" type="fill">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer enabled="1" locked="0" pass="0" class="SimpleFill">
<Option type="Map">
<Option name="border_width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="color" type="QString" value="190,178,151,255"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="offset" type="QString" value="0,0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="outline_color" type="QString" value="136,127,108,255"/>
<Option name="outline_style" type="QString" value="solid"/>
<Option name="outline_width" type="QString" value="0.2"/>
<Option name="outline_width_unit" type="QString" value="MM"/>
<Option name="style" type="QString" value="solid"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</profileFillSymbol>
<profileMarkerSymbol>
<symbol is_animated="0" frame_rate="10" clip_to_extent="1" alpha="1" force_rhr="0" name="" type="marker">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer enabled="1" locked="0" pass="0" class="SimpleMarker">
<Option type="Map">
<Option name="angle" type="QString" value="0"/>
<Option name="cap_style" type="QString" value="square"/>
<Option name="color" type="QString" value="190,178,151,255"/>
<Option name="horizontal_anchor_point" type="QString" value="1"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="name" type="QString" value="diamond"/>
<Option name="offset" type="QString" value="0,0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="outline_color" type="QString" value="136,127,108,255"/>
<Option name="outline_style" type="QString" value="solid"/>
<Option name="outline_width" type="QString" value="0.2"/>
<Option name="outline_width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="outline_width_unit" type="QString" value="MM"/>
<Option name="scale_method" type="QString" value="diameter"/>
<Option name="size" type="QString" value="3"/>
<Option name="size_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="size_unit" type="QString" value="MM"/>
<Option name="vertical_anchor_point" type="QString" value="1"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</profileMarkerSymbol>
</elevation>
<renderer-v2 referencescale="-1" attr="name" enableorderby="0" forceraster="0" type="categorizedSymbol" symbollevels="0">
<categories>
<category symbol="0" label="test" type="string" value="test" render="true"/>
<category symbol="1" label="all others" type="string" value="" render="true"/>
</categories>
<symbols>
<symbol is_animated="0" frame_rate="10" clip_to_extent="1" alpha="1" force_rhr="0" name="0" type="marker">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer enabled="1" locked="0" pass="0" class="SimpleMarker">
<Option type="Map">
<Option name="angle" type="QString" value="0"/>
<Option name="cap_style" type="QString" value="square"/>
<Option name="color" type="QString" value="236,205,68,255"/>
<Option name="horizontal_anchor_point" type="QString" value="1"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="name" type="QString" value="circle"/>
<Option name="offset" type="QString" value="0,0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="RenderMetersInMapUnits"/>
<Option name="outline_color" type="QString" value="35,35,35,255"/>
<Option name="outline_style" type="QString" value="solid"/>
<Option name="outline_width" type="QString" value="0"/>
<Option name="outline_width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="outline_width_unit" type="QString" value="RenderMetersInMapUnits"/>
<Option name="scale_method" type="QString" value="diameter"/>
<Option name="size" type="QString" value="10"/>
<Option name="size_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="size_unit" type="QString" value="RenderMetersInMapUnits"/>
<Option name="vertical_anchor_point" type="QString" value="1"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
<symbol is_animated="0" frame_rate="10" clip_to_extent="1" alpha="1" force_rhr="0" name="1" type="marker">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer enabled="1" locked="0" pass="0" class="SimpleMarker">
<Option type="Map">
<Option name="angle" type="QString" value="0"/>
<Option name="cap_style" type="QString" value="square"/>
<Option name="color" type="QString" value="37,72,226,255"/>
<Option name="horizontal_anchor_point" type="QString" value="1"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="name" type="QString" value="circle"/>
<Option name="offset" type="QString" value="0,0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="RenderMetersInMapUnits"/>
<Option name="outline_color" type="QString" value="35,35,35,255"/>
<Option name="outline_style" type="QString" value="solid"/>
<Option name="outline_width" type="QString" value="0"/>
<Option name="outline_width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="outline_width_unit" type="QString" value="RenderMetersInMapUnits"/>
<Option name="scale_method" type="QString" value="diameter"/>
<Option name="size" type="QString" value="10"/>
<Option name="size_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="size_unit" type="QString" value="RenderMetersInMapUnits"/>
<Option name="vertical_anchor_point" type="QString" value="1"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</symbols>
<source-symbol>
<symbol is_animated="0" frame_rate="10" clip_to_extent="1" alpha="1" force_rhr="0" name="0" type="marker">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer enabled="1" locked="0" pass="0" class="SimpleMarker">
<Option type="Map">
<Option name="angle" type="QString" value="0"/>
<Option name="cap_style" type="QString" value="square"/>
<Option name="color" type="QString" value="152,125,183,255"/>
<Option name="horizontal_anchor_point" type="QString" value="1"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="name" type="QString" value="circle"/>
<Option name="offset" type="QString" value="0,0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="RenderMetersInMapUnits"/>
<Option name="outline_color" type="QString" value="35,35,35,255"/>
<Option name="outline_style" type="QString" value="solid"/>
<Option name="outline_width" type="QString" value="0"/>
<Option name="outline_width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="outline_width_unit" type="QString" value="RenderMetersInMapUnits"/>
<Option name="scale_method" type="QString" value="diameter"/>
<Option name="size" type="QString" value="10"/>
<Option name="size_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="size_unit" type="QString" value="RenderMetersInMapUnits"/>
<Option name="vertical_anchor_point" type="QString" value="1"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</source-symbol>
<colorramp name="[source]" type="randomcolors">
<Option/>
</colorramp>
<rotation/>
<sizescale/>
</renderer-v2>
<customproperties>
<Option type="Map">
<Option name="dualview/previewExpressions" type="StringList">
<Option type="QString" value="id"/>
</Option>
<Option name="embeddedWidgets/count" type="QString" value="0"/>
<Option name="variableNames"/>
<Option name="variableValues"/>
</Option>
</customproperties>
<blendMode>0</blendMode>
<featureBlendMode>0</featureBlendMode>
<layerOpacity>1</layerOpacity>
<SingleCategoryDiagramRenderer diagramType="Histogram" attributeLegend="1">
<DiagramCategory maxScaleDenominator="1e+08" lineSizeType="MM" minScaleDenominator="0" width="15" minimumSize="0" backgroundColor="#ffffff" rotationOffset="270" backgroundAlpha="255" penAlpha="255" sizeScale="3x:0,0,0,0,0,0" penWidth="0" showAxis="0" spacing="0" spacingUnit="MM" direction="1" scaleDependency="Area" height="15" diagramOrientation="Up" opacity="1" lineSizeScale="3x:0,0,0,0,0,0" scaleBasedVisibility="0" barWidth="5" enabled="0" penColor="#000000" spacingUnitScale="3x:0,0,0,0,0,0" labelPlacementMethod="XHeight" sizeType="MM">
<fontProperties style="" bold="0" italic="0" underline="0" description="Ubuntu,11,-1,5,50,0,0,0,0,0" strikethrough="0"/>
<attribute label="" field="" colorOpacity="1" color="#000000"/>
<axisSymbol>
<symbol is_animated="0" frame_rate="10" clip_to_extent="1" alpha="1" force_rhr="0" name="" type="line">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer enabled="1" locked="0" pass="0" class="SimpleLine">
<Option type="Map">
<Option name="align_dash_pattern" type="QString" value="0"/>
<Option name="capstyle" type="QString" value="square"/>
<Option name="customdash" type="QString" value="5;2"/>
<Option name="customdash_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="customdash_unit" type="QString" value="MM"/>
<Option name="dash_pattern_offset" type="QString" value="0"/>
<Option name="dash_pattern_offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="dash_pattern_offset_unit" type="QString" value="MM"/>
<Option name="draw_inside_polygon" type="QString" value="0"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="line_color" type="QString" value="35,35,35,255"/>
<Option name="line_style" type="QString" value="solid"/>
<Option name="line_width" type="QString" value="0.26"/>
<Option name="line_width_unit" type="QString" value="MM"/>
<Option name="offset" type="QString" value="0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="ring_filter" type="QString" value="0"/>
<Option name="trim_distance_end" type="QString" value="0"/>
<Option name="trim_distance_end_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="trim_distance_end_unit" type="QString" value="MM"/>
<Option name="trim_distance_start" type="QString" value="0"/>
<Option name="trim_distance_start_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="trim_distance_start_unit" type="QString" value="MM"/>
<Option name="tweak_dash_pattern_on_corners" type="QString" value="0"/>
<Option name="use_custom_dash" type="QString" value="0"/>
<Option name="width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</axisSymbol>
</DiagramCategory>
</SingleCategoryDiagramRenderer>
<DiagramLayerSettings priority="0" obstacle="0" dist="0" showAll="1" placement="0" linePlacementFlags="18" zIndex="0">
<properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</properties>
</DiagramLayerSettings>
<geometryOptions geometryPrecision="0" removeDuplicateNodes="0">
<activeChecks/>
<checkConfiguration/>
</geometryOptions>
<legend showLabelLegend="0" type="default-vector"/>
<referencedLayers/>
<fieldConfiguration>
<field configurationFlags="None" name="id">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="name">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
</fieldConfiguration>
<aliases>
<alias field="id" name="" index="0"/>
<alias field="name" name="" index="1"/>
</aliases>
<defaults>
<default field="id" expression="" applyOnUpdate="0"/>
<default field="name" expression="" applyOnUpdate="0"/>
</defaults>
<constraints>
<constraint field="id" notnull_strength="0" exp_strength="0" constraints="0" unique_strength="0"/>
<constraint field="name" notnull_strength="0" exp_strength="0" constraints="0" unique_strength="0"/>
</constraints>
<constraintExpressions>
<constraint field="id" desc="" exp=""/>
<constraint field="name" desc="" exp=""/>
</constraintExpressions>
<expressionfields/>
<attributeactions>
<defaultAction key="Canvas" value="{00000000-0000-0000-0000-000000000000}"/>
</attributeactions>
<attributetableconfig actionWidgetStyle="dropDown" sortExpression="" sortOrder="0">
<columns>
<column hidden="0" name="id" type="field" width="-1"/>
<column hidden="0" name="name" type="field" width="-1"/>
<column hidden="1" type="actions" width="-1"/>
</columns>
</attributetableconfig>
<conditionalstyles>
<rowstyles/>
<fieldstyles/>
</conditionalstyles>
<storedexpressions/>
<editform tolerant="1"></editform>
<editforminit/>
<editforminitcodesource>0</editforminitcodesource>
<editforminitfilepath></editforminitfilepath>
<editforminitcode><![CDATA[# -*- coding: utf-8 -*-
"""
QGIS forms can have a Python function that is called when the form is
opened.
Use this function to add extra logic to your forms.
Enter the name of the function in the "Python Init function"
field.
An example follows:
"""
from qgis.PyQt.QtWidgets import QWidget
def my_form_open(dialog, layer, feature):
geom = feature.geometry()
control = dialog.findChild(QWidget, "MyLineEdit")
]]></editforminitcode>
<featformsuppress>0</featformsuppress>
<editorlayout>generatedlayout</editorlayout>
<editable>
<field editable="1" name="id"/>
<field editable="1" name="name"/>
</editable>
<labelOnTop>
<field labelOnTop="0" name="id"/>
<field labelOnTop="0" name="name"/>
</labelOnTop>
<reuseLastValue>
<field reuseLastValue="0" name="id"/>
<field reuseLastValue="0" name="name"/>
</reuseLastValue>
<dataDefinedFieldProperties/>
<widgets/>
<previewExpression>"id"</previewExpression>
<mapTip></mapTip>
</maplayer>
</projectlayers>
<layerorder>
<layer id="testlayer_2056_0a0d85af_384f_43a8_aafd_ce618f07606c"/>
</layerorder>
<properties>
<DefaultStyles/>
<Digitizing>
<AvoidIntersectionsMode type="int">2</AvoidIntersectionsMode>
</Digitizing>
<Gui>
<CanvasColorBluePart type="int">255</CanvasColorBluePart>
<CanvasColorGreenPart type="int">255</CanvasColorGreenPart>
<CanvasColorRedPart type="int">255</CanvasColorRedPart>
<SelectionColorAlphaPart type="int">255</SelectionColorAlphaPart>
<SelectionColorBluePart type="int">0</SelectionColorBluePart>
<SelectionColorGreenPart type="int">255</SelectionColorGreenPart>
<SelectionColorRedPart type="int">255</SelectionColorRedPart>
</Gui>
<Legend>
<filterByMap type="bool">false</filterByMap>
</Legend>
<Macros>
<pythonCode type="QString"></pythonCode>
</Macros>
<Measure>
<Ellipsoid type="QString">NONE</Ellipsoid>
</Measure>
<Measurement>
<AreaUnits type="QString">m2</AreaUnits>
<DistanceUnits type="QString">meters</DistanceUnits>
</Measurement>
<PAL>
<CandidatesLine type="int">50</CandidatesLine>
<CandidatesLinePerCM type="double">5</CandidatesLinePerCM>
<CandidatesPoint type="int">16</CandidatesPoint>
<CandidatesPolygon type="int">30</CandidatesPolygon>
<CandidatesPolygonPerCM type="double">2.5</CandidatesPolygonPerCM>
<DrawLabelMetrics type="bool">false</DrawLabelMetrics>
<DrawRectOnly type="bool">false</DrawRectOnly>
<DrawUnplaced type="bool">false</DrawUnplaced>
<PlacementEngineVersion type="int">0</PlacementEngineVersion>
<SearchMethod type="int">0</SearchMethod>
<ShowingAllLabels type="bool">false</ShowingAllLabels>
<ShowingCandidates type="bool">false</ShowingCandidates>
<ShowingPartialsLabels type="bool">true</ShowingPartialsLabels>
<TextFormat type="int">0</TextFormat>
<UnplacedColor type="QString">255,0,0,255</UnplacedColor>
</PAL>
<Paths>
<Absolute type="bool">false</Absolute>
</Paths>
<PositionPrecision>
<Automatic type="bool">true</Automatic>
<DecimalPlaces type="int">2</DecimalPlaces>
<DegreeFormat type="QString">MU</DegreeFormat>
</PositionPrecision>
<RenderMapTile type="bool">false</RenderMapTile>
<SpatialRefSys>
<ProjectionsEnabled type="int">1</ProjectionsEnabled>
</SpatialRefSys>
<WCSLayers type="QStringList"/>
<WCSUrl type="QString"></WCSUrl>
<WFSLayers type="QStringList"/>
<WFSTLayers>
<Delete type="QStringList"/>
<Insert type="QStringList"/>
<Update type="QStringList"/>
</WFSTLayers>
<WFSUrl type="QString"></WFSUrl>
<WMSAccessConstraints type="QString">None</WMSAccessConstraints>
<WMSAddLayerGroupsLegendGraphic type="bool">false</WMSAddLayerGroupsLegendGraphic>
<WMSAddWktGeometry type="bool">false</WMSAddWktGeometry>
<WMSContactMail type="QString"></WMSContactMail>
<WMSContactOrganization type="QString"></WMSContactOrganization>
<WMSContactPerson type="QString"></WMSContactPerson>
<WMSContactPhone type="QString"></WMSContactPhone>
<WMSContactPosition type="QString"></WMSContactPosition>
<WMSDefaultMapUnitsPerMm type="double">1</WMSDefaultMapUnitsPerMm>
<WMSFeatureInfoUseAttributeFormSettings type="bool">false</WMSFeatureInfoUseAttributeFormSettings>
<WMSFees type="QString">conditions unknown</WMSFees>
<WMSImageQuality type="int">90</WMSImageQuality>
<WMSKeywordList type="QStringList">
<value></value>
</WMSKeywordList>
<WMSMaxAtlasFeatures type="int">1</WMSMaxAtlasFeatures>
<WMSOnlineResource type="QString"></WMSOnlineResource>
<WMSPrecision type="QString">8</WMSPrecision>
<WMSRootName type="QString"></WMSRootName>
<WMSSegmentizeFeatureInfoGeometry type="bool">false</WMSSegmentizeFeatureInfoGeometry>
<WMSServiceAbstract type="QString"></WMSServiceAbstract>
<WMSServiceCapabilities type="bool">false</WMSServiceCapabilities>
<WMSServiceTitle type="QString"></WMSServiceTitle>
<WMSTileBuffer type="int">0</WMSTileBuffer>
<WMSUrl type="QString"></WMSUrl>
<WMSUseLayerIDs type="bool">false</WMSUseLayerIDs>
<WMTSGrids>
<CRS type="QStringList"/>
<Config type="QStringList"/>
</WMTSGrids>
<WMTSJpegLayers>
<Group type="QStringList"/>
<Layer type="QStringList"/>
<Project type="bool">false</Project>
</WMTSJpegLayers>
<WMTSLayers>
<Group type="QStringList"/>
<Layer type="QStringList"/>
<Project type="bool">false</Project>
</WMTSLayers>
<WMTSMinScale type="int">5000</WMTSMinScale>
<WMTSPngLayers>
<Group type="QStringList"/>
<Layer type="QStringList"/>
<Project type="bool">false</Project>
</WMTSPngLayers>
<WMTSUrl type="QString"></WMTSUrl>
</properties>
<dataDefinedServerProperties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</dataDefinedServerProperties>
<visibility-presets/>
<transformContext/>
<projectMetadata>
<identifier></identifier>
<parentidentifier></parentidentifier>
<language></language>
<type></type>
<title></title>
<abstract></abstract>
<contact>
<name></name>
<organization></organization>
<position></position>
<voice></voice>
<fax></fax>
<email></email>
<role></role>
</contact>
<links/>
<dates>
<date type="Created" value="2019-04-11T08:52:22"/>
</dates>
<author>David</author>
<creation>2019-04-11T08:52:22</creation>
</projectMetadata>
<Annotations/>
<Layouts/>
<mapViewDocks3D/>
<Bookmarks/>
<ProjectViewSettings UseProjectScales="0" rotation="0">
<Scales/>
<DefaultViewExtent xmax="2663017.47236404521390796" ymin="1268884.21261151717044413" ymax="1269137.94802844221703708" xmin="2662688.59528037672862411">
<spatialrefsys nativeFormat="Wkt">
<wkt>PROJCRS["CH1903+ / LV95",BASEGEOGCRS["CH1903+",DATUM["CH1903+",ELLIPSOID["Bessel 1841",6377397.155,299.1528128,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4150]],CONVERSION["Swiss Oblique Mercator 1995",METHOD["Hotine Oblique Mercator (variant B)",ID["EPSG",9815]],PARAMETER["Latitude of projection centre",46.9524055555556,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8811]],PARAMETER["Longitude of projection centre",7.43958333333333,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8812]],PARAMETER["Azimuth of initial line",90,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8813]],PARAMETER["Angle from Rectified to Skew Grid",90,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8814]],PARAMETER["Scale factor on initial line",1,SCALEUNIT["unity",1],ID["EPSG",8815]],PARAMETER["Easting at projection centre",2600000,LENGTHUNIT["metre",1],ID["EPSG",8816]],PARAMETER["Northing at projection centre",1200000,LENGTHUNIT["metre",1],ID["EPSG",8817]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Cadastre, engineering survey, topographic mapping (large and medium scale)."],AREA["Liechtenstein; Switzerland."],BBOX[45.82,5.96,47.81,10.49]],ID["EPSG",2056]]</wkt>
<proj4>+proj=somerc +lat_0=46.9524055555556 +lon_0=7.43958333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs</proj4>
<srsid>47</srsid>
<srid>2056</srid>
<authid>EPSG:2056</authid>
<description>CH1903+ / LV95</description>
<projectionacronym>somerc</projectionacronym>
<ellipsoidacronym>EPSG:7004</ellipsoidacronym>
<geographicflag>false</geographicflag>
</spatialrefsys>
</DefaultViewExtent>
</ProjectViewSettings>
<ProjectStyleSettings DefaultSymbolOpacity="1" RandomizeDefaultSymbolColor="1" projectStyleId="attachment:///TcSCYs_styles.db">
<databases/>
</ProjectStyleSettings>
<ProjectTimeSettings timeStep="1" frameRate="1" cumulativeTemporalRange="0" timeStepUnit="h"/>
<ElevationProperties>
<terrainProvider type="flat">
<TerrainProvider offset="0" scale="1"/>
</terrainProvider>
</ElevationProperties>
<ProjectDisplaySettings CoordinateType="MapCrs" CoordinateAxisOrder="Default">
<BearingFormat id="bearing">
<Option type="Map">
<Option name="decimal_separator" type="invalid"/>
<Option name="decimals" type="int" value="6"/>
<Option name="direction_format" type="int" value="0"/>
<Option name="rounding_type" type="int" value="0"/>
<Option name="show_plus" type="bool" value="false"/>
<Option name="show_thousand_separator" type="bool" value="true"/>
<Option name="show_trailing_zeros" type="bool" value="false"/>
<Option name="thousand_separator" type="invalid"/>
</Option>
</BearingFormat>
<GeographicCoordinateFormat id="geographiccoordinate">
<Option type="Map">
<Option name="angle_format" type="QString" value="DecimalDegrees"/>
<Option name="decimal_separator" type="invalid"/>
<Option name="decimals" type="int" value="6"/>
<Option name="rounding_type" type="int" value="0"/>
<Option name="show_leading_degree_zeros" type="bool" value="false"/>
<Option name="show_leading_zeros" type="bool" value="false"/>
<Option name="show_plus" type="bool" value="false"/>
<Option name="show_suffix" type="bool" value="false"/>
<Option name="show_thousand_separator" type="bool" value="true"/>
<Option name="show_trailing_zeros" type="bool" value="false"/>
<Option name="thousand_separator" type="invalid"/>
</Option>
</GeographicCoordinateFormat>
<CoordinateCustomCrs>
<spatialrefsys nativeFormat="Wkt">
<wkt>GEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],USAGE[SCOPE["Horizontal component of 3D system."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",4326]]</wkt>
<proj4>+proj=longlat +datum=WGS84 +no_defs</proj4>
<srsid>3452</srsid>
<srid>4326</srid>
<authid>EPSG:4326</authid>
<description>WGS 84</description>
<projectionacronym>longlat</projectionacronym>
<ellipsoidacronym>EPSG:7030</ellipsoidacronym>
<geographicflag>true</geographicflag>
</spatialrefsys>
</CoordinateCustomCrs>
</ProjectDisplaySettings>
<ProjectGpsSettings destinationLayerName="testlayer_2056" destinationLayerSource="/home/dave/dev/qgis/QGIS/tests/testdata/qgis_server/testlayer_2056.shp" destinationLayer="testlayer_2056_0a0d85af_384f_43a8_aafd_ce618f07606c" autoCommitFeatures="0" autoAddTrackVertices="0" destinationFollowsActiveLayer="1" destinationLayerProvider="ogr">
<timeStampFields/>
</ProjectGpsSettings>
</qgis>