From 072299a4115f1f91f84f01c51beb4d4fd02f0aff Mon Sep 17 00:00:00 2001 From: nboisteault Date: Tue, 8 Oct 2024 18:04:43 +0200 Subject: [PATCH 1/5] e2e: add group as layer with categorized layer in it --- tests/qgis-projects/tests/treeview.qgs | 6410 ++++++++++++-------- tests/qgis-projects/tests/treeview.qgs.cfg | 104 +- 2 files changed, 4034 insertions(+), 2480 deletions(-) diff --git a/tests/qgis-projects/tests/treeview.qgs b/tests/qgis-projects/tests/treeview.qgs index 6411e75938..bcb3cc74dc 100644 --- a/tests/qgis-projects/tests/treeview.qgs +++ b/tests/qgis-projects/tests/treeview.qgs @@ -1,9 +1,8 @@ - - - + + - - + + 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]] @@ -17,128 +16,146 @@ true + - - + - + - + - + + + - + + - + - - + - - + - + - + - - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + quartiers_d4340dfd_5ee8_425d_83b7_2739f413adab shop_bakery_pg_e9fe3037_8b88_49d3_bce7_f4937094d451 @@ -149,30 +166,34 @@ sousquartiers_898a5c49_5d3b_4269_a2d0_dec7a0f63f41 sousquartiers_dd34c8e5_6378_4f17_a094_692a5331da08 quartiers_5213f284_468d_444c_9b0f_fa3c94f152b6 + quartiers_9e366586_a07f_4aee_97a0_491e6c629515 + sousquartiers_02c7827d_1eea_42c7_8c44_adf26fcf5576 - + - - - - - - - - - + + + + + + + + + + + - - + + degrees - 3.80271849898979664 - 43.56384569619927305 - 3.94563555347087291 - 43.65594272055793823 + 3.81079831096810562 + 43.49009926199924791 + 4.09663241993025817 + 43.67429331071657828 0 @@ -189,73 +210,85 @@ 0 - + - + - - - + + + - - + + - + - + - - - + + + - - - + + + - + - - + + - + + + + + + + + + - - + + Annotations_e3b9b39a_4126_4bae_b374_124902b7e078 @@ -282,7 +315,8 @@ - + + @@ -298,15 +332,24 @@ false - + - + + + 1 + 1 + 1 + 0 + + + + 1 0 - + - + 3.80707036695971279 43.56670409545019851 @@ -346,7 +389,8 @@ dataset - + + @@ -362,306 +406,316 @@ true - + postgres - - - - + + + + - + - - + + 1 1 1 0 - + - + + + - + + + - - + + - + + + - - + + - + + + - - + + - + - + + + - - + + - - + + + + + - 0 0 1 - + - - + - - + + - + - - + - - + - - + - - + - - - - - - + + + + + + + + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - + - + - - + + - - + + - + - + 0 - + 0 generatedlayout - - - - - + + + + + - + - + 3.80707036695971279 43.56670409545019851 @@ -701,7 +755,383 @@ dataset - + + + + + + + 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]] + +proj=longlat +datum=WGS84 +no_defs + 3452 + 4326 + EPSG:4326 + WGS 84 + longlat + EPSG:7030 + true + + + + + postgres + + + + + + + + + + + 1 + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + generatedlayout + + + + + + + + + + + 3.80707036695971279 + 43.56670409545019851 + 3.94133068060567293 + 43.65337122449288643 + + + 3.80707036695971279 + 43.56670409545019851 + 3.94133068060567293 + 43.65337122449288643 + + quartiers_9e366586_a07f_4aee_97a0_491e6c629515 + service='lizmapdb' key='quartier' estimatedmetadata=true srid=4326 type=MultiPolygon checkPrimaryKeyUnicity='1' table="tests_projects"."quartiers" (geom) + quartiers_1 + + + + quartiers_categorized + + + 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]] + +proj=longlat +datum=WGS84 +no_defs + 3452 + 4326 + EPSG:4326 + WGS 84 + longlat + EPSG:7030 + true + + + + + + + dataset + + + + + + + + + + + + + @@ -717,325 +1147,1247 @@ true - + + + + + + + + + postgres - - - - + + + + - + + + + + + 1 + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + # -*- coding: utf-8 -*- +""" +Les formulaires QGIS peuvent avoir une fonction Python qui est appelée lorsque le formulaire est +ouvert. + +Utilisez cette fonction pour ajouter une logique supplémentaire à vos formulaires. + +Entrez le nom de la fonction dans le champ +"Fonction d'initialisation Python". +Voici un exemple: +""" +from qgis.PyQt.QtWidgets import QWidget + +def my_form_open(dialog, layer, feature): + geom = feature.geometry() + control = dialog.findChild(QWidget, "MyLineEdit") + + 0 + generatedlayout + + + + + + + + + + + + + + + + + + + + + + + + "quartmno" + + + + + 3.80707036695971279 + 43.56670409545019851 + 3.94133068060567293 + 43.65337122449288643 + + + 3.80707036695971279 + 43.56670409545019851 + 3.94133068060567293 + 43.65337122449288643 + + quartiers_d4340dfd_5ee8_425d_83b7_2739f413adab + service='lizmapdb' sslmode=disable key='quartier' estimatedmetadata=true srid=4326 type=MultiPolygon checkPrimaryKeyUnicity='1' table="tests_projects"."quartiers" (geom) + quartiers + + + + quartiers + + + 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]] + +proj=longlat +datum=WGS84 +no_defs + 3452 + 4326 + EPSG:4326 + WGS 84 + longlat + EPSG:7030 + true + + + + + + + dataset + + + + + + + + + + + + + + + + + + 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]] + +proj=longlat +datum=WGS84 +no_defs + 3452 + 4326 + EPSG:4326 + WGS 84 + longlat + EPSG:7030 + true + + + + + + + + + + + + + postgres + + + + + + - - + + 1 1 1 0 - + - + + + - + + + - - + + - + + + - - + + - + + + - - + + - + - + + + - - + + - - + + + + + - + + + 0 0 1 - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - - + + - - - + + - - - + + - - - + + - - - - - - + + + + + + + + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - + - + - - + + + + + + + + + - - + + - + - + 0 - + # -*- 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") + 0 generatedlayout - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + "quartmno" + - + - 3.80707036695971279 - 43.56670409545019851 - 3.94133068060567293 - 43.65337122449288643 + 3.79986325786202084 + 43.55817897089504953 + 3.94908164824975216 + 43.68764871034932895 - 3.80707036695971279 - 43.56670409545019851 - 3.94133068060567293 - 43.65337122449288643 + 3.79986325786202084 + 43.55817897089504953 + 3.94908164824975216 + 43.68764871034932895 - quartiers_d4340dfd_5ee8_425d_83b7_2739f413adab - service='lizmapdb' sslmode=disable key='quartier' estimatedmetadata=true srid=4326 type=MultiPolygon checkPrimaryKeyUnicity='1' table="tests_projects"."quartiers" (geom) - quartiers + shop_bakery_pg_e9fe3037_8b88_49d3_bce7_f4937094d451 + service='lizmapdb' sslmode=disable key='id' estimatedmetadata=true srid=4326 type=Point checkPrimaryKeyUnicity='1' table="tests_projects"."shop_bakery_pg" (geom) + shop_bakery_pg - quartiers + shop_bakery_pg 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]] @@ -1065,7 +2417,8 @@ - + + @@ -1082,7 +2435,7 @@ - + @@ -1092,254 +2445,265 @@ postgres - - - - - - + + + + + + - - + + 1 1 1 0 - + - + + + - + + + - - + + - + + + - - + + - + + + - - + + - + - + + + - - + + - - + + + + + + + 0 0 1 - - - + + + - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1347,116 +2711,78 @@ - + + + - - - - - + + + - - + + - - - - - - - - - - - - - + - - + - - - - - - - - - - - - + + + + + + - - - - - + + - - - - - + + - - - - - + + - + - + - + - - - + + - + - + 0 - # -*- coding: utf-8 -*- """ QGIS forms can have a Python function that is called when the form is opened. @@ -1472,66 +2798,57 @@ from qgis.PyQt.QtWidgets import QWidget def my_form_open(dialog, layer, feature): geom = feature.geometry() control = dialog.findChild(QWidget, "MyLineEdit") -]]> + 0 generatedlayout - - - - - + + - - - - - + + - - - - - + + - - - "quartmno" - + + + "name" + - + - 3.79986325786202084 - 43.55817897089504953 - 3.94908164824975216 - 43.68764871034932895 + 765145.88230000005569309 + 6274561.22229999955743551 + 776031.66700000001583248 + 6284189.52060000039637089 - 3.79986325786202084 - 43.55817897089504953 - 3.94908164824975216 - 43.68764871034932895 + 3.80612128600125121 + 43.56603848249352495 + 3.94223276645941878 + 43.65374993426367922 - shop_bakery_pg_e9fe3037_8b88_49d3_bce7_f4937094d451 - service='lizmapdb' sslmode=disable key='id' estimatedmetadata=true srid=4326 type=Point checkPrimaryKeyUnicity='1' table="tests_projects"."shop_bakery_pg" (geom) - shop_bakery_pg + sousquartiers_02c7827d_1eea_42c7_8c44_adf26fcf5576 + service='lizmapdb' key='id' estimatedmetadata=true srid=2154 type=MultiPolygon checkPrimaryKeyUnicity='1' table="tests_projects"."sousquartiers" (geom) + sousquartiers_1 - shop_bakery_pg + sousquartiers - 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]] - +proj=longlat +datum=WGS84 +no_defs - 3452 - 4326 - EPSG:4326 - WGS 84 - longlat - EPSG:7030 - true + PROJCRS["RGF93 v1 / Lambert-93",BASEGEOGCRS["RGF93 v1",DATUM["Reseau Geodesique Francais 1993 v1",ELLIPSOID["GRS 1980",6378137,298.257222101,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4171]],CONVERSION["Lambert-93",METHOD["Lambert Conic Conformal (2SP)",ID["EPSG",9802]],PARAMETER["Latitude of false origin",46.5,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8821]],PARAMETER["Longitude of false origin",3,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8822]],PARAMETER["Latitude of 1st standard parallel",49,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8823]],PARAMETER["Latitude of 2nd standard parallel",44,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8824]],PARAMETER["Easting at false origin",700000,LENGTHUNIT["metre",1],ID["EPSG",8826]],PARAMETER["Northing at false origin",6600000,LENGTHUNIT["metre",1],ID["EPSG",8827]]],CS[Cartesian,2],AXIS["easting (X)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["northing (Y)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Engineering survey, topographic mapping."],AREA["France - onshore and offshore, mainland and Corsica."],BBOX[41.15,-9.86,51.56,10.38]],ID["EPSG",2154]] + +proj=lcc +lat_0=46.5 +lon_0=3 +lat_1=49 +lat_2=44 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs + 145 + 2154 + EPSG:2154 + RGF93 v1 / Lambert-93 + lcc + EPSG:7019 + false @@ -1550,24 +2867,25 @@ def my_form_open(dialog, layer, feature): - + + - 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]] - +proj=longlat +datum=WGS84 +no_defs - 3452 - 4326 - EPSG:4326 - WGS 84 - longlat - EPSG:7030 - true + PROJCRS["RGF93 v1 / Lambert-93",BASEGEOGCRS["RGF93 v1",DATUM["Reseau Geodesique Francais 1993 v1",ELLIPSOID["GRS 1980",6378137,298.257222101,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4171]],CONVERSION["Lambert-93",METHOD["Lambert Conic Conformal (2SP)",ID["EPSG",9802]],PARAMETER["Latitude of false origin",46.5,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8821]],PARAMETER["Longitude of false origin",3,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8822]],PARAMETER["Latitude of 1st standard parallel",49,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8823]],PARAMETER["Latitude of 2nd standard parallel",44,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8824]],PARAMETER["Easting at false origin",700000,LENGTHUNIT["metre",1],ID["EPSG",8826]],PARAMETER["Northing at false origin",6600000,LENGTHUNIT["metre",1],ID["EPSG",8827]]],CS[Cartesian,2],AXIS["easting (X)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["northing (Y)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Engineering survey, topographic mapping."],AREA["France - onshore and offshore, mainland and Corsica."],BBOX[41.15,-9.86,51.56,10.38]],ID["EPSG",2154]] + +proj=lcc +lat_0=46.5 +lon_0=3 +lat_1=49 +lat_2=44 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs + 145 + 2154 + EPSG:2154 + RGF93 v1 / Lambert-93 + lcc + EPSG:7019 + false - + @@ -1577,262 +2895,289 @@ def my_form_open(dialog, layer, feature): postgres - - - - + + + + - + - - + + 1 1 1 0 - + - + + + - + + + - - + + - + + + - - + + - + + + - - + + - + - + + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 0 1 - - - + + - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1840,110 +3185,168 @@ def my_form_open(dialog, layer, feature): - + + + - - - + + + + + + + + - - + + - + + + + + + + + + + + + + + + + + + + + + + - - + - - - + + + + + + + + + + + + - - + + + + + - - + + + + + - - + + + + + - + - + - + - - - + + - + - + 0 - # -*- coding: utf-8 -*- """ -QGIS forms can have a Python function that is called when the form is -opened. +Les formulaires QGIS peuvent avoir une fonction Python qui est appelée lorsque le formulaire est +ouvert. -Use this function to add extra logic to your forms. +Utilisez cette fonction pour ajouter une logique supplémentaire à vos formulaires. -Enter the name of the function in the "Python Init function" -field. -An example follows: +Entrez le nom de la fonction dans le champ +"Fonction d'initialisation Python". +Voici un exemple: """ from qgis.PyQt.QtWidgets import QWidget def my_form_open(dialog, layer, feature): geom = feature.geometry() control = dialog.findChild(QWidget, "MyLineEdit") -]]> + 0 generatedlayout - - + + + + + - - + + + + + - - + + + + + - - - "name" - + + + "quartmno" + - + 765145.88230000005569309 6274561.22229999955743551 @@ -1983,7 +3386,8 @@ def my_form_open(dialog, layer, feature): dataset - + + @@ -1999,306 +3403,316 @@ def my_form_open(dialog, layer, feature): false - + postgres - - - - + + + + - + - - + + 1 1 1 0 - + - + + + - + + + - - + + - + + + - - + + - + + + - - + + - + - + + + - - + + - - + + + + + - 0 0 1 - + - - + - - + + - + - - + - - + - - + - - + - - - - - - + + + + + + + + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - + - + - - + + - - + + - + - + 0 - + 0 generatedlayout - - - - - + + + + + - + - + 765145.88230000005569309 6274561.22229999955743551 @@ -2347,7 +3761,8 @@ def my_form_open(dialog, layer, feature): - + + @@ -2364,7 +3779,7 @@ def my_form_open(dialog, layer, feature): - + @@ -2374,252 +3789,252 @@ def my_form_open(dialog, layer, feature): postgres - - - - + + + + - + 1 1 1 0 - + - - + + - + + + - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + - + + + + + + + + + + + + + - + + + - + + + + + + + + + + + + + + + + + + + + + - + - + + + - + + + + + + + + + + + + + - - + + + + 0 0 1 - - - + + + - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2627,115 +4042,115 @@ def my_form_open(dialog, layer, feature): - + + + - - + + + + - - + + - - - - - - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - + - + - + - - - + + - - - + + + 0 - + # -*- coding: utf-8 -*- """ QGIS forms can have a Python function that is called when the form is @@ -2756,730 +4171,733 @@ def my_form_open(dialog, layer, feature): 0 generatedlayout - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - + + "quartmno" - + 2 - + - - + + 1 1 1 0 - + - + + + - + + + - - + + - + + + - - + + - + + + - - + + - + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - + + + - - + + - + + + - - + + - + + + - - + + - + + + - - + + - + + + - - + + - + + + - - + + - + + + - - + + - + + + - - + + - + + + - - + + - + + + - - + + - + + + - - + + - + + + - - + + - + + + - - + + - + + + - - + + - + + + - - + + + + + - + + 0 0 1 - - - + + + - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3487,116 +4905,123 @@ def my_form_open(dialog, layer, feature): - + + + - - + + - + + - - + + - + - - + - - + - - + - - + - - - - - - + + + + + + + + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - + - + - + - - - + + - + - + 0 - # -*- coding: utf-8 -*- """ QGIS forms can have a Python function that is called when the form is opened. @@ -3612,36 +5037,36 @@ from qgis.PyQt.QtWidgets import QWidget def my_form_open(dialog, layer, feature): geom = feature.geometry() control = dialog.findChild(QWidget, "MyLineEdit") -]]> + 0 generatedlayout - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - + + "quartmno" - + - + 765145.88230000005569309 6274561.22229999955743551 @@ -3681,7 +5106,8 @@ def my_form_open(dialog, layer, feature): dataset - + + @@ -3697,306 +5123,316 @@ def my_form_open(dialog, layer, feature): false - + postgres - - - - + + + + - + - - + + 1 1 1 0 - + - + + + - + + + - - + + - + + + - - + + - + + + - - + + - + - + + + - - + + - - + + + + + - 0 0 1 - + - - + - - + + - + - - + - - + - - + - - + - - - - - - + + + + + + + + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - + - + - - + + - - + + - + - + 0 - + 0 generatedlayout - - - - - + + + + + - + - + 760748.21375807060394436 6280073.41499996930360794 @@ -4037,7 +5473,8 @@ def my_form_open(dialog, layer, feature): dataset - + + @@ -4053,278 +5490,284 @@ def my_form_open(dialog, layer, feature): false - + postgres - - - - + + + + - + - - + + 1 1 1 0 - + - + + + - + + + - - + + - + + + - - + + - + + + - - + + - + - + + + - - + + - - + + + + + - 0 0 1 - + - - + - - + + - + - - + + + + - + - + - + - + - + - - + + - - + + - + - + 0 - + 0 generatedlayout - - - - - + + + + + - + - + 760946.65125827305018902 6280139.56083337031304836 @@ -4364,7 +5807,8 @@ def my_form_open(dialog, layer, feature): dataset - + + @@ -4380,280 +5824,288 @@ def my_form_open(dialog, layer, feature): false - + postgres - - - - + + + + - + - - + + 1 1 1 0 - + - + + + - + + + - - + + - + + + - - + + - + + + - - + + - + - + + + - - + + - - + + + + + - 0 0 1 - + - - + - - + + - + - - + + + + - + - + - + - + - + - - + + - - + + - + - + 0 - + 0 generatedlayout - - - - - + + + + + - + - - - - - - - - - + + + + + + + + + + + @@ -4685,6 +6137,7 @@ def my_form_open(dialog, layer, feature): 5 2.5 + false false false 1 @@ -4712,7 +6165,7 @@ def my_form_open(dialog, layer, feature): lizmap_user_groups - + intranet @@ -4730,68 +6183,68 @@ def my_form_open(dialog, layer, feature): + + - - + + - + - - - - - - - - - - + + + + + + + + + + - - + + - - - - - + + + + + - - + + - + - - - - - - - - - - + + + + + + + + + + - - + + - - - - - + + + + + - + @@ -4799,17 +6252,21 @@ def my_form_open(dialog, layer, feature): - + + + + nboisteault 2022-04-12T10:52:24 - - - - + + + + + - - + + 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]] +proj=longlat +datum=WGS84 +no_defs @@ -4823,41 +6280,41 @@ def my_form_open(dialog, layer, feature): - - + + - + - + + + + + + + + + + + + + + + + + + @@ -4874,4 +6331,7 @@ def my_form_open(dialog, layer, feature): - + + + + \ No newline at end of file diff --git a/tests/qgis-projects/tests/treeview.qgs.cfg b/tests/qgis-projects/tests/treeview.qgs.cfg index 26c8c97b86..a0a175cb61 100644 --- a/tests/qgis-projects/tests/treeview.qgs.cfg +++ b/tests/qgis-projects/tests/treeview.qgs.cfg @@ -3,14 +3,14 @@ "qgis_desktop_version": 33411, "lizmap_plugin_version_str": "4.4.3-alpha", "lizmap_plugin_version": 40403, - "lizmap_web_client_target_version": 30800, - "lizmap_web_client_target_status": "Stable", - "instance_target_url": "https://demo.lizmap.com/lizmap/", - "instance_target_repository": "features" + "lizmap_web_client_target_version": 30900, + "lizmap_web_client_target_status": "Dev", + "instance_target_url": "http://localhost:8130/", + "instance_target_repository": "intranet" }, "warnings": {}, "debug": { - "total_time": 0.636 + "total_time": 0.818 }, "options": { "projection": { @@ -576,6 +576,100 @@ "imageFormat": "image/png", "cached": "False", "clientCacheExpiration": 300 + }, + "mutually exclusive group with one categorized layer": { + "id": "mutually exclusive group with one categorized layer", + "name": "mutually exclusive group with one categorized layer", + "type": "layer", + "title": "mutually exclusive group with one categorized layer", + "abstract": "", + "link": "", + "minScale": 1, + "maxScale": 1000000000000, + "toggled": "True", + "popup": "False", + "popupSource": "auto", + "popupTemplate": "", + "popupMaxFeatures": 10, + "popupDisplayChildren": "False", + "popup_allow_download": true, + "legend_image_option": "hide_at_startup", + "groupAsLayer": "True", + "baseLayer": "False", + "displayInLegend": "True", + "group_visibility": [], + "singleTile": "True", + "imageFormat": "image/png", + "cached": "False", + "clientCacheExpiration": 300 + }, + "sousquartiers": { + "id": "sousquartiers_02c7827d_1eea_42c7_8c44_adf26fcf5576", + "name": "sousquartiers", + "type": "layer", + "geometryType": "polygon", + "extent": [ + 765145.8823, + 6274561.2223, + 776031.667, + 6284189.5206 + ], + "crs": "EPSG:2154", + "title": "sousquartiers", + "abstract": "", + "link": "", + "minScale": 1, + "maxScale": 1000000000000, + "toggled": "False", + "popup": "False", + "popupSource": "auto", + "popupTemplate": "", + "popupMaxFeatures": 10, + "popupDisplayChildren": "False", + "popup_allow_download": true, + "legend_image_option": "hide_at_startup", + "groupAsLayer": "False", + "baseLayer": "False", + "displayInLegend": "True", + "group_visibility": [], + "singleTile": "True", + "imageFormat": "image/png", + "cached": "False", + "clientCacheExpiration": 300 + }, + "quartiers_categorized": { + "id": "quartiers_9e366586_a07f_4aee_97a0_491e6c629515", + "name": "quartiers_categorized", + "type": "layer", + "geometryType": "polygon", + "extent": [ + 3.807070366959713, + 43.5667040954502, + 3.941330680605673, + 43.653371224492886 + ], + "crs": "EPSG:4326", + "title": "quartiers_categorized", + "abstract": "", + "link": "", + "minScale": 1, + "maxScale": 1000000000000, + "toggled": "False", + "popup": "False", + "popupSource": "auto", + "popupTemplate": "", + "popupMaxFeatures": 10, + "popupDisplayChildren": "False", + "popup_allow_download": true, + "legend_image_option": "hide_at_startup", + "groupAsLayer": "False", + "baseLayer": "False", + "displayInLegend": "True", + "group_visibility": [], + "singleTile": "True", + "imageFormat": "image/png; mode=8bit", + "cached": "False", + "clientCacheExpiration": 300 } }, "atlas": { From f740860bc049d7ea62210b78e2cde9e448a9ce9e Mon Sep 17 00:00:00 2001 From: nboisteault Date: Tue, 8 Oct 2024 18:05:17 +0200 Subject: [PATCH 2/5] Fix expanded for categorized symbology in group as layer --- assets/src/modules/state/Symbology.js | 34 ++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/assets/src/modules/state/Symbology.js b/assets/src/modules/state/Symbology.js index 3f7daeb54c..bea267441f 100644 --- a/assets/src/modules/state/Symbology.js +++ b/assets/src/modules/state/Symbology.js @@ -421,6 +421,36 @@ export class BaseSymbolsSymbology extends BaseObjectSymbology { for(const symbol of this._symbols) { this._icons.push(new iconClass(symbol)); } + + this._expanded = false; + } + + /** + * Symbol item is expanded + * @type {boolean} + */ + get expanded() { + return this._expanded; + } + + /** + * Set symbol item is expanded + * @type {boolean} + */ + set expanded(val) { + const newVal = convertBoolean(val); + if (this._expanded === newVal) { + return; + } + + this._expanded = newVal; + + this.dispatch({ + type: 'symbol.expanded.changed', + title: this.title, + ruleKey: this.ruleKey, + expanded: this.expanded + }); } /** @@ -621,7 +651,9 @@ export class LayerGroupSymbology extends BaseObjectSymbology { this._symbologyNodes = []; for(const node of this._nodes) { if (node.hasOwnProperty('symbols')) { - this._symbologyNodes.push(new BaseSymbolsSymbology(node)); + const symbol = new BaseSymbolsSymbology(node); + symbol.addListener(this.dispatch.bind(this), 'symbol.expanded.changed'); + this._symbologyNodes.push(symbol); } else if (node.hasOwnProperty('icon')) { this._symbologyNodes.push(new BaseIconSymbology(node)); } From 345dd26a497ba74d3c71d019d281bc5abd76b6ad Mon Sep 17 00:00:00 2001 From: rldhont Date: Thu, 17 Oct 2024 19:07:01 +0200 Subject: [PATCH 3/5] Fix expanded for categorized symbology in group as layer --- assets/src/components/Treeview.js | 2 +- assets/src/modules/state/Layer.js | 11 +++++++ assets/src/modules/state/MapLayer.js | 1 + assets/src/modules/state/Symbology.js | 42 ++++++++++++++++++++------- 4 files changed, 45 insertions(+), 11 deletions(-) diff --git a/assets/src/components/Treeview.js b/assets/src/components/Treeview.js index 108c012a92..eeda157172 100644 --- a/assets/src/components/Treeview.js +++ b/assets/src/components/Treeview.js @@ -66,7 +66,7 @@ export default class Treeview extends HTMLElement { this._symbolTemplate = symbol => html` -
  • +
  • ${(symbol.childrenCount) ? html` ` diff --git a/assets/src/modules/state/Layer.js b/assets/src/modules/state/Layer.js index a01db65fc1..14cb6a4734 100644 --- a/assets/src/modules/state/Layer.js +++ b/assets/src/modules/state/Layer.js @@ -369,6 +369,17 @@ export class LayerItemState extends EventDispatcher { }); }, 'symbol.expanded.changed'); } + } else if (this.symbology instanceof LayerGroupSymbology) { + const self = this; + this.symbology.addListener(evt => { + self.dispatch({ + type: 'layer.symbol.expanded.changed', + name: self.name, + title: evt.title, + ruleKey: evt.ruleKey, + expanded: evt.expanded, + }); + }, 'symbol.expanded.changed'); } this.dispatch({ type: this.mapType + '.symbology.changed', diff --git a/assets/src/modules/state/MapLayer.js b/assets/src/modules/state/MapLayer.js index db07a2c244..30c9d09e30 100644 --- a/assets/src/modules/state/MapLayer.js +++ b/assets/src/modules/state/MapLayer.js @@ -67,6 +67,7 @@ export class MapItemState extends EventDispatcher { this.dispatch.bind(this), layerItemState.mapType + '.opacity.changed' ); + layerItemState.addListener(this.dispatch.bind(this), 'layer.symbol.expanded.changed'); } else { layerItemState.addListener(this.dispatch.bind(this), 'layer.visibility.changed'); layerItemState.addListener(this.dispatch.bind(this), 'layer.symbology.changed'); diff --git a/assets/src/modules/state/Symbology.js b/assets/src/modules/state/Symbology.js index bea267441f..cd9cb1cc0c 100644 --- a/assets/src/modules/state/Symbology.js +++ b/assets/src/modules/state/Symbology.js @@ -89,13 +89,20 @@ export class BaseObjectSymbology extends EventDispatcher { /** * Create a base symbology instance based on a node object provided by QGIS Server - * @param {object} node - the QGIS node symbology - * @param {string} node.title - the node title + * @param {object} node - the QGIS node symbology + * @param {string} node.title - the node title + * @param {string} [node.type] - the node type * @param {object} [requiredProperties] - the required properties definition - * @param {object} [optionalProperties] - the optional properties definition + * @param {object} [optionalProperties] - the optional properties definition */ - constructor(node, requiredProperties = { 'title': { type: 'string' } }, optionalProperties = {}) { - + constructor(node, requiredProperties = { 'title': { type: 'string' } }, optionalProperties = {}) + { + if (!node.hasOwnProperty('type')) { + node.type = 'icon'; + } + if (!requiredProperties.hasOwnProperty('type')) { + requiredProperties['type'] = { type: 'string' }; + } if (!requiredProperties.hasOwnProperty('title')) { requiredProperties['title'] = { type: 'string' }; } @@ -104,6 +111,14 @@ export class BaseObjectSymbology extends EventDispatcher { applyConfig(this, node, requiredProperties, optionalProperties) } + /** + * The symbology type + * @type {string} + */ + get type() { + return this._type; + } + /** * The symbology title * @type {string} @@ -121,14 +136,15 @@ export class BaseObjectSymbology extends EventDispatcher { export class BaseIconSymbology extends BaseObjectSymbology { /** * Create a base icon symbology instance based on a node object provided by QGIS Server - * @param {object} node - the QGIS node symbology - * @param {string} node.icon - the png image in base64 - * @param {string} node.title - the node title + * @param {object} node - the QGIS node symbology + * @param {string} node.icon - the png image in base64 + * @param {string} node.title - the node title + * @param {string} [node.type] - the node type * @param {object} [requiredProperties] - the required properties definition * @param {object} [optionalProperties] - the optional properties definition */ - constructor(node, requiredProperties={}, optionalProperties = {}) { - + constructor(node, requiredProperties={}, optionalProperties = {}) + { if (!requiredProperties.hasOwnProperty('icon')) { requiredProperties['icon'] = { type: 'string' }; } @@ -211,6 +227,9 @@ export class SymbolIconSymbology extends BaseIconSymbology { * @param {boolean} node.checked - the node is checked by default */ constructor(node) { + if (!node.hasOwnProperty('type')) { + node.type = 'icon'; + } super(node, symbolIconProperties, symbolIconOptionalProperties) this._childrenRules = [] } @@ -280,6 +299,9 @@ const symbolRuleOptionalProperties = Object.assign( */ export class SymbolRuleSymbology extends SymbolIconSymbology { constructor(node) { + if (!node.hasOwnProperty('type')) { + node.type = 'rule'; + } super(node, symbolRuleProperties, symbolRuleOptionalProperties) this._parentRule = null; this._childrenRules = []; From 4b2966090bd43a2d7b35f6c6a7bf311eef7fbdb6 Mon Sep 17 00:00:00 2001 From: rldhont Date: Fri, 18 Oct 2024 19:41:20 +0200 Subject: [PATCH 4/5] Fix expanded for categorized symbology in group as layer --- assets/src/modules/state/Layer.js | 4 +- assets/src/modules/state/Symbology.js | 19 +- .../data/cadastre-caen-fond-legend.json | 364 ++++++++++++++++++ tests/js-units/node/state/layer.test.js | 60 ++- tests/js-units/node/state/symbology.test.js | 143 ++++++- 5 files changed, 562 insertions(+), 28 deletions(-) create mode 100644 tests/js-units/data/cadastre-caen-fond-legend.json diff --git a/assets/src/modules/state/Layer.js b/assets/src/modules/state/Layer.js index 14cb6a4734..8091623c40 100644 --- a/assets/src/modules/state/Layer.js +++ b/assets/src/modules/state/Layer.js @@ -364,7 +364,7 @@ export class LayerItemState extends EventDispatcher { type: 'layer.symbol.expanded.changed', name: self.name, title: evt.title, - ruleKey: evt.ruleKey, + symbolType: evt.symbolType, expanded: evt.expanded, }); }, 'symbol.expanded.changed'); @@ -376,7 +376,7 @@ export class LayerItemState extends EventDispatcher { type: 'layer.symbol.expanded.changed', name: self.name, title: evt.title, - ruleKey: evt.ruleKey, + symbolType: evt.symbolType, expanded: evt.expanded, }); }, 'symbol.expanded.changed'); diff --git a/assets/src/modules/state/Symbology.js b/assets/src/modules/state/Symbology.js index cd9cb1cc0c..0bd6a284b0 100644 --- a/assets/src/modules/state/Symbology.js +++ b/assets/src/modules/state/Symbology.js @@ -95,13 +95,13 @@ export class BaseObjectSymbology extends EventDispatcher { * @param {object} [requiredProperties] - the required properties definition * @param {object} [optionalProperties] - the optional properties definition */ - constructor(node, requiredProperties = { 'title': { type: 'string' } }, optionalProperties = {}) + constructor(node, requiredProperties = { 'title': { type: 'string' } }, optionalProperties = { 'type': { type: 'string' } }) { if (!node.hasOwnProperty('type')) { node.type = 'icon'; } - if (!requiredProperties.hasOwnProperty('type')) { - requiredProperties['type'] = { type: 'string' }; + if (!optionalProperties.hasOwnProperty('type')) { + optionalProperties['type'] = { type: 'string' }; } if (!requiredProperties.hasOwnProperty('title')) { requiredProperties['title'] = { type: 'string' }; @@ -137,16 +137,19 @@ export class BaseIconSymbology extends BaseObjectSymbology { /** * Create a base icon symbology instance based on a node object provided by QGIS Server * @param {object} node - the QGIS node symbology - * @param {string} node.icon - the png image in base64 * @param {string} node.title - the node title + * @param {string} [node.icon] - the png image in base64 * @param {string} [node.type] - the node type * @param {object} [requiredProperties] - the required properties definition * @param {object} [optionalProperties] - the optional properties definition */ - constructor(node, requiredProperties={}, optionalProperties = {}) + constructor(node, requiredProperties = { 'title': { type: 'string' } }, optionalProperties = { 'icon': { type: 'string' } }) { - if (!requiredProperties.hasOwnProperty('icon')) { - requiredProperties['icon'] = { type: 'string' }; + if (!optionalProperties.hasOwnProperty('icon')) { + optionalProperties['icon'] = { type: 'string' }; + } + if (!requiredProperties.hasOwnProperty('title')) { + requiredProperties['title'] = { type: 'string' }; } // In case of RuleBasedRenderer the icon could be empty if (!node.hasOwnProperty('icon')) { @@ -470,7 +473,7 @@ export class BaseSymbolsSymbology extends BaseObjectSymbology { this.dispatch({ type: 'symbol.expanded.changed', title: this.title, - ruleKey: this.ruleKey, + symbolType: this.type, expanded: this.expanded }); } diff --git a/tests/js-units/data/cadastre-caen-fond-legend.json b/tests/js-units/data/cadastre-caen-fond-legend.json new file mode 100644 index 0000000000..b60ec75891 --- /dev/null +++ b/tests/js-units/data/cadastre-caen-fond-legend.json @@ -0,0 +1,364 @@ +{ + "nodes": [ + { + "symbols": [ + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAG0lEQVQ4jWNgGAWjgAqAsY57SfxAO2IUDH0AAIv4AY4rqllwAAAAAElFTkSuQmCC", + "title": "texture transparente" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAH0lEQVQ4jWNgGAXDADAyMDD8p8QAJkpdMPAGjIJhAQDZagEHwzuUIgAAAABJRU5ErkJggg==", + "title": "symbole d'église" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAH0lEQVQ4jWNgGAXDADAyMDD8p8QAJkpdMPAGjIJhAQDZagEHwzuUIgAAAABJRU5ErkJggg==", + "title": "symbole de mosquée" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAH0lEQVQ4jWNgGAXDADAyMDD8p8QAJkpdMPAGjIJhAQDZagEHwzuUIgAAAABJRU5ErkJggg==", + "title": "symbole de synagogue" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAIUlEQVQ4jWNgGAUUA8YXc2X/U2IAE6UuGDVgMBgwCqgAAM9NArF/PtKCAAAAAElFTkSuQmCC", + "title": "limite d'Etat" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAH0lEQVQ4jWNgGAUDDxh3ZDv9p8QAJkpdMGrAKBgcAABhQQJw+75YFwAAAABJRU5ErkJggg==", + "title": "limite de département" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAIElEQVQ4jWNgGAXDADD+T2X8T4kBTJS6YOANGAXDAgAAvPECbI7qDmMAAAAASUVORK5CYII=", + "title": "amorce de limite de commune" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAIUlEQVQ4jWNgGAWjgAqAsa2tLZ5YxVVVVQtp6ZhRMHQBAMa/BAJfvSe9AAAAAElFTkSuQmCC", + "title": "chemin" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAG0lEQVQ4jWNgGAWjgAqAsaysLH6gHTEKhj4AAATgAcMghRBPAAAAAElFTkSuQmCC", + "title": "amorce de voie" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAIUlEQVQ4jWNgGAWjgAqAMTMzM55YxdOnT19IS8eMgqELALfLBAJzupN2AAAAAElFTkSuQmCC", + "title": "trottoirs et sentiers" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAI0lEQVQ4jWNgGAXDCPwfMM0sULqGSPUtaHy4PopcMQqGPAAAeL8EflrblxcAAAAASUVORK5CYII=", + "title": "gazoduc ou oléoduc" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAALUlEQVQ4jWNgGAXDBPyHYrIA0///ZOtlYGBgYGBBYu8mQ78rAwMFzh8FwwYAAFmfBwF8qFaWAAAAAElFTkSuQmCC", + "title": "téléphérique" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAJUlEQVQ4jWNgGAWjgAqAkYGB4T8DA0Mtkepb0Pg11HXOKBiqAAB03gJ+MukxYAAAAABJRU5ErkJggg==", + "title": "ligne de transport de force" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAG0lEQVQ4jWNgGAWjgAqAkYGB4cBAO2IUDH0AALqqAMIFZN+JAAAAAElFTkSuQmCC", + "title": "rail de chemin de fer" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAG0lEQVQ4jWNgGAWjgAqAMTMzM36gHTEKhj4AAKwAAZwam+YrAAAAAElFTkSuQmCC", + "title": "*flèche de rattachement d'un numéro de\nparcelle ou de la référence d'un bâtiment\nsur le domaine non cadastré" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAHklEQVQ4jWNgGAWjgAqAkYGBIZ4C/Qup5ZBRMLQBACY9AQK2RnO1AAAAAElFTkSuQmCC", + "title": "terrain de sports, petits ruisseaux" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAI0lEQVQ4jWNgGAWjgAqAsa6uLh6fgqampoW45AjpHQUjBwAAokQF29B3zKUAAAAASUVORK5CYII=", + "title": "parking, terrasse, surplomb" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAG0lEQVQ4jWNgGAWjgAqAMTMzM36gHTEKhj4AAKwAAZwam+YrAAAAAElFTkSuQmCC", + "title": "*objet linéaire divers" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAG0lEQVQ4jWNgGAWjgAqAsTJ74q+BdsQoGPoAAI/jAnEC4tAlAAAAAElFTkSuQmCC", + "title": "" + } + ], + "title": "Objets linéaires", + "type": "layer" + }, + { + "symbols": [ + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAkCAYAAADsHujfAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAYUlEQVRYhe3RsQmDYBSF0YNiE2L793b22c4Z0mWMNK4j7mGdJhs8QYR7Bvi4cImIiIi4txkfvPGohPrikA4rJjRsxV5JwxfPK0fAglc1Ur0GBuw4KpHuhCHjf0xERETcyg+nugZ+/UYCVAAAAABJRU5ErkJggg==", + "title": "" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAW0lEQVRYhe3RMQqAQAwF0VHBam09hZWV3v9C1lYWm8pOIyzCPAikSfgkIEmS/qcAU3ZJ/0GQJSplSMwWYI0QMzACB3C+WZa5SBd175vZgL11CKgvKq1DSJKkpy4D6AN29U4HZgAAAABJRU5ErkJggg==", + "title": "calvaire" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAdElEQVRYhe3PMQrCQBAF0KfmBGksbLyDvb2QG3gyj2ihiAiBkCJNQLHLRtL4X7UzsDN/iIiIiD+1Kfy3R4/uo9egxbNk4KowCJzxwnWsKxxxwW3qsGpGkDse3sesx/ec4yY7YPvVO2G3ZAiol14YERERvzYAG9gK9zsktVEAAAAASUVORK5CYII=", + "title": "flèche de cours d'eau" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACQAAAAiCAYAAAA3WXuFAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAo0lEQVRYhe3TsQqBURgG4IcwmBhspAxEUu7M7Drchs2kbLK6CJPFoCiDGP5fsf7nn/Q9dTrT9/bW+Q4hhBBCKFUlYXaa33UcS+gCagmzPXRwxxN9zHDBCZsiodWEQjUM0MISI5wxwbxoaEqhBw5o5kUaaGOPW9HQlCfb4ZWXGKMr28khVgm5ydayYt9nUTQs5Zd9DPzuTAVbXEvIDiGEEMLfeQPg8haJ47+WgAAAAABJRU5ErkJggg==", + "title": "halte" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAs0lEQVRYhe3SO2qCQRQG0OMjPsBSksbGbCUgFnaWLiKQBbiE7CObyAZSmaxBUkg6G0H4LZxCRBRvrOSebmDm4+PeIaWUUkpn1fCIejk//DewEXzXxxwVRphigBme8H1tYP3ylZNe0CoFuvjBGBssI4HRIj28lxILrPGJP6wigbVgkSa29lOp8IZntEvBq1dzCx18lUIVXiMh0dUcO/z0oSlHV3NsgqF9oQ/83ig3pZRSuj87mRQVlMQS/akAAAAASUVORK5CYII=", + "title": "arrêt" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAARUlEQVRYhe3OsQkAIRBE0S+INdmd2J01GdyZGMklmsjBfzDJwC4DkiRJd4XDuwwUoC99AirQdh/GwyEP8M589ZIkSb8zADgpB/+f2CbDAAAAAElFTkSuQmCC", + "title": "station" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAA0ElEQVRYhe3TsQ6CMBCA4dNuusMLkLI4m7gQtj6EvgxvwOTMIDR06WOY8AysEiBlYSuE1J3NQjDG+8ZL7vIvB4AQQgj9id2SZc/zLo7j3AAA2rZ9lGX5XCfrA4yxiHOutNZGa20454oxFm0aQSk9CyGUmcnzXFFKz5uFBEEQj+M47zDDMJgwDGObm/u1I21ZhdR1nUkpu/lcSqmqqspsbhKbpa7rXn3fHwkhJ9/3D9M0gRBCJUlyL4oitbm5+H1d170CADRNk37lfRFCCKFf8wZxVnEIU6LmRgAAAABJRU5ErkJggg==", + "title": "pylône" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACQAAAAiCAYAAAA3WXuFAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAA7klEQVRYhe3TL26EQBSA8Y9iaJqtYRP+OHRNR7bpLQiyvUDPsYYLVBCSzQoMQfcCbSrmCmgwC4KkGcfU1FQuICreTz315eVlBoQQQgixKWeDxg3w8Dt/Ad9rYqsWiqLoyff9U5Zle4C6rs/DMLz0ff+xtHm1Yh8vDMOj1joJgmAXx/FOa52EYXgEvKXRNRd6zPP8vW3bWwBrLa7rMk2TqarqAByWRNdciHmecRwHa+2fGbgDXoHrNf1LeUqp1hhji6KwZVlaY4xVSrVAArwB95dGN3nUaZruAZqmOY/j+Nx13efS5r/79kIIIYTY2A/uaVBqxZuu4AAAAABJRU5ErkJggg==", + "title": "puits" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAW0lEQVRYhe3RMQqAQAwF0VHBam09hZWV3v9C1lYWm8pOIyzCPAikSfgkIEmS/qcAU3ZJ/0GQJSplSMwWYI0QMzACB3C+WZa5SBd175vZgL11CKgvKq1DSJKkpy4D6AN29U4HZgAAAABJRU5ErkJggg==", + "title": "objet ponctuel divers" + } + ], + "title": "Objets ponctuels", + "type": "layer" + }, + { + "symbols": [ + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAM0lEQVQ4jWNsbm5+w4AGamtrRRgYGBjQ5bCKYzOAFMBEiWaqGDAIwNAPxNFYGAyBSLEBAGUAEeYttsLRAAAAAElFTkSuQmCC", + "title": "limite surfacique ne format pas parcelle" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAANklEQVQ4jWNgYGB4A8UwQCobAg4ePPifEj5FANM5AwIoCYNB4gVKwBsGhgFOBxQD6sTC0M0LAB2GPkXmnPFZAAAAAElFTkSuQmCC", + "title": "parapet de pont" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAHUlEQVQ4jWOUqlxTx0ABYKJE86gBowaMGjCYDAAAUEEB3bOVFq0AAAAASUVORK5CYII=", + "title": "étang, lac, mare" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAKElEQVQ4jWMsLCysYqAAsDAwMDD09fVdINcAJkpsHzVg1IBRA6hoAAD4CgRpR/Xo3gAAAABJRU5ErkJggg==", + "title": "tunnel" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAASUlEQVQ4jWNkYGD4xUAhoMSAX0yU2j5qwLAwgAWPXBIDA0MdIf34DOBlYGCQJ+QCRgZIUmbDIqfEwMCgQ0D/OgaGgc4LMC+QDQAWXwkGz+kHiwAAAABJRU5ErkJggg==", + "title": "cimetière chrétien" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAOUlEQVQ4jWNkYGD4xUAhoMSAX0yU2j5qwKgBw9SAIAYGhj0MDAyaxBrAyICaG5mhhv5nYGD4Q4wBAG+JBzw05oUxAAAAAElFTkSuQmCC", + "title": "cimetière israélite" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAgklEQVQ4jdXSvQ3CQAyG4edSAUOwABVSRmQmKnagTBEKVqCLLhKhyCFQKi6usGTJkuXXn38SsqBFALmJdv8/QFrW1AAaXHHD7jvx6xU2mIof3rU1CgbcS3xcowBORUFvHiPXArboCuSMsRYALR4++1j1yntcIgDms46RT3xiSgEF4AXegh+rzPDoFwAAAABJRU5ErkJggg==", + "title": "cimetière musulman" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAHUlEQVQ4jWOcdfjODAYKABMlmkcNGDVg1IDBZAAAr7EC8a9h4EkAAAAASUVORK5CYII=", + "title": "piscine" + } + ], + "title": "Surfaces", + "type": "layer" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAHUlEQVQ4jWOUqlxTx0ABYKJE86gBowaMGjCYDAAAUEEB3bOVFq0AAAAASUVORK5CYII=", + "title": "Cours d'eau", + "type": "layer" + }, + { + "symbols": [ + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAALElEQVRYhe3OsQ0AMAjAMNT/f6Y7G4IN+4AoEQBAS04Db+Nig5HKSGUEAM76fEABDjbxuhkAAAAASUVORK5CYII=", + "title": "" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAWklEQVRYhe3SIQ6AMBBE0U+CrkHiwHP/e9RWoknKCfAkK7qi6j872cmIBUmSNNeSvNuAEmQdeEYL1+SQHTiCrGWG6C/7IxdwBlkD6mhh9kdu4A2ynuyUJElTfTahCNndElv3AAAAAElFTkSuQmCC", + "title": "mur mitoyen" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAeCAYAAABJ/8wUAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAQElEQVRYhe3OsQkAIBQD0ROsbSzt3H8kZxDcwAks/CA299qQEJAk6a0U7FWgHLIFzNvBHDzSgH7IRuSIJEnSbxulqwQNvxQxygAAAABJRU5ErkJggg==", + "title": "mur non mitoyen" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAe0lEQVRYhe3SqwoCYRAF4A8v2WARBYPYBLfbjL5/9QFEcTV4xaDBxe4fNp0vTZkzEw4RERHRrm7h3hAj3DDGAE9M0cH938Be4SMTzHDCAm9cUGGLujA3fko7ssQKO6wxxxEb9LFv65GXbz9qXJvD52Y+4FGYGxEREa35ABxIFQR5q/FKAAAAAElFTkSuQmCC", + "title": "fossé mitoyen" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAeCAYAAABJ/8wUAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAUUlEQVRYhe3OIQqEYACE0cdq32ARBYN1g/e/i2fQIopJz7A/iGVen48hIiLiWVXhrkGLHR2+ODHgg+PfYF14pMeIFT9c2DBhxlLYjYiIiHjNDfQyCKUP77cIAAAAAElFTkSuQmCC", + "title": "fossé non mitoyen" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAPElEQVRYhe3RwQkAIBADwcVCtP/Ptaifq0AFT9iBfEMgIEmStGUAkekvhwQwM3FS1K7MKaBT5BpJkvStBYsTBo42wpbRAAAAAElFTkSuQmCC", + "title": "clôture mitoyenne" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAgCAYAAAB3j6rJAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAMUlEQVRYhe3OsQ0AIAwEsZ8E9m+yIjTZgCJCsqXrLwEA/rKTVLcmRyrJ6WpyBADg1QWa5AT0ibnrXwAAAABJRU5ErkJggg==", + "title": "clôture non mitoyenne" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAARElEQVRYhe3QMQrAIAxA0W8vqfYU4v0Rh3ZwtoUg/LckU/gEJEmSttzvTECODAHoQPt65PohZPB8JFRd9hJWIUmSTjYB0fQDR9wR6VsAAAAASUVORK5CYII=", + "title": "haie mitoyenne" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAeCAYAAABJ/8wUAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAVklEQVRYhe3QsQ2AMAwF0QMxQVLAQsDITIWYACkFDQUUxEhp7lW/sk4GSZIeLS/7sy4YkoEZ6IENOGoPDcGQHUjAGYn4wwqMwMT1mWbSbedmFZIkqUIBQMUGXfdHqmkAAAAASUVORK5CYII=", + "title": "haie non mitoyenne" + } + ], + "title": "Murs, fossés, clotûres", + "type": "layer" + }, + { + "symbols": [ + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAkCAYAAADsHujfAAAACXBIWXMAAA9hAAAPYQGoP6dpAAABAElEQVRYhe3TrW6EQBQF4NOFEBKC5zdBE3AXFKo1ZLtV8yLNbvtmFU14giKKQxQNCsxgENu0okldxc6obu7nz8m9dzIAY4wxxv6ZoigeyrI86PaYunkiegSAtm1fAZxVi3Y6UxDRPoqiKo7jioj2Ol06g5hZlp1837c8z7OyLDtB48KGarAoivuqqo7TNBnLsiAIAn9d1/dxHD9U+lQvYuZ5/iSltIQQEEJASmmlafoMxeWUQkR0qOv66DiO0TQNuq5DkiQIw9Cf57mbpuniq6i86c513bthGN62bfvN930P27bPruveAngB8HVJ6Y3CIMDPAn9d8xMa35gxxhi7et94OkKZYB69pQAAAABJRU5ErkJggg==", + "title": "Point géodésique borné" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAkCAYAAADsHujfAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAA/ElEQVRYhe3ToW6EQBQF0NuFEMyIcRAYT8jgZlCrwJDt9l+a3e2fVfQXimgTJGhQCEBBsk0rqioqdka1ecffm/feZABCCCGE/DFa64c8z4+2Pa5tXin1CAB1Xb8AuJoW7WymUEod4jjeCyH2SqmDTZfNIK6U8hyGoRcEgSelPMPiwo5pUGt9X5blqSgKRwiBZVnCaZre+r5vTfpML+JmWXbhnHtJkiBJEnDOvTRNn2C4nFFIKXWsquq0bZvTti2apsE8z4iiKBzH8X0YhpuvYvKmO8ZY2XXd67quP/K+718ZYwWAZwCft5TeGQwCfC/w2zU/YPGNCSGEkH/vC54LPaqIaBVeAAAAAElFTkSuQmCC", + "title": "Point géodésique non borné" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAkCAYAAADsHujfAAAACXBIWXMAAA9hAAAPYQGoP6dpAAABAElEQVRYhe3TMUrEQBQG4N81KVJM4QlkiI1ryjdp0mm36EJIIXiDkMZE7yOeIRaeIEPiBXKBdBnsVljUsVBLi50pZOF95cD7+WeGBzDGGGNszyilrtI0vfTNCXzniegWAIZheAbw7lvICRGttdYbrfWGiNY+WYceswERPUZRdDxNU2iMORnH8QHAp0+hnS2Xy5uqqrb2R1mW2yRJrl3zFo5zgZTyriiK8Pcgz/NQSnkPx1d2KkJEq6ZpTruug7UW1lr0fY+6rs+UUiuXTJetWQghLtq2fZnnOcqy7AgA4jh+Nca8CSHOATwBsLuEHjgUAb4v8NcXfOC/1pgxxhjbB18ugEv/EBBKigAAAABJRU5ErkJggg==", + "title": "Point de canevas d'ensemble borné" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAkCAYAAADsHujfAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAtklEQVRYhe3TOw7CMBAE0AHS+ja7OQC0JPew0nAsH4CCJvVG4T6uQKHgowhEERsRRZrXWl6NxzZAREREC6OqVVmW+9w5Re5+ETkAQN/3JwCX3EBJRKQ2s2hmUUTqWUIAKLz37fDgvW+R3/B0qlp1XRefQcws/uKtTFU0TfNq462Vzd9SiEg9bmPciqpWKTNT7nTtnNuFEM4hhI9F59wWwBHAMGXoKiEIcD/Atyu4Yq5vTEREtAQ3n3hhWn7S1g4AAAAASUVORK5CYII=", + "title": "Point de canevas d'ensemble non borné" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAA9hAAAPYQGoP6dpAAABBklEQVRYhe3SsW2FMBAG4N8QQWt2YBEk0qTEYgojlCFoaViCCrLAE91jBRqEDIIWWmjsFIlS50GUIrmvPOt+nU8HEEIIIf8Eu9BrRVGUcs5Dxhi2bbvVdV0A0D813LeGSJLkbZ5nfb/fTdM0ZhxHnSRJhWufe0wURa/Lsug8z03TNKZtW5NlmVFKaSFEeibz6UwT5zzc9535vo8gCAAAtm1DKcU8z3sGUDyaaZ0ZhDEGx3FwHMdXbd93uK57Jg7AyY1s23YD8LKuKyvLEq7rYhgGxHFsPt9+jSWlrKdp0n3fm67rjFJKSylrnDzWKxfOhBCp53kh8LGlqqoKAOZCJiGEEPL3vQPVumrZjIVafQAAAABJRU5ErkJggg==", + "title": "Point de polygonation borné" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAaklEQVRYhe3SMQ6AIAyF4R/j4O6iG8fQ+5/EicULuDHI4MCAligm70s6QMJL0wIiIiJSzKcy6cxtwATMLTRShXv4znNOYgeOdDcAIxCA7W6gZSLuUrnz6xZgtYY080f6ChmBD9chIiLyOxEMkwXeUq8bbgAAAABJRU5ErkJggg==", + "title": "Point de polygonation non borné" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAeCAYAAABJ/8wUAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAhklEQVRYhe3SsQlCMRQF0CMKggiWWgjaiSN8nECcwZ3cwDGsbN1DOxewsNHCFGJnPljIPVUSeDeXECIi4k91Ws43mJf1GafaoF6LEmtMsCj7PkY41IR1K0usMMUdOxyxxLCUuXwbWPsiM2xxxebtfIx9TWDtHxmUSz/nH17lbpW5ERER8TNP7bUMjREyw7AAAAAASUVORK5CYII=", + "title": "Repère NGF" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAA9hAAAPYQGoP6dpAAABBklEQVRYhe3SsW2FMBAG4N8QQWt2YBEk0qTEYgojlCFoaViCCrLAE91jBRqEDIIWWmjsFIlS50GUIrmvPOt+nU8HEEIIIf8Eu9BrRVGUcs5Dxhi2bbvVdV0A0D813LeGSJLkbZ5nfb/fTdM0ZhxHnSRJhWufe0wURa/Lsug8z03TNKZtW5NlmVFKaSFEeibz6UwT5zzc9535vo8gCAAAtm1DKcU8z3sGUDyaaZ0ZhDEGx3FwHMdXbd93uK57Jg7AyY1s23YD8LKuKyvLEq7rYhgGxHFsPt9+jSWlrKdp0n3fm67rjFJKSylrnDzWKxfOhBCp53kh8LGlqqoKAOZCJiGEEPL3vQPVumrZjIVafQAAAABJRU5ErkJggg==", + "title": "Borne NGF" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAeCAYAAABJ/8wUAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAo0lEQVRYhe3SMQqCIRQH8Gc0NefkEXQKPEFEUycRPEFDd2pqaVNEcBDEKxjR8oW02hpBUBbfEO83vsf/zxseAEIIoT9FvgkLIVZCiCUhhOScjzHGw68Oe5tSamuMGUoprZTSrLWD1no36hGc87X3/tqehBCqlHLT0zntCTHGpHPunFI6Pc5rrRNK6QIA9p929v7IDADmL3YXALh19iKEEEJoNHecVD72egC1OwAAAABJRU5ErkJggg==", + "title": "Nivellement MRL" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAAB4AAAAiCAYAAABIiGl0AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAqElEQVRYhe3TsQrCMBCA4aCuBSHD4Z6lYMicpQ8gWX2l0lEfwskn6HB7nkIRshRSzBBwEc7NPUS6eN98uZ8bIgRjjDH2S8YYp5S6LBp1zp0QMfd9f18s2rZtN47jk4hoGIZbza5VyTAAHJum2XrvxTzPm5pw8WMiqul9FV08TdM155ystUJK+a4Jr0uGY4yPlNIOAPYhhBcinmvixbTWh8W/E2OMsf/xAUeHNJrE2gurAAAAAElFTkSuQmCC", + "title": "Autre repère de nivellement" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAA0ElEQVRYhe3TsQ6CMBCA4dNuusMLkLI4m7gQtj6EvgxvwOTMIDR06WOY8AysEiBlYSuE1J3NQjDG+8ZL7vIvB4AQQgj9id2SZc/zLo7j3AAA2rZ9lGX5XCfrA4yxiHOutNZGa20454oxFm0aQSk9CyGUmcnzXFFKz5uFBEEQj+M47zDDMJgwDGObm/u1I21ZhdR1nUkpu/lcSqmqqspsbhKbpa7rXn3fHwkhJ9/3D9M0gRBCJUlyL4oitbm5+H1d170CADRNk37lfRFCCKFf8wZxVnEIU6LmRgAAAABJRU5ErkJggg==", + "title": "Borne limite de commune" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAkCAYAAADsHujfAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAA/ElEQVRYhe3ToW6EQBQF0NuFEMyIcRAYT8jgZlCrwJDt9l+a3e2fVfQXimgTJGhQCEBBsk0rqioqdka1ecffm/feZABCCCGE/DFa64c8z4+2Pa5tXin1CAB1Xb8AuJoW7WymUEod4jjeCyH2SqmDTZfNIK6U8hyGoRcEgSelPMPiwo5pUGt9X5blqSgKRwiBZVnCaZre+r5vTfpML+JmWXbhnHtJkiBJEnDOvTRNn2C4nFFIKXWsquq0bZvTti2apsE8z4iiKBzH8X0YhpuvYvKmO8ZY2XXd67quP/K+718ZYwWAZwCft5TeGQwCfC/w2zU/YPGNCSGEkH/vC54LPaqIaBVeAAAAAElFTkSuQmCC", + "title": "Point géodésique borné" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAkCAYAAADsHujfAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAA/ElEQVRYhe3ToW6EQBQF0NuFEMyIcRAYT8jgZlCrwJDt9l+a3e2fVfQXimgTJGhQCEBBsk0rqioqdka1ecffm/feZABCCCGE/DFa64c8z4+2Pa5tXin1CAB1Xb8AuJoW7WymUEod4jjeCyH2SqmDTZfNIK6U8hyGoRcEgSelPMPiwo5pUGt9X5blqSgKRwiBZVnCaZre+r5vTfpML+JmWXbhnHtJkiBJEnDOvTRNn2C4nFFIKXWsquq0bZvTti2apsE8z4iiKBzH8X0YhpuvYvKmO8ZY2XXd67quP/K+718ZYwWAZwCft5TeGQwCfC/w2zU/YPGNCSGEkH/vC54LPaqIaBVeAAAAAElFTkSuQmCC", + "title": "Point géodésique non borné" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAkCAYAAADsHujfAAAACXBIWXMAAA9hAAAPYQGoP6dpAAABAElEQVRYhe3TrW6EQBQF4NOFEBKC5zdBE3AXFKo1ZLtV8yLNbvtmFU14giKKQxQNCsxgENu0okldxc6obu7nz8m9dzIAY4wxxv6ZoigeyrI86PaYunkiegSAtm1fAZxVi3Y6UxDRPoqiKo7jioj2Ol06g5hZlp1837c8z7OyLDtB48KGarAoivuqqo7TNBnLsiAIAn9d1/dxHD9U+lQvYuZ5/iSltIQQEEJASmmlafoMxeWUQkR0qOv66DiO0TQNuq5DkiQIw9Cf57mbpuniq6i86c513bthGN62bfvN930P27bPruveAngB8HVJ6Y3CIMDPAn9d8xMa35gxxhi7et94OkKZYB69pQAAAABJRU5ErkJggg==", + "title": "Point borné de canevas cadastral\nordinaire ou préalable à AFAF ou\nd'appui d'une prise de vues\npermettant la confection d'un plan\nde classe de précision [20 cm]" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAkCAYAAADsHujfAAAACXBIWXMAAA9hAAAPYQGoP6dpAAABAElEQVRYhe3TrW6EQBQF4NOFEBKC5zdBE3AXFKo1ZLtV8yLNbvtmFU14giKKQxQNCsxgENu0okldxc6obu7nz8m9dzIAY4wxxv6ZoigeyrI86PaYunkiegSAtm1fAZxVi3Y6UxDRPoqiKo7jioj2Ol06g5hZlp1837c8z7OyLDtB48KGarAoivuqqo7TNBnLsiAIAn9d1/dxHD9U+lQvYuZ5/iSltIQQEEJASmmlafoMxeWUQkR0qOv66DiO0TQNuq5DkiQIw9Cf57mbpuniq6i86c513bthGN62bfvN930P27bPruveAngB8HVJ6Y3CIMDPAn9d8xMa35gxxhi7et94OkKZYB69pQAAAABJRU5ErkJggg==", + "title": "Point borné de canevas pérenne ou\ncadastral de précision" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAkCAYAAADsHujfAAAACXBIWXMAAA9hAAAPYQGoP6dpAAABAElEQVRYhe3TrW6EQBQF4NOFEBKC5zdBE3AXFKo1ZLtV8yLNbvtmFU14giKKQxQNCsxgENu0okldxc6obu7nz8m9dzIAY4wxxv6ZoigeyrI86PaYunkiegSAtm1fAZxVi3Y6UxDRPoqiKo7jioj2Ol06g5hZlp1837c8z7OyLDtB48KGarAoivuqqo7TNBnLsiAIAn9d1/dxHD9U+lQvYuZ5/iSltIQQEEJASmmlafoMxeWUQkR0qOv66DiO0TQNuq5DkiQIw9Cf57mbpuniq6i86c513bthGN62bfvN930P27bPruveAngB8HVJ6Y3CIMDPAn9d8xMa35gxxhi7et94OkKZYB69pQAAAABJRU5ErkJggg==", + "title": "Point borné de canevas d'appui\nd'une prise de vues permettant la\nconfection d'un plan de classe de\nprécision [10 cm]" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAkCAYAAADsHujfAAAACXBIWXMAAA9hAAAPYQGoP6dpAAABAElEQVRYhe3TrW6EQBQF4NOFEBKC5zdBE3AXFKo1ZLtV8yLNbvtmFU14giKKQxQNCsxgENu0okldxc6obu7nz8m9dzIAY4wxxv6ZoigeyrI86PaYunkiegSAtm1fAZxVi3Y6UxDRPoqiKo7jioj2Ol06g5hZlp1837c8z7OyLDtB48KGarAoivuqqo7TNBnLsiAIAn9d1/dxHD9U+lQvYuZ5/iSltIQQEEJASmmlafoMxeWUQkR0qOv66DiO0TQNuq5DkiQIw9Cf57mbpuniq6i86c513bthGN62bfvN930P27bPruveAngB8HVJ6Y3CIMDPAn9d8xMa35gxxhi7et94OkKZYB69pQAAAABJRU5ErkJggg==", + "title": "Point borné d'appui de\ngéoréférencement" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAeCAYAAABJ/8wUAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAhklEQVRYhe3SsQlCMRQF0CMKggiWWgjaiSN8nECcwZ3cwDGsbN1DOxewsNHCFGJnPljIPVUSeDeXECIi4k91Ws43mJf1GafaoF6LEmtMsCj7PkY41IR1K0usMMUdOxyxxLCUuXwbWPsiM2xxxebtfIx9TWDtHxmUSz/nH17lbpW5ERER8TNP7bUMjREyw7AAAAAASUVORK5CYII=", + "title": "Repère NGF" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAeCAYAAABJ/8wUAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAhklEQVRYhe3SsQlCMRQF0CMKggiWWgjaiSN8nECcwZ3cwDGsbN1DOxewsNHCFGJnPljIPVUSeDeXECIi4k91Ws43mJf1GafaoF6LEmtMsCj7PkY41IR1K0usMMUdOxyxxLCUuXwbWPsiM2xxxebtfIx9TWDtHxmUSz/nH17lbpW5ERER8TNP7bUMjREyw7AAAAAASUVORK5CYII=", + "title": "Borne du NGF" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAeCAYAAABJ/8wUAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAo0lEQVRYhe3SMQqCIRQH8Gc0NefkEXQKPEFEUycRPEFDd2pqaVNEcBDEKxjR8oW02hpBUBbfEO83vsf/zxseAEIIoT9FvgkLIVZCiCUhhOScjzHGw68Oe5tSamuMGUoprZTSrLWD1no36hGc87X3/tqehBCqlHLT0zntCTHGpHPunFI6Pc5rrRNK6QIA9p929v7IDADmL3YXALh19iKEEEJoNHecVD72egC1OwAAAABJRU5ErkJggg==", + "title": "Nivellement MRL" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAeCAYAAABJ/8wUAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAo0lEQVRYhe3SMQqCIRQH8Gc0NefkEXQKPEFEUycRPEFDd2pqaVNEcBDEKxjR8oW02hpBUBbfEO83vsf/zxseAEIIoT9FvgkLIVZCiCUhhOScjzHGw68Oe5tSamuMGUoprZTSrLWD1no36hGc87X3/tqehBCqlHLT0zntCTHGpHPunFI6Pc5rrRNK6QIA9p929v7IDADmL3YXALh19iKEEEJoNHecVD72egC1OwAAAABJRU5ErkJggg==", + "title": "Autre repère de nivellement" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAA0ElEQVRYhe3TsQ6CMBCA4dNuusMLkLI4m7gQtj6EvgxvwOTMIDR06WOY8AysEiBlYSuE1J3NQjDG+8ZL7vIvB4AQQgj9id2SZc/zLo7j3AAA2rZ9lGX5XCfrA4yxiHOutNZGa20454oxFm0aQSk9CyGUmcnzXFFKz5uFBEEQj+M47zDDMJgwDGObm/u1I21ZhdR1nUkpu/lcSqmqqspsbhKbpa7rXn3fHwkhJ9/3D9M0gRBCJUlyL4oitbm5+H1d170CADRNk37lfRFCCKFf8wZxVnEIU6LmRgAAAABJRU5ErkJggg==", + "title": "Borne limite de commune" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAW0lEQVRYhe3UQQqAMBBD0Yz3v3NcqoMrM4LY/3aFMoQ2rQQAwCJqYIYn5iVBLEn2kaOqHs/cgiCXEKe1bze/FMQ9RCo6kUmfCRKVtV9PUtb0+faiTHwHAAD82w4ktxUCxfepJQAAAABJRU5ErkJggg==", + "title": "Inconnu" + } + ], + "title": "Repères géodésiques", + "type": "layer" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAU0lEQVRYhe3VMQ6AIBBE0Rnvf+YdW4OGxAhI8V9JWPIpCBIAAF31d4AkyXa+nnGMCBmBkNY2IX65v2zfZpLoYVlVFdvrLsurmYGQKZLs8dcAAC5OLpMPD6nC7eoAAAAASUVORK5CYII=", + "title": "Croix", + "type": "layer" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAU0lEQVRYhe3RsQmAQAAEwVUfrcdaDAys0YqsREQw8Cv4C38nP1g4kCRJnZrC/QwcwApcwBMXNdprzFiDmpUw5AWWGhIZwn0BNv6LT+BOgyRJUnc+gyEGMfbcmZsAAAAASUVORK5CYII=", + "title": "Bornes", + "type": "layer" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAM0lEQVQ4jWM82n3iPwMFgIWBgYHButSCkVSNMIuZKLF91IBRA4aRAYyU5kaKXGBdasEIAOCgCzh+yuKpAAAAAElFTkSuQmCC", + "title": "Lieux-dits", + "type": "layer" + }, + { + "symbols": [ + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAHUlEQVQ4jWP8f9ZoIwMFgIkSzaMGjBowasBgMgAAJrICz5VwIUoAAAAASUVORK5CYII=", + "title": "bâti dur" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAHUlEQVQ4jWP8/3TWBgYKABMlmkcNGDVg1IDBZAAAKVwDTr6O+6sAAAAASUVORK5CYII=", + "title": "bâti léger" + } + ], + "title": "Bâti", + "type": "layer" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAQklEQVQ4jWM8f/58GQOZwNDQsIuBEgMYGBgYmCjRPPAGnD9/voxiF1AEqOKCQWDACE9IVDGAkZhANDQ07ELmI+sBAC4EFoqfs1R/AAAAAElFTkSuQmCC", + "title": "Subdivisions fiscales", + "type": "layer" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAV0lEQVQ4jWOsspX7z4AHtB1+xAhjV9nK/YfxYfpY0BURaxgMMBGjER8gymZsAOYFil3ARCgQCRpAsQsG3ACGAQ8DFnI1Ui0dUBwGWHMasQa3HX7ESLEXACvWH25Qu6JtAAAAAElFTkSuQmCC", + "title": "Secteurs", + "type": "layer" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAKElEQVQ4jWNgGAWjgAqA8c2bN7+QBURERNgYGBgYiBUfBaOAgYGBAQCkMAvAYlSfIwAAAABJRU5ErkJggg==", + "title": "Voies, routes et chemins", + "type": "layer" + }, + { + "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAJ0lEQVQ4jWM8ePDgfwYKAAsDAwODpqYm2QYwUWL7qAGjBowaQEUDAFLAA9/UChwEAAAAAElFTkSuQmCC", + "title": "Tronçons de route", + "type": "layer" + } + ], + "type": "group", + "name": "Fond", + "title": "Fond", + "layerName": "Fond" +} diff --git a/tests/js-units/node/state/layer.test.js b/tests/js-units/node/state/layer.test.js index 38dbff91a7..2a448cca99 100644 --- a/tests/js-units/node/state/layer.test.js +++ b/tests/js-units/node/state/layer.test.js @@ -5,7 +5,7 @@ import { readFileSync } from 'fs'; import { ValidationError, ConversionError } from '../../../../assets/src/modules/Errors.js'; import { LayersConfig } from '../../../../assets/src/modules/config/Layer.js'; import { LayerGeographicBoundingBoxConfig, LayerBoundingBoxConfig, LayerTreeGroupConfig, buildLayerTreeConfig } from '../../../../assets/src/modules/config/LayerTree.js'; -import { LayerIconSymbology, LayerSymbolsSymbology, SymbolIconSymbology } from '../../../../assets/src/modules/state/Symbology.js'; +import { BaseSymbolsSymbology, LayerIconSymbology, LayerSymbolsSymbology, SymbolIconSymbology, LayerGroupSymbology } from '../../../../assets/src/modules/state/Symbology.js'; import { buildLayersOrder } from '../../../../assets/src/modules/config/LayersOrder.js'; import { Extent } from '../../../../assets/src/modules/utils/Extent.js'; @@ -957,6 +957,64 @@ describe('LayerGroupState', function () { expect(group_as_layer.layerConfig.toggled).to.be.true expect(group_as_layer.checked).to.be.true }) + + it('Group as layer symbology', function () { + const root = getRootLayerGroupState('cadastre-caen'); + expect(root.childrenCount).to.be.eq(1) + + const group = root.children[0] + expect(group).to.be.instanceOf(LayerGroupState) + expect(group.groupAsLayer).to.be.false + expect(group.type) + .to.be.eq('group') + .that.be.eq(group.mapType) + expect(group.childrenCount).to.be.eq(4) + + const fond = group.children[3] + expect(fond).to.be.instanceOf(LayerGroupState) + expect(fond.groupAsLayer).to.be.true + expect(fond.type) + .to.be.eq('group') + .that.not.be.eq(fond.mapType) + expect(fond.mapType).to.be.eq('layer') + /*const collection = getLayersAndGroupsCollection('cadastre-caen'); + + const fond = collection.getLayerByName('Fond')*/ + + expect(fond.symbology).to.be.undefined + + let fondSymbologyChangedEvt = null; + + fond.addListener(evt => { + fondSymbologyChangedEvt = evt + }, 'layer.symbology.changed'); + + const legend = JSON.parse(readFileSync('./data/cadastre-caen-fond-legend.json', 'utf8')); + expect(legend).to.not.be.undefined + + // Set symbology + fond.symbology = legend + expect(fond.symbology).to.be.instanceOf(LayerGroupSymbology) + + // Event dispatched + expect(fondSymbologyChangedEvt).to.not.be.null + expect(fondSymbologyChangedEvt.name).to.be.eq('Fond') + + + let expandedChangedEvt = null; + fond.addListener(evt => { + expandedChangedEvt = evt + }, 'layer.symbol.expanded.changed'); + const symbologyChildren = fond.symbology.children + expect(symbologyChildren[1]).to.be.instanceOf(BaseSymbolsSymbology) + expect(symbologyChildren[1].expanded).to.be.false + symbologyChildren[1].expanded = true; + + expect(expandedChangedEvt).to.not.be.null + expect(expandedChangedEvt.title).to.be.eq('Objets ponctuels') + expect(expandedChangedEvt.symbolType).to.be.eq('layer') + expect(expandedChangedEvt.expanded).to.be.true + }) }) describe('LayersAndGroupsCollection', function () { diff --git a/tests/js-units/node/state/symbology.test.js b/tests/js-units/node/state/symbology.test.js index d45acc23a7..6e4d660706 100644 --- a/tests/js-units/node/state/symbology.test.js +++ b/tests/js-units/node/state/symbology.test.js @@ -14,6 +14,7 @@ describe('BaseIconSymbology', function () { expect(icon).to.be.instanceOf(BaseIconSymbology) expect(icon.icon).to.have.string(base64png) expect(icon.title).to.be.eq('category 1') + expect(icon.type).to.be.eq('icon') }) it('Null data icon', function () { @@ -25,6 +26,7 @@ describe('BaseIconSymbology', function () { expect(icon.icon).to.have.string(base64pngNullData) expect(icon.icon).to.be.eq(base64png+base64pngNullData) expect(icon.title).to.be.eq('Null data') + expect(icon.type).to.be.eq('icon') }) it('ValidationError', function () { @@ -34,7 +36,7 @@ describe('BaseIconSymbology', function () { }) } catch(error) { expect(error.name).to.be.eq('ValidationError') - expect(error.message).to.be.eq('The cfg object has not enough properties compared to required!\n- The cfg properties: icon\n- The required properties: icon,title') + expect(error.message).to.be.eq('The properties: `title` are required in the cfg object!') expect(error).to.be.instanceOf(ValidationError) } }) @@ -53,6 +55,7 @@ describe('LayerIconSymbology', function () { expect(icon.icon).to.have.string(base64png) expect(icon.title).to.be.eq('layer_legend_single_symbol') expect(icon.name).to.be.eq('layer_legend_single_symbol') + expect(icon.type).to.be.eq('layer') }) it('Failing type', function () { @@ -96,6 +99,7 @@ describe('SymbolIconSymbology', function () { .that.be.instanceOf(SymbolIconSymbology) expect(icon.icon).to.have.string(base64png) expect(icon.title).to.be.eq('category 1') + expect(icon.type).to.be.eq('icon') expect(icon.ruleKey).to.be.eq('0') expect(icon.checked).to.be.true }) @@ -113,28 +117,29 @@ describe('SymbolIconSymbology', function () { expect(icon.icon).to.have.string(base64png) expect(icon.icon).to.have.string(base64pngNullData) expect(icon.title).to.be.eq('1:25000') + expect(icon.type).to.be.eq('icon') expect(icon.ruleKey).to.be.eq('{1a0c9345-0ffd-4743-bf78-82ca39f64d40}') expect(icon.checked).to.be.true }) it('Event', function () { - it('Valid', function () { - const icon = new SymbolIconSymbology({ - "icon":"iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAU0lEQVQ4jWNgGAV0A4z4JJWVlf8j8+\/evYtTPQs+Q9YelkMRC7Zl+I\/LMKyC2AxBGPYIq8uYcLmIVDBEDLp79y5jsO0jkgwiKfphlpBkwyigPgAATTcaN5pMVDUAAAAASUVORK5CYII=", - "title":"category 1", - "ruleKey":"0", - "checked":true - }) - expect(icon).to.be.instanceOf(SymbolIconSymbology) - let symbologyChangedEvt = null; - icon.addListener(evt => { - symbologyChangedEvt = evt - }, 'symbol.checked.changed'); - expect(symbologyChangedEvt).to.not.be.null - expect(symbologyChangedEvt.title).to.be.eq('category 1') - expect(symbologyChangedEvt.ruleKey).to.be.eq('0') - expect(symbologyChangedEvt.checked).to.be.true + const icon = new SymbolIconSymbology({ + "icon":"iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAU0lEQVQ4jWNgGAV0A4z4JJWVlf8j8+\/evYtTPQs+Q9YelkMRC7Zl+I\/LMKyC2AxBGPYIq8uYcLmIVDBEDLp79y5jsO0jkgwiKfphlpBkwyigPgAATTcaN5pMVDUAAAAASUVORK5CYII=", + "title":"category 1", + "ruleKey":"0", + "checked":true }) + expect(icon).to.be.instanceOf(SymbolIconSymbology) + expect(icon.checked).to.be.true + let symbologyChangedEvt = null; + icon.addListener(evt => { + symbologyChangedEvt = evt + }, 'symbol.checked.changed'); + icon.checked = false + expect(symbologyChangedEvt).to.not.be.null + expect(symbologyChangedEvt.title).to.be.eq('category 1') + expect(symbologyChangedEvt.ruleKey).to.be.eq('0') + expect(symbologyChangedEvt.checked).to.be.false }) it('Failing required properties', function () { @@ -165,6 +170,7 @@ describe('SymbolRuleSymbology', function () { .that.be.instanceOf(SymbolRuleSymbology) expect(icon.icon).to.have.string(base64png) expect(icon.title).to.be.eq('category 1') + expect(icon.type).to.be.eq('rule') expect(icon.ruleKey).to.be.eq('0') expect(icon.checked).to.be.true expect(icon.minScaleDenominator).to.be.eq(-1) @@ -187,6 +193,7 @@ describe('SymbolRuleSymbology', function () { .to.have.string(base64png) .that.have.string(base64pngNullData) expect(icon.title).to.be.eq('1:25000') + expect(icon.type).to.be.eq('rule') expect(icon.ruleKey).to.be.eq('{1a0c9345-0ffd-4743-bf78-82ca39f64d40}') expect(icon.checked).to.be.true expect(icon.minScaleDenominator).to.be.eq(-1) @@ -243,6 +250,8 @@ describe('BaseSymbolsSymbology', function () { }) expect(symbols).to.be.instanceOf(BaseSymbolsSymbology) expect(symbols.title).to.be.eq('hide_at_startup') + expect(symbols.type).to.be.eq('layer') + expect(symbols.expanded).to.be.false expect(symbols.childrenCount).to.be.eq(2) expect(symbols.children).to.be.an('array').that.have.lengthOf(2) @@ -255,6 +264,33 @@ describe('BaseSymbolsSymbology', function () { expect(symbolsGetChildren.next().value).to.be.instanceOf(BaseIconSymbology).that.be.eq(symbolsChildren[1]) }) + it('Event', function () { + const symbols = new BaseSymbolsSymbology({ + "symbols":[{ + "icon":"iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAU0lEQVQ4jWNgGAV0A4z4JJWVlf8j8+\/evYtTPQs+Q9YelkMRC7Zl+I\/LMKyC2AxBGPYIq8uYcLmIVDBEDLp79y5jsO0jkgwiKfphlpBkwyigPgAATTcaN5pMVDUAAAAASUVORK5CYII=", + "title":"category 1" + },{ + "icon":"iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAU0lEQVQ4jWNgGAV0A4z4JJWVlf8j8+\/evYtTPQs+Q4Q2HkUV9Lf+j8swrIJYDYGCd\/7WWF3GhMtFpIIhYtDdu3cZ3\/lbk2QQSdEPs4QkG0YB9QEAMC8aMZ0a06cAAAAASUVORK5CYII=", + "title":"category 2" + }], + "title":"hide_at_startup", + "type":"layer" + }) + expect(symbols).to.be.instanceOf(BaseSymbolsSymbology) + expect(symbols.expanded).to.be.false + + let expandedChangedEvt = null; + symbols.addListener(evt => { + expandedChangedEvt = evt + }, 'symbol.expanded.changed'); + symbols.expanded = true; + + expect(expandedChangedEvt).to.not.be.null + expect(expandedChangedEvt.title).to.be.eq('hide_at_startup') + expect(expandedChangedEvt.symbolType).to.be.eq('layer') + expect(expandedChangedEvt.expanded).to.be.true + }) + it('Failing required properties', function () { try { new BaseSymbolsSymbology({ @@ -292,6 +328,8 @@ describe('LayerSymbolsSymbology', function () { expect(symbology).to.be.instanceOf(LayerSymbolsSymbology) expect(symbology.title).to.be.eq('layer_legend_categorized') expect(symbology.name).to.be.eq('layer_legend_categorized') + expect(symbology.type).to.be.eq('layer') + expect(symbology.expanded).to.be.false expect(symbology.legendOn).to.be.true expect(symbology.childrenCount).to.be.eq(2) expect(symbology.children).to.be.an('array').that.have.lengthOf(2) @@ -345,6 +383,8 @@ describe('LayerSymbolsSymbology', function () { expect(symbology).to.be.instanceOf(LayerSymbolsSymbology) expect(symbology.title).to.be.eq('road') expect(symbology.name).to.be.eq('road') + expect(symbology.type).to.be.eq('layer') + expect(symbology.expanded).to.be.false expect(symbology.legendOn).to.be.true expect(symbology.childrenCount).to.be.eq(3) expect(symbology.children).to.be.an('array').that.have.length(3) @@ -355,10 +395,12 @@ describe('LayerSymbolsSymbology', function () { .that.be.instanceOf(SymbolIconSymbology) .that.be.instanceOf(SymbolRuleSymbology) expect(symbologyChildren[0].title).to.be.eq('1:25000') + expect(symbologyChildren[0].type).to.be.eq('rule') expect(symbologyChildren[0].minScaleDenominator).to.be.eq(1) expect(symbologyChildren[0].maxScaleDenominator).to.be.eq(25000) expect(symbologyChildren[0].checked).to.be.true expect(symbologyChildren[0].legendOn).to.be.true + expect(symbologyChildren[0].expanded).to.be.false expect(symbologyChildren[0].childrenCount).to.be.eq(10) expect(symbologyChildren[0].children).to.be.an('array').that.have.length(10) const symbologyChildrenFirstChildren = symbologyChildren[0].children @@ -367,12 +409,14 @@ describe('LayerSymbolsSymbology', function () { .that.be.instanceOf(SymbolIconSymbology) .that.be.instanceOf(SymbolRuleSymbology) expect(symbologyChildrenFirstChildren[0].title).to.be.eq('Motorway Link') + expect(symbologyChildrenFirstChildren[0].type).to.be.eq('rule') expect(symbologyChildrenFirstChildren[0].minScaleDenominator).to.be.eq(-1) expect(symbologyChildrenFirstChildren[0].maxScaleDenominator).to.be.eq(-1) expect(symbologyChildrenFirstChildren[0].checked).to.be.true expect(symbologyChildrenFirstChildren[0].parentRule).to.not.be.null expect(symbologyChildrenFirstChildren[0].parentRule.legendOn).to.be.true expect(symbologyChildrenFirstChildren[0].legendOn).to.be.true + expect(symbologyChildrenFirstChildren[0].expanded).to.be.false expect(symbologyChildrenFirstChildren[0].childrenCount).to.be.eq(0) expect(symbologyChildrenFirstChildren[0].children).to.be.an('array').that.have.length(0) expect(symbologyChildren[1]) @@ -380,10 +424,12 @@ describe('LayerSymbolsSymbology', function () { .that.be.instanceOf(SymbolIconSymbology) .that.be.instanceOf(SymbolRuleSymbology) expect(symbologyChildren[1].title).to.be.eq('25k to 50k') + expect(symbologyChildren[1].type).to.be.eq('rule') expect(symbologyChildren[1].minScaleDenominator).to.be.eq(25001) expect(symbologyChildren[1].maxScaleDenominator).to.be.eq(50000) expect(symbologyChildren[1].checked).to.be.true expect(symbologyChildren[1].legendOn).to.be.true + expect(symbologyChildren[1].expanded).to.be.false expect(symbologyChildren[1].childrenCount).to.be.eq(1) expect(symbologyChildren[1].children).to.be.an('array').that.have.length(1) expect(symbologyChildren[2]) @@ -391,10 +437,12 @@ describe('LayerSymbolsSymbology', function () { .that.be.instanceOf(SymbolIconSymbology) .that.be.instanceOf(SymbolRuleSymbology) expect(symbologyChildren[2].title).to.be.eq('50k +') + expect(symbologyChildren[2].type).to.be.eq('rule') expect(symbologyChildren[2].minScaleDenominator).to.be.eq(50001) expect(symbologyChildren[2].maxScaleDenominator).to.be.eq(10000000) expect(symbologyChildren[2].checked).to.be.true expect(symbologyChildren[2].legendOn).to.be.true + expect(symbologyChildren[2].expanded).to.be.false expect(symbologyChildren[2].childrenCount).to.be.eq(3) expect(symbologyChildren[2].children).to.be.an('array').that.have.length(3) @@ -601,6 +649,7 @@ describe('LayerGroupSymbology', function () { expect(symbology).to.be.instanceOf(LayerGroupSymbology) expect(symbology.title).to.be.eq('legend_option_test') expect(symbology.name).to.be.eq('legend_option_test') + expect(symbology.type).to.be.eq('group') expect(symbology.childrenCount).to.be.eq(3) expect(symbology.children).to.be.an('array').that.have.lengthOf(3) @@ -615,6 +664,62 @@ describe('LayerGroupSymbology', function () { expect(symbologyGetChildren.next().value).to.be.instanceOf(BaseSymbolsSymbology).that.be.eq(symbologyChildren[2]) }) + it('Event', function () { + const symbology = new LayerGroupSymbology({ + "nodes":[{ + "symbols":[{ + "icon":"iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAU0lEQVQ4jWNgGAV0A4z4JJWVlf8j8+\/evYtTPQs+Q9YelkMRC7Zl+I\/LMKyC2AxBGPYIq8uYcLmIVDBEDLp79y5jsO0jkgwiKfphlpBkwyigPgAATTcaN5pMVDUAAAAASUVORK5CYII=", + "title":"category 1" + },{ + "icon":"iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAU0lEQVQ4jWNgGAV0A4z4JJWVlf8j8+\/evYtTPQs+Q4Q2HkUV9Lf+j8swrIJYDYGCd\/7WWF3GhMtFpIIhYtDdu3cZ3\/lbk2QQSdEPs4QkG0YB9QEAMC8aMZ0a06cAAAAASUVORK5CYII=", + "title":"category 2" + }], + "title":"expand_at_startup", + "type":"layer" + },{ + "symbols":[{ + "icon":"iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAU0lEQVQ4jWNgGAV0A4z4JJWVlf8j8+\/evYtTPQs+Q9YelkMRC7Zl+I\/LMKyC2AxBGPYIq8uYcLmIVDBEDLp79y5jsO0jkgwiKfphlpBkwyigPgAATTcaN5pMVDUAAAAASUVORK5CYII=", + "title":"category 1" + },{ + "icon":"iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAU0lEQVQ4jWNgGAV0A4z4JJWVlf8j8+\/evYtTPQs+Q4Q2HkUV9Lf+j8swrIJYDYGCd\/7WWF3GhMtFpIIhYtDdu3cZ3\/lbk2QQSdEPs4QkG0YB9QEAMC8aMZ0a06cAAAAASUVORK5CYII=", + "title":"category 2" + }], + "title":"disabled", + "type":"layer" + },{ + "symbols":[{ + "icon":"iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAU0lEQVQ4jWNgGAV0A4z4JJWVlf8j8+\/evYtTPQs+Q9YelkMRC7Zl+I\/LMKyC2AxBGPYIq8uYcLmIVDBEDLp79y5jsO0jkgwiKfphlpBkwyigPgAATTcaN5pMVDUAAAAASUVORK5CYII=", + "title":"category 1" + },{ + "icon":"iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAU0lEQVQ4jWNgGAV0A4z4JJWVlf8j8+\/evYtTPQs+Q4Q2HkUV9Lf+j8swrIJYDYGCd\/7WWF3GhMtFpIIhYtDdu3cZ3\/lbk2QQSdEPs4QkG0YB9QEAMC8aMZ0a06cAAAAASUVORK5CYII=", + "title":"category 2" + }], + "title":"hide_at_startup", + "type":"layer" + }], + "type":"group", + "name":"legend_option_test", + "title":"legend_option_test" + }) + expect(symbology).to.be.instanceOf(LayerGroupSymbology) + expect(symbology.childrenCount).to.be.eq(3) + + let expandedChangedEvt = null; + symbology.addListener(evt => { + expandedChangedEvt = evt + }, 'symbol.expanded.changed'); + + const symbologyChildren = symbology.children + expect(symbologyChildren[1].expanded).to.be.false + symbologyChildren[1].expanded = true; + + expect(expandedChangedEvt).to.not.be.null + expect(expandedChangedEvt.title).to.be.eq('disabled') + expect(expandedChangedEvt.symbolType).to.be.eq('layer') + expect(expandedChangedEvt.expanded).to.be.true + }) + + it('Failing type', function () { try { new LayerGroupSymbology({ @@ -679,6 +784,7 @@ describe('buildLayerSymbology', function () { expect(icon.icon).to.have.string(base64png) expect(icon.title).to.be.eq('layer_legend_single_symbol') expect(icon.name).to.be.eq('layer_legend_single_symbol') + expect(icon.type).to.be.eq('layer') }) it('LayerSymbolsSymbology', function () { @@ -702,6 +808,8 @@ describe('buildLayerSymbology', function () { expect(symbology).to.be.instanceOf(LayerSymbolsSymbology) expect(symbology.title).to.be.eq('layer_legend_categorized') expect(symbology.name).to.be.eq('layer_legend_categorized') + expect(symbology.type).to.be.eq('layer') + expect(symbology.expanded).to.be.false expect(symbology.childrenCount).to.be.eq(2) expect(symbology.children).to.be.an('array').that.have.lengthOf(2) @@ -754,6 +862,7 @@ describe('buildLayerSymbology', function () { expect(symbology).to.be.instanceOf(LayerGroupSymbology) expect(symbology.title).to.be.eq('legend_option_test') expect(symbology.name).to.be.eq('legend_option_test') + expect(symbology.type).to.be.eq('group') expect(symbology.childrenCount).to.be.eq(3) expect(symbology.children).to.be.an('array').that.have.lengthOf(3) From 461510508235b87685412b50a02df6fed77a4422 Mon Sep 17 00:00:00 2001 From: rldhont Date: Fri, 18 Oct 2024 20:23:08 +0200 Subject: [PATCH 5/5] Revert "e2e: add group as layer with categorized layer in it" This reverts commit 072299a4115f1f91f84f01c51beb4d4fd02f0aff. --- tests/qgis-projects/tests/treeview.qgs | 6410 ++++++++------------ tests/qgis-projects/tests/treeview.qgs.cfg | 104 +- 2 files changed, 2480 insertions(+), 4034 deletions(-) diff --git a/tests/qgis-projects/tests/treeview.qgs b/tests/qgis-projects/tests/treeview.qgs index bcb3cc74dc..6411e75938 100644 --- a/tests/qgis-projects/tests/treeview.qgs +++ b/tests/qgis-projects/tests/treeview.qgs @@ -1,8 +1,9 @@ - - + + + - - + + 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]] @@ -16,146 +17,128 @@ true - - + - + + - + + - + + - + - - + - + - + - + - + - + - + - + + - + + - + - + - + + - + + - + + - + + - + + - + + - + + - - - - - - - - - - - - - - - - quartiers_d4340dfd_5ee8_425d_83b7_2739f413adab shop_bakery_pg_e9fe3037_8b88_49d3_bce7_f4937094d451 @@ -166,34 +149,30 @@ sousquartiers_898a5c49_5d3b_4269_a2d0_dec7a0f63f41 sousquartiers_dd34c8e5_6378_4f17_a094_692a5331da08 quartiers_5213f284_468d_444c_9b0f_fa3c94f152b6 - quartiers_9e366586_a07f_4aee_97a0_491e6c629515 - sousquartiers_02c7827d_1eea_42c7_8c44_adf26fcf5576 - + - - - - - - - - - - - + + + + + + + + + - - + + degrees - 3.81079831096810562 - 43.49009926199924791 - 4.09663241993025817 - 43.67429331071657828 + 3.80271849898979664 + 43.56384569619927305 + 3.94563555347087291 + 43.65594272055793823 0 @@ -210,85 +189,73 @@ 0 - + - + - - - + + + - - + + - + - + - - - + + + - - - + + + - + - - + + - + - - - - - - - - - - + + Annotations_e3b9b39a_4126_4bae_b374_124902b7e078 @@ -315,8 +282,7 @@ - - + @@ -332,24 +298,15 @@ false - + - - - 1 - 1 - 1 - 0 - - - - + 1 0 - + - + 3.80707036695971279 43.56670409545019851 @@ -389,8 +346,7 @@ dataset - - + @@ -406,316 +362,306 @@ true - + postgres - - - - + + + + - + - - + + 1 1 1 0 - + - + - - + - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - - - - - - - - - + + - - + - + - + - - + - - - - - - - - - - - - + + - - + - - + + - - - - + 0 0 1 - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + - - - - - - - - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - + - + - - + + - - + + - + - + 0 - + 0 generatedlayout - - - - - + + + + + - + - + 3.80707036695971279 43.56670409545019851 @@ -755,383 +701,7 @@ dataset - - - - - - - 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]] - +proj=longlat +datum=WGS84 +no_defs - 3452 - 4326 - EPSG:4326 - WGS 84 - longlat - EPSG:7030 - true - - - - - postgres - - - - - - - - - - - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - 0 - generatedlayout - - - - - - - - - - - 3.80707036695971279 - 43.56670409545019851 - 3.94133068060567293 - 43.65337122449288643 - - - 3.80707036695971279 - 43.56670409545019851 - 3.94133068060567293 - 43.65337122449288643 - - quartiers_9e366586_a07f_4aee_97a0_491e6c629515 - service='lizmapdb' key='quartier' estimatedmetadata=true srid=4326 type=MultiPolygon checkPrimaryKeyUnicity='1' table="tests_projects"."quartiers" (geom) - quartiers_1 - - - - quartiers_categorized - - - 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]] - +proj=longlat +datum=WGS84 +no_defs - 3452 - 4326 - EPSG:4326 - WGS 84 - longlat - EPSG:7030 - true - - - - - - - dataset - - - - - - - - - - - - - + @@ -1147,1247 +717,325 @@ true - - - - - - - - - + postgres - - - - + + + + - - - - - - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - # -*- coding: utf-8 -*- -""" -Les formulaires QGIS peuvent avoir une fonction Python qui est appelée lorsque le formulaire est -ouvert. - -Utilisez cette fonction pour ajouter une logique supplémentaire à vos formulaires. - -Entrez le nom de la fonction dans le champ -"Fonction d'initialisation Python". -Voici un exemple: -""" -from qgis.PyQt.QtWidgets import QWidget - -def my_form_open(dialog, layer, feature): - geom = feature.geometry() - control = dialog.findChild(QWidget, "MyLineEdit") - - 0 - generatedlayout - - - - - - - - - - - - - - - - - - - - - - - - "quartmno" - - - - - 3.80707036695971279 - 43.56670409545019851 - 3.94133068060567293 - 43.65337122449288643 - - - 3.80707036695971279 - 43.56670409545019851 - 3.94133068060567293 - 43.65337122449288643 - - quartiers_d4340dfd_5ee8_425d_83b7_2739f413adab - service='lizmapdb' sslmode=disable key='quartier' estimatedmetadata=true srid=4326 type=MultiPolygon checkPrimaryKeyUnicity='1' table="tests_projects"."quartiers" (geom) - quartiers - - - - quartiers - - - 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]] - +proj=longlat +datum=WGS84 +no_defs - 3452 - 4326 - EPSG:4326 - WGS 84 - longlat - EPSG:7030 - true - - - - - - - dataset - - - - - - - - - - - - - - - - - - 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]] - +proj=longlat +datum=WGS84 +no_defs - 3452 - 4326 - EPSG:4326 - WGS 84 - longlat - EPSG:7030 - true - - - - - - - - - - - - - postgres - - - - - - + - - + + 1 1 1 0 - + - + - - + - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - - - - - - - - - + + - - + - + - + - - + - - - - - - - - - - - - + + - - + - - + + - - - - - - - + 0 0 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - + + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - - - - + + + + + - - - - - - - - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - + - + - - - - - - - - - + + - - + + - + - + 0 - # -*- 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") - + 0 generatedlayout - - - - - - - - - - - - - - - - - - - - - - - - "quartmno" - + + + + + + + - + - 3.79986325786202084 - 43.55817897089504953 - 3.94908164824975216 - 43.68764871034932895 + 3.80707036695971279 + 43.56670409545019851 + 3.94133068060567293 + 43.65337122449288643 - 3.79986325786202084 - 43.55817897089504953 - 3.94908164824975216 - 43.68764871034932895 + 3.80707036695971279 + 43.56670409545019851 + 3.94133068060567293 + 43.65337122449288643 - shop_bakery_pg_e9fe3037_8b88_49d3_bce7_f4937094d451 - service='lizmapdb' sslmode=disable key='id' estimatedmetadata=true srid=4326 type=Point checkPrimaryKeyUnicity='1' table="tests_projects"."shop_bakery_pg" (geom) - shop_bakery_pg + quartiers_d4340dfd_5ee8_425d_83b7_2739f413adab + service='lizmapdb' sslmode=disable key='quartier' estimatedmetadata=true srid=4326 type=MultiPolygon checkPrimaryKeyUnicity='1' table="tests_projects"."quartiers" (geom) + quartiers - shop_bakery_pg + quartiers 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]] @@ -2417,8 +1065,7 @@ def my_form_open(dialog, layer, feature): - - + @@ -2435,7 +1082,7 @@ def my_form_open(dialog, layer, feature): - + @@ -2445,265 +1092,254 @@ def my_form_open(dialog, layer, feature): postgres - - - - - - + + + + + + - - + + 1 1 1 0 - + - + - - + - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - - - - - - - - - + + - - + - + - + - - + - - - - - - - - - - - - - - - - - - - - + + - - + - - + + - - - - - + 0 0 1 - - - + + + - + - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + @@ -2711,78 +1347,116 @@ def my_form_open(dialog, layer, feature): - + - - + - - - + + + + + - - + + - + + + + + + + + + + + + + - + - + - + + + + + + + - - + + + + + - - - - - - + + + + + - - + + + + + - - + + + + + - + - + - + - - - + - - + + - + - + 0 - # -*- coding: utf-8 -*- + +]]> 0 generatedlayout - - + + + + + - - + + + + + - - + + + + + - - - "name" - + + + "quartmno" + - + - 765145.88230000005569309 - 6274561.22229999955743551 - 776031.66700000001583248 - 6284189.52060000039637089 + 3.79986325786202084 + 43.55817897089504953 + 3.94908164824975216 + 43.68764871034932895 - 3.80612128600125121 - 43.56603848249352495 - 3.94223276645941878 - 43.65374993426367922 + 3.79986325786202084 + 43.55817897089504953 + 3.94908164824975216 + 43.68764871034932895 - sousquartiers_02c7827d_1eea_42c7_8c44_adf26fcf5576 - service='lizmapdb' key='id' estimatedmetadata=true srid=2154 type=MultiPolygon checkPrimaryKeyUnicity='1' table="tests_projects"."sousquartiers" (geom) - sousquartiers_1 + shop_bakery_pg_e9fe3037_8b88_49d3_bce7_f4937094d451 + service='lizmapdb' sslmode=disable key='id' estimatedmetadata=true srid=4326 type=Point checkPrimaryKeyUnicity='1' table="tests_projects"."shop_bakery_pg" (geom) + shop_bakery_pg - sousquartiers + shop_bakery_pg - PROJCRS["RGF93 v1 / Lambert-93",BASEGEOGCRS["RGF93 v1",DATUM["Reseau Geodesique Francais 1993 v1",ELLIPSOID["GRS 1980",6378137,298.257222101,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4171]],CONVERSION["Lambert-93",METHOD["Lambert Conic Conformal (2SP)",ID["EPSG",9802]],PARAMETER["Latitude of false origin",46.5,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8821]],PARAMETER["Longitude of false origin",3,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8822]],PARAMETER["Latitude of 1st standard parallel",49,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8823]],PARAMETER["Latitude of 2nd standard parallel",44,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8824]],PARAMETER["Easting at false origin",700000,LENGTHUNIT["metre",1],ID["EPSG",8826]],PARAMETER["Northing at false origin",6600000,LENGTHUNIT["metre",1],ID["EPSG",8827]]],CS[Cartesian,2],AXIS["easting (X)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["northing (Y)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Engineering survey, topographic mapping."],AREA["France - onshore and offshore, mainland and Corsica."],BBOX[41.15,-9.86,51.56,10.38]],ID["EPSG",2154]] - +proj=lcc +lat_0=46.5 +lon_0=3 +lat_1=49 +lat_2=44 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs - 145 - 2154 - EPSG:2154 - RGF93 v1 / Lambert-93 - lcc - EPSG:7019 - false + 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]] + +proj=longlat +datum=WGS84 +no_defs + 3452 + 4326 + EPSG:4326 + WGS 84 + longlat + EPSG:7030 + true @@ -2867,25 +1550,24 @@ def my_form_open(dialog, layer, feature): - - + - PROJCRS["RGF93 v1 / Lambert-93",BASEGEOGCRS["RGF93 v1",DATUM["Reseau Geodesique Francais 1993 v1",ELLIPSOID["GRS 1980",6378137,298.257222101,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4171]],CONVERSION["Lambert-93",METHOD["Lambert Conic Conformal (2SP)",ID["EPSG",9802]],PARAMETER["Latitude of false origin",46.5,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8821]],PARAMETER["Longitude of false origin",3,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8822]],PARAMETER["Latitude of 1st standard parallel",49,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8823]],PARAMETER["Latitude of 2nd standard parallel",44,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8824]],PARAMETER["Easting at false origin",700000,LENGTHUNIT["metre",1],ID["EPSG",8826]],PARAMETER["Northing at false origin",6600000,LENGTHUNIT["metre",1],ID["EPSG",8827]]],CS[Cartesian,2],AXIS["easting (X)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["northing (Y)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Engineering survey, topographic mapping."],AREA["France - onshore and offshore, mainland and Corsica."],BBOX[41.15,-9.86,51.56,10.38]],ID["EPSG",2154]] - +proj=lcc +lat_0=46.5 +lon_0=3 +lat_1=49 +lat_2=44 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs - 145 - 2154 - EPSG:2154 - RGF93 v1 / Lambert-93 - lcc - EPSG:7019 - false + 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]] + +proj=longlat +datum=WGS84 +no_defs + 3452 + 4326 + EPSG:4326 + WGS 84 + longlat + EPSG:7030 + true - + @@ -2895,289 +1577,262 @@ def my_form_open(dialog, layer, feature): postgres - - - - + + + + - + - - + + 1 1 1 0 - + - + - - + - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - - - - - - - - - + + - - + - + - + - - + - - - - - - - - - - - - + + - - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 0 0 1 - - + + + - + - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + @@ -3185,168 +1840,110 @@ def my_form_open(dialog, layer, feature): - + - - + - - - - - - - - + + + - - + + - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - - - - - + + - - - - - - - - - - - - + + - - - - - + + - - - - - + + - + - + - + - - - - - - + - - + + - + - + 0 - # -*- coding: utf-8 -*- + +]]> 0 generatedlayout - - - - - + + - - - - - + + - - - - - + + - - - "quartmno" - + + + "name" + - + 765145.88230000005569309 6274561.22229999955743551 @@ -3386,8 +1983,7 @@ def my_form_open(dialog, layer, feature): dataset - - + @@ -3403,316 +1999,306 @@ def my_form_open(dialog, layer, feature): false - + postgres - - - - + + + + - + - - + + 1 1 1 0 - + - + - - + - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - - - - - - - - - + + - - + - + - + - - + - - - - - - - - - - - - + + - - + - - + + - - - - + 0 0 1 - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + - - - - - - - - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - + - + - - + + - - + + - + - + 0 - + 0 generatedlayout - - - - - + + + + + - + - + 765145.88230000005569309 6274561.22229999955743551 @@ -3761,8 +2347,7 @@ def my_form_open(dialog, layer, feature): - - + @@ -3779,7 +2364,7 @@ def my_form_open(dialog, layer, feature): - + @@ -3789,252 +2374,252 @@ def my_form_open(dialog, layer, feature): postgres - - - - + + + + - + 1 1 1 0 - + - - + + - + - - + - + - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + - + - - + - + - - - - - - - - - - + - - + - + - - + - + - - - - - - - - - - - - - - - - - - + - - + - + - + - - + - + - - - - - - - - - - + - - + - - + + - - + 0 0 1 - - - + + + - + - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + @@ -4042,115 +2627,115 @@ def my_form_open(dialog, layer, feature): - + - - + - - + + - - + - - + + - + - + - + - + - + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - + - + - + - - - - - - + - - + + - - - + + + 0 - + # -*- coding: utf-8 -*- """ QGIS forms can have a Python function that is called when the form is @@ -4171,733 +2756,730 @@ def my_form_open(dialog, layer, feature): 0 generatedlayout - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - + + "quartmno" - + 2 - + - - + + 1 1 1 0 - + - + - - + - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - - - - - - - - - + + - - + - + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - - - + - - - + 0 0 1 - - - + + + - + - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + @@ -4905,123 +3487,116 @@ def my_form_open(dialog, layer, feature): - + - - + - - + + - - - + - - + + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + - - - - - - - - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - + - + - + - - - - - - + - - + + - + - + 0 - # -*- coding: utf-8 -*- + +]]> 0 generatedlayout - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - + + "quartmno" - + - + 765145.88230000005569309 6274561.22229999955743551 @@ -5106,8 +3681,7 @@ def my_form_open(dialog, layer, feature): dataset - - + @@ -5123,316 +3697,306 @@ def my_form_open(dialog, layer, feature): false - + postgres - - - - + + + + - + - - + + 1 1 1 0 - + - + - - + - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - - - - - - - - - + + - - + - + - + - - + - - - - - - - - - - - - + + - - + - - + + - - - - + 0 0 1 - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + - - - - - - - - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - + - + - - + + - - + + - + - + 0 - + 0 generatedlayout - - - - - + + + + + - + - + 760748.21375807060394436 6280073.41499996930360794 @@ -5473,8 +4037,7 @@ def my_form_open(dialog, layer, feature): dataset - - + @@ -5490,284 +4053,278 @@ def my_form_open(dialog, layer, feature): false - + postgres - - - - + + + + - + - - + + 1 1 1 0 - + - + - - + - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - - - - - - - - - + + - - + - + - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + - - + + - - - - + 0 0 1 - + - + - + - - + + - + - + - + - - - - + - + - + - + - + - - + + - - + + - + - + 0 - + 0 generatedlayout - - - - - + + + + + - + - + 760946.65125827305018902 6280139.56083337031304836 @@ -5807,8 +4364,7 @@ def my_form_open(dialog, layer, feature): dataset - - + @@ -5824,288 +4380,280 @@ def my_form_open(dialog, layer, feature): false - + postgres - - - - + + + + - + - - + + 1 1 1 0 - + - + - - + - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - + + - - + - + - - + - - - - - - - - - - - - - - - - - - - - + + - - + - + - + - - + - - - - - - - - - - - - - - - - - - - - + + - - + - - + + - - - - + 0 0 1 - + - + - + - - + + - + - + - + - - - - + - + - + - + - + - - + + - - + + - + - + 0 - + 0 generatedlayout - - - - - + + + + + - + - - - - - - - - - - - + + + + + + + + + @@ -6137,7 +4685,6 @@ def my_form_open(dialog, layer, feature): 5 2.5 - false false false 1 @@ -6165,7 +4712,7 @@ def my_form_open(dialog, layer, feature): lizmap_user_groups - intranet + @@ -6183,68 +4730,68 @@ def my_form_open(dialog, layer, feature): - - + - - + + - + - - - - - - - - - - + + + + + + + + + + - - + + - - - - - + + + + + - - + + - + - - - - - - - - - - + + + + + + + + + + - - + + - - - - - + + + + + - + @@ -6252,21 +4799,17 @@ def my_form_open(dialog, layer, feature): - - - - + nboisteault 2022-04-12T10:52:24 - - - - - + + + + - - + + 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]] +proj=longlat +datum=WGS84 +no_defs @@ -6280,41 +4823,41 @@ def my_form_open(dialog, layer, feature): - - + + - + - + - - - - - - - + - - - - - - - - - - + @@ -6331,7 +4874,4 @@ def my_form_open(dialog, layer, feature): - - - - \ No newline at end of file + diff --git a/tests/qgis-projects/tests/treeview.qgs.cfg b/tests/qgis-projects/tests/treeview.qgs.cfg index a0a175cb61..26c8c97b86 100644 --- a/tests/qgis-projects/tests/treeview.qgs.cfg +++ b/tests/qgis-projects/tests/treeview.qgs.cfg @@ -3,14 +3,14 @@ "qgis_desktop_version": 33411, "lizmap_plugin_version_str": "4.4.3-alpha", "lizmap_plugin_version": 40403, - "lizmap_web_client_target_version": 30900, - "lizmap_web_client_target_status": "Dev", - "instance_target_url": "http://localhost:8130/", - "instance_target_repository": "intranet" + "lizmap_web_client_target_version": 30800, + "lizmap_web_client_target_status": "Stable", + "instance_target_url": "https://demo.lizmap.com/lizmap/", + "instance_target_repository": "features" }, "warnings": {}, "debug": { - "total_time": 0.818 + "total_time": 0.636 }, "options": { "projection": { @@ -576,100 +576,6 @@ "imageFormat": "image/png", "cached": "False", "clientCacheExpiration": 300 - }, - "mutually exclusive group with one categorized layer": { - "id": "mutually exclusive group with one categorized layer", - "name": "mutually exclusive group with one categorized layer", - "type": "layer", - "title": "mutually exclusive group with one categorized layer", - "abstract": "", - "link": "", - "minScale": 1, - "maxScale": 1000000000000, - "toggled": "True", - "popup": "False", - "popupSource": "auto", - "popupTemplate": "", - "popupMaxFeatures": 10, - "popupDisplayChildren": "False", - "popup_allow_download": true, - "legend_image_option": "hide_at_startup", - "groupAsLayer": "True", - "baseLayer": "False", - "displayInLegend": "True", - "group_visibility": [], - "singleTile": "True", - "imageFormat": "image/png", - "cached": "False", - "clientCacheExpiration": 300 - }, - "sousquartiers": { - "id": "sousquartiers_02c7827d_1eea_42c7_8c44_adf26fcf5576", - "name": "sousquartiers", - "type": "layer", - "geometryType": "polygon", - "extent": [ - 765145.8823, - 6274561.2223, - 776031.667, - 6284189.5206 - ], - "crs": "EPSG:2154", - "title": "sousquartiers", - "abstract": "", - "link": "", - "minScale": 1, - "maxScale": 1000000000000, - "toggled": "False", - "popup": "False", - "popupSource": "auto", - "popupTemplate": "", - "popupMaxFeatures": 10, - "popupDisplayChildren": "False", - "popup_allow_download": true, - "legend_image_option": "hide_at_startup", - "groupAsLayer": "False", - "baseLayer": "False", - "displayInLegend": "True", - "group_visibility": [], - "singleTile": "True", - "imageFormat": "image/png", - "cached": "False", - "clientCacheExpiration": 300 - }, - "quartiers_categorized": { - "id": "quartiers_9e366586_a07f_4aee_97a0_491e6c629515", - "name": "quartiers_categorized", - "type": "layer", - "geometryType": "polygon", - "extent": [ - 3.807070366959713, - 43.5667040954502, - 3.941330680605673, - 43.653371224492886 - ], - "crs": "EPSG:4326", - "title": "quartiers_categorized", - "abstract": "", - "link": "", - "minScale": 1, - "maxScale": 1000000000000, - "toggled": "False", - "popup": "False", - "popupSource": "auto", - "popupTemplate": "", - "popupMaxFeatures": 10, - "popupDisplayChildren": "False", - "popup_allow_download": true, - "legend_image_option": "hide_at_startup", - "groupAsLayer": "False", - "baseLayer": "False", - "displayInLegend": "True", - "group_visibility": [], - "singleTile": "True", - "imageFormat": "image/png; mode=8bit", - "cached": "False", - "clientCacheExpiration": 300 } }, "atlas": {