From 938818599ec2d96623d499857c1adb1b996eb966 Mon Sep 17 00:00:00 2001
From: Denis Rouzaud <denis.rouzaud@gmail.com>
Date: Tue, 30 Jan 2024 15:00:16 +0100
Subject: [PATCH] enable azimut editing through lines

fix #108
---
 datamodel/app/create_app.py      |   2 +
 datamodel/app/vw_azimut_edit.sql |  30 +++
 project/signalo.qgs              | 408 ++++++++++++++++++++++++++++++-
 3 files changed, 432 insertions(+), 8 deletions(-)
 create mode 100644 datamodel/app/vw_azimut_edit.sql

diff --git a/datamodel/app/create_app.py b/datamodel/app/create_app.py
index 34fbaffc..0a93bbf0 100755
--- a/datamodel/app/create_app.py
+++ b/datamodel/app/create_app.py
@@ -34,6 +34,8 @@ def create_views(srid: int, pg_service: str):
     run_sql("datamodel/app/create_schema.sql", pg_service, variables)
 
     run_sql("datamodel/app/vw_edited_support.sql", pg_service, variables)
+    run_sql("datamodel/app/vw_azimut_edit.sql", pg_service, variables)
+
     vw_sign_symbol(pg_service=pg_service, srid=srid)
 
 
diff --git a/datamodel/app/vw_azimut_edit.sql b/datamodel/app/vw_azimut_edit.sql
new file mode 100644
index 00000000..3841a575
--- /dev/null
+++ b/datamodel/app/vw_azimut_edit.sql
@@ -0,0 +1,30 @@
+
+
+CREATE OR REPLACE VIEW signalo_app.vw_azimut_edit
+AS
+SELECT
+  az.id,
+  ST_MakeLine(su.geometry, ST_SetSRID(St_MakePoint(ST_X(su.geometry) + 10 * sin(radians(az.azimut)), ST_Y(su.geometry) + 10 *cos(radians(az.azimut))), 2056))::geometry(LineString, 2056) as geometry
+FROM signalo_db.azimut az
+INNER JOIN signalo_db.support su ON az.fk_support = su.id;
+
+
+CREATE FUNCTION signalo_app.ft_azimut_edit() RETURNS trigger
+    LANGUAGE plpgsql
+    AS $$
+	BEGIN
+        IF ST_Equals(ST_StartPoint(NEW.geometry), ST_StartPoint(OLD.geometry)) THEN
+            RAISE WARNING 'start point should remain unchanged';
+        END IF;
+
+        UPDATE signalo_db.azimut SET azimut = degrees(ST_Azimuth(ST_StartPoint(NEW.geometry), ST_EndPoint(NEW.geometry))) WHERE id = NEW.id;
+
+        RETURN NEW;
+	END;
+	$$;
+
+
+CREATE TRIGGER azimut_update
+    INSTEAD OF UPDATE ON signalo_app.vw_azimut_edit
+    FOR EACH ROW
+    EXECUTE FUNCTION signalo_app.ft_azimut_edit();
diff --git a/project/signalo.qgs b/project/signalo.qgs
index 0b0da369..408e147f 100644
--- a/project/signalo.qgs
+++ b/project/signalo.qgs
@@ -1,5 +1,5 @@
 <!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
-<qgis saveUserFull="Rouzaud Denis" saveUser="rouzauddenis" saveDateTime="2024-01-30T10:50:18" version="3.28.11-Firenze" projectname="Signalo - Demo">
+<qgis saveUserFull="Rouzaud Denis" saveUser="rouzauddenis" saveDateTime="2024-01-30T14:56:34" version="3.28.11-Firenze" projectname="Signalo - Demo">
   <homePath path=""/>
   <title>Signalo - Demo</title>
   <transaction mode="AutomaticGroups"/>
@@ -21,6 +21,11 @@
     <customproperties>
       <Option/>
     </customproperties>
+    <layer-tree-layer name="vw_azimut_edit" id="vw_azimut_edit_b7acca0e_e618_4f1d_8de3_08e2eb5bf359" legend_split_behavior="0" legend_exp="" source="service='pg_signalo' sslmode=disable key='id' srid=2056 type=LineString checkPrimaryKeyUnicity='1' table=&quot;signalo_app&quot;.&quot;vw_azimut_edit&quot; (geometry)" providerKey="postgres" checked="Qt::Checked" expanded="1" patch_size="-1,-1">
+      <customproperties>
+        <Option/>
+      </customproperties>
+    </layer-tree-layer>
     <layer-tree-layer name="Support" id="support_347aa750_1661_498f_a7e8_017adc616ba0" legend_split_behavior="0" legend_exp="" source="service='pg_signalo' sslmode=disable key='id' srid=2056 type=Point checkPrimaryKeyUnicity='1' table=&quot;signalo_db&quot;.&quot;support&quot; (geometry)" providerKey="postgres" checked="Qt::Checked" expanded="1" patch_size="-1,-1">
       <customproperties>
         <Option/>
@@ -163,11 +168,13 @@
       <item>Landeskarten__farbig__a4d140cf_7103_4db6_a9bc_52ef09d7ea6b</item>
       <item>vw_edited_support_9e44c97f_e06b_4184_b445_881318a02e8b</item>
       <item>SWISSIMAGE_Fond_de_plan_7d61cf38_35d1_4208_a775_1d854d304e6f</item>
+      <item>vw_azimut_edit_b7acca0e_e618_4f1d_8de3_08e2eb5bf359</item>
     </custom-order>
   </layer-tree-group>
   <snapping-settings minScale="0" scaleDependencyMode="0" maxScale="0" unit="1" self-snapping="0" intersection-snapping="0" mode="2" type="1" enabled="1" tolerance="12">
     <individual-layer-settings>
       <layer-setting minScale="0" id="support_347aa750_1661_498f_a7e8_017adc616ba0" maxScale="0" units="1" type="1" enabled="0" tolerance="12"/>
+      <layer-setting minScale="0" id="vw_azimut_edit_b7acca0e_e618_4f1d_8de3_08e2eb5bf359" maxScale="0" units="1" type="1" enabled="0" tolerance="12"/>
       <layer-setting minScale="0" id="vw_edited_support_9e44c97f_e06b_4184_b445_881318a02e8b" maxScale="0" units="1" type="1" enabled="0" tolerance="12"/>
       <layer-setting minScale="0" id="vw_sign_symbol_a4db15ac_b65f_46c3_b5d8_bcf3dbf10405" maxScale="0" units="1" type="1" enabled="0" tolerance="12"/>
     </individual-layer-settings>
@@ -193,10 +200,10 @@
   <mapcanvas annotationsVisible="1" name="theMapCanvas">
     <units>meters</units>
     <extent>
-      <xmin>2537484.14173737168312073</xmin>
-      <ymin>1152444.50175221986137331</ymin>
-      <xmax>2537643.73349062167108059</xmax>
-      <ymax>1152552.67514334036968648</ymax>
+      <xmin>2537260.64139086147770286</xmin>
+      <ymin>1152307.63188518956303596</ymin>
+      <xmax>2537758.07089852774515748</xmax>
+      <ymax>1152644.79615335632115602</ymax>
     </extent>
     <rotation>0</rotation>
     <destinationsrs>
@@ -217,6 +224,11 @@
   </mapcanvas>
   <projectModels/>
   <legend updateDrawingOrder="true">
+    <legendlayer name="vw_azimut_edit" open="true" showFeatureCount="0" drawingOrder="-1" checked="Qt::Checked">
+      <filegroup hidden="false" open="true">
+        <legendlayerfile visible="1" layerid="vw_azimut_edit_b7acca0e_e618_4f1d_8de3_08e2eb5bf359" isInOverview="0"/>
+      </filegroup>
+    </legendlayer>
     <legendlayer name="Support" open="true" showFeatureCount="0" drawingOrder="-1" checked="Qt::Checked">
       <filegroup hidden="false" open="true">
         <legendlayerfile visible="1" layerid="support_347aa750_1661_498f_a7e8_017adc616ba0" isInOverview="0"/>
@@ -345,6 +357,31 @@
     </legendgroup>
   </legend>
   <mapViewDocks/>
+  <mapcanvas annotationsVisible="1" name="mAreaCanvas">
+    <units>degrees</units>
+    <extent>
+      <xmin>0</xmin>
+      <ymin>0</ymin>
+      <xmax>0</xmax>
+      <ymax>0</ymax>
+    </extent>
+    <rotation>0</rotation>
+    <destinationsrs>
+      <spatialrefsys nativeFormat="Wkt">
+        <wkt>GEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],USAGE[SCOPE["Horizontal component of 3D system."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",4326]]</wkt>
+        <proj4>+proj=longlat +datum=WGS84 +no_defs</proj4>
+        <srsid>3452</srsid>
+        <srid>4326</srid>
+        <authid>EPSG:4326</authid>
+        <description>WGS 84</description>
+        <projectionacronym>longlat</projectionacronym>
+        <ellipsoidacronym>EPSG:7030</ellipsoidacronym>
+        <geographicflag>true</geographicflag>
+      </spatialrefsys>
+    </destinationsrs>
+    <rendermaptile>0</rendermaptile>
+    <expressionContextScope/>
+  </mapcanvas>
   <main-annotation-layer autoRefreshTime="0" autoRefreshEnabled="0" legendPlaceholderImage="" refreshOnNotifyEnabled="0" refreshOnNotifyMessage="" type="annotation">
     <id>Annotations_12d93f67_97ee_4956_a1a1_ce69a09e6c74</id>
     <datasource></datasource>
@@ -1247,6 +1284,10 @@
             <Option value="COALESCE( &quot;azimut&quot;, '&lt;NULL>' )" type="QString"/>
             <Option value="COALESCE( &quot;azimut&quot;, '&lt;NULL>' )" type="QString"/>
             <Option value="COALESCE( &quot;azimut&quot;, '&lt;NULL>' )" type="QString"/>
+            <Option value="COALESCE( &quot;azimut&quot;, '&lt;NULL>' )" type="QString"/>
+            <Option value="COALESCE( &quot;azimut&quot;, '&lt;NULL>' )" type="QString"/>
+            <Option value="COALESCE( &quot;azimut&quot;, '&lt;NULL>' )" type="QString"/>
+            <Option value="COALESCE( &quot;azimut&quot;, '&lt;NULL>' )" type="QString"/>
           </Option>
           <Option name="embeddedWidgets/count" value="0" type="QString"/>
           <Option name="variableNames" type="invalid"/>
@@ -9350,7 +9391,7 @@ def my_form_open(dialog, layer, feature):
               <Option type="Map">
                 <Option name="angle" value="0" type="QString"/>
                 <Option name="cap_style" value="square" type="QString"/>
-                <Option name="color" value="139,196,33,255" type="QString"/>
+                <Option name="color" value="255,0,0,255" type="QString"/>
                 <Option name="horizontal_anchor_point" value="1" type="QString"/>
                 <Option name="joinstyle" value="bevel" type="QString"/>
                 <Option name="name" value="circle" type="QString"/>
@@ -9363,7 +9404,7 @@ def my_form_open(dialog, layer, feature):
                 <Option name="outline_width_map_unit_scale" value="3x:0,0,0,0,0,0" type="QString"/>
                 <Option name="outline_width_unit" value="MM" type="QString"/>
                 <Option name="scale_method" value="diameter" type="QString"/>
-                <Option name="size" value="2.6" type="QString"/>
+                <Option name="size" value="2" type="QString"/>
                 <Option name="size_map_unit_scale" value="3x:0,0,0,0,0,0" type="QString"/>
                 <Option name="size_unit" value="MM" type="QString"/>
                 <Option name="vertical_anchor_point" value="1" type="QString"/>
@@ -11529,6 +11570,356 @@ def my_form_open(dialog, layer, feature):
       <previewExpression>"id" || ' ' || attribute(concat('value_',@qgis_locale))</previewExpression>
       <mapTip></mapTip>
     </maplayer>
+    <maplayer simplifyMaxScale="1" readOnly="0" simplifyDrawingHints="1" simplifyAlgorithm="0" simplifyDrawingTol="1" refreshOnNotifyEnabled="0" maxScale="0" hasScaleBasedVisibilityFlag="1" minScale="2500" refreshOnNotifyMessage="" type="vector" legendPlaceholderImage="" autoRefreshEnabled="0" autoRefreshTime="0" simplifyLocal="1" styleCategories="AllStyleCategories" symbologyReferenceScale="-1" wkbType="LineString" geometry="Line" labelsEnabled="0">
+      <extent>
+        <xmin>2537380.54506333312019706</xmin>
+        <ymin>1152420.06054681539535522</ymin>
+        <xmax>2538449.47999999998137355</xmax>
+        <ymax>1152830.11123771546408534</ymax>
+      </extent>
+      <wgs84extent>
+        <xmin>6.62254270433546655</xmin>
+        <ymin>46.52014266455409341</ymin>
+        <xmax>6.63652751045478606</xmax>
+        <ymax>46.52393046604049687</ymax>
+      </wgs84extent>
+      <id>vw_azimut_edit_b7acca0e_e618_4f1d_8de3_08e2eb5bf359</id>
+      <datasource>service='pg_signalo' sslmode=disable key='id' srid=2056 type=LineString checkPrimaryKeyUnicity='1' table="signalo_app"."vw_azimut_edit" (geometry)</datasource>
+      <keywordList>
+        <value></value>
+      </keywordList>
+      <layername>vw_azimut_edit</layername>
+      <srs>
+        <spatialrefsys nativeFormat="Wkt">
+          <wkt>PROJCRS["CH1903+ / LV95",BASEGEOGCRS["CH1903+",DATUM["CH1903+",ELLIPSOID["Bessel 1841",6377397.155,299.1528128,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4150]],CONVERSION["Swiss Oblique Mercator 1995",METHOD["Hotine Oblique Mercator (variant B)",ID["EPSG",9815]],PARAMETER["Latitude of projection centre",46.9524055555556,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8811]],PARAMETER["Longitude of projection centre",7.43958333333333,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8812]],PARAMETER["Azimuth of initial line",90,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8813]],PARAMETER["Angle from Rectified to Skew Grid",90,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8814]],PARAMETER["Scale factor on initial line",1,SCALEUNIT["unity",1],ID["EPSG",8815]],PARAMETER["Easting at projection centre",2600000,LENGTHUNIT["metre",1],ID["EPSG",8816]],PARAMETER["Northing at projection centre",1200000,LENGTHUNIT["metre",1],ID["EPSG",8817]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Cadastre, engineering survey, topographic mapping (large and medium scale)."],AREA["Liechtenstein; Switzerland."],BBOX[45.82,5.96,47.81,10.49]],ID["EPSG",2056]]</wkt>
+          <proj4>+proj=somerc +lat_0=46.9524055555556 +lon_0=7.43958333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs</proj4>
+          <srsid>47</srsid>
+          <srid>2056</srid>
+          <authid>EPSG:2056</authid>
+          <description>CH1903+ / LV95</description>
+          <projectionacronym>somerc</projectionacronym>
+          <ellipsoidacronym>EPSG:7004</ellipsoidacronym>
+          <geographicflag>false</geographicflag>
+        </spatialrefsys>
+      </srs>
+      <resourceMetadata>
+        <identifier></identifier>
+        <parentidentifier></parentidentifier>
+        <language></language>
+        <type>dataset</type>
+        <title></title>
+        <abstract></abstract>
+        <links/>
+        <fees></fees>
+        <encoding></encoding>
+        <crs>
+          <spatialrefsys nativeFormat="Wkt">
+            <wkt>PROJCRS["CH1903+ / LV95",BASEGEOGCRS["CH1903+",DATUM["CH1903+",ELLIPSOID["Bessel 1841",6377397.155,299.1528128,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4150]],CONVERSION["Swiss Oblique Mercator 1995",METHOD["Hotine Oblique Mercator (variant B)",ID["EPSG",9815]],PARAMETER["Latitude of projection centre",46.9524055555556,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8811]],PARAMETER["Longitude of projection centre",7.43958333333333,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8812]],PARAMETER["Azimuth of initial line",90,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8813]],PARAMETER["Angle from Rectified to Skew Grid",90,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8814]],PARAMETER["Scale factor on initial line",1,SCALEUNIT["unity",1],ID["EPSG",8815]],PARAMETER["Easting at projection centre",2600000,LENGTHUNIT["metre",1],ID["EPSG",8816]],PARAMETER["Northing at projection centre",1200000,LENGTHUNIT["metre",1],ID["EPSG",8817]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Cadastre, engineering survey, topographic mapping (large and medium scale)."],AREA["Liechtenstein; Switzerland."],BBOX[45.82,5.96,47.81,10.49]],ID["EPSG",2056]]</wkt>
+            <proj4>+proj=somerc +lat_0=46.9524055555556 +lon_0=7.43958333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs</proj4>
+            <srsid>47</srsid>
+            <srid>2056</srid>
+            <authid>EPSG:2056</authid>
+            <description>CH1903+ / LV95</description>
+            <projectionacronym>somerc</projectionacronym>
+            <ellipsoidacronym>EPSG:7004</ellipsoidacronym>
+            <geographicflag>false</geographicflag>
+          </spatialrefsys>
+        </crs>
+        <extent/>
+      </resourceMetadata>
+      <provider encoding="">postgres</provider>
+      <vectorjoins/>
+      <layerDependencies/>
+      <dataDependencies/>
+      <expressionfields/>
+      <map-layer-style-manager current="défaut">
+        <map-layer-style name="défaut"/>
+      </map-layer-style-manager>
+      <auxiliaryLayer/>
+      <metadataUrls/>
+      <flags>
+        <Identifiable>1</Identifiable>
+        <Removable>1</Removable>
+        <Searchable>1</Searchable>
+        <Private>0</Private>
+      </flags>
+      <temporal startField="" startExpression="" fixedDuration="0" endField="" durationUnit="min" limitMode="0" durationField="" endExpression="" mode="0" accumulate="0" enabled="0">
+        <fixedRange>
+          <start></start>
+          <end></end>
+        </fixedRange>
+      </temporal>
+      <elevation zoffset="0" clamping="Terrain" extrusionEnabled="0" showMarkerSymbolInSurfacePlots="0" extrusion="0" symbology="Line" binding="Centroid" respectLayerSymbol="1" zscale="1" type="IndividualFeatures">
+        <data-defined-properties>
+          <Option type="Map">
+            <Option name="name" value="" type="QString"/>
+            <Option name="properties"/>
+            <Option name="type" value="collection" type="QString"/>
+          </Option>
+        </data-defined-properties>
+        <profileLineSymbol>
+          <symbol alpha="1" frame_rate="10" name="" is_animated="0" force_rhr="0" clip_to_extent="1" type="line">
+            <data_defined_properties>
+              <Option type="Map">
+                <Option name="name" value="" type="QString"/>
+                <Option name="properties"/>
+                <Option name="type" value="collection" type="QString"/>
+              </Option>
+            </data_defined_properties>
+            <layer locked="0" class="SimpleLine" pass="0" enabled="1">
+              <Option type="Map">
+                <Option name="align_dash_pattern" value="0" type="QString"/>
+                <Option name="capstyle" value="square" type="QString"/>
+                <Option name="customdash" value="5;2" type="QString"/>
+                <Option name="customdash_map_unit_scale" value="3x:0,0,0,0,0,0" type="QString"/>
+                <Option name="customdash_unit" value="MM" type="QString"/>
+                <Option name="dash_pattern_offset" value="0" type="QString"/>
+                <Option name="dash_pattern_offset_map_unit_scale" value="3x:0,0,0,0,0,0" type="QString"/>
+                <Option name="dash_pattern_offset_unit" value="MM" type="QString"/>
+                <Option name="draw_inside_polygon" value="0" type="QString"/>
+                <Option name="joinstyle" value="bevel" type="QString"/>
+                <Option name="line_color" value="190,207,80,255" type="QString"/>
+                <Option name="line_style" value="solid" type="QString"/>
+                <Option name="line_width" value="0.6" type="QString"/>
+                <Option name="line_width_unit" value="MM" type="QString"/>
+                <Option name="offset" value="0" type="QString"/>
+                <Option name="offset_map_unit_scale" value="3x:0,0,0,0,0,0" type="QString"/>
+                <Option name="offset_unit" value="MM" type="QString"/>
+                <Option name="ring_filter" value="0" type="QString"/>
+                <Option name="trim_distance_end" value="0" type="QString"/>
+                <Option name="trim_distance_end_map_unit_scale" value="3x:0,0,0,0,0,0" type="QString"/>
+                <Option name="trim_distance_end_unit" value="MM" type="QString"/>
+                <Option name="trim_distance_start" value="0" type="QString"/>
+                <Option name="trim_distance_start_map_unit_scale" value="3x:0,0,0,0,0,0" type="QString"/>
+                <Option name="trim_distance_start_unit" value="MM" type="QString"/>
+                <Option name="tweak_dash_pattern_on_corners" value="0" type="QString"/>
+                <Option name="use_custom_dash" value="0" type="QString"/>
+                <Option name="width_map_unit_scale" value="3x:0,0,0,0,0,0" type="QString"/>
+              </Option>
+              <data_defined_properties>
+                <Option type="Map">
+                  <Option name="name" value="" type="QString"/>
+                  <Option name="properties"/>
+                  <Option name="type" value="collection" type="QString"/>
+                </Option>
+              </data_defined_properties>
+            </layer>
+          </symbol>
+        </profileLineSymbol>
+        <profileFillSymbol>
+          <symbol alpha="1" frame_rate="10" name="" is_animated="0" force_rhr="0" clip_to_extent="1" type="fill">
+            <data_defined_properties>
+              <Option type="Map">
+                <Option name="name" value="" type="QString"/>
+                <Option name="properties"/>
+                <Option name="type" value="collection" type="QString"/>
+              </Option>
+            </data_defined_properties>
+            <layer locked="0" class="SimpleFill" pass="0" enabled="1">
+              <Option type="Map">
+                <Option name="border_width_map_unit_scale" value="3x:0,0,0,0,0,0" type="QString"/>
+                <Option name="color" value="190,207,80,255" type="QString"/>
+                <Option name="joinstyle" value="bevel" type="QString"/>
+                <Option name="offset" value="0,0" type="QString"/>
+                <Option name="offset_map_unit_scale" value="3x:0,0,0,0,0,0" type="QString"/>
+                <Option name="offset_unit" value="MM" type="QString"/>
+                <Option name="outline_color" value="136,148,57,255" type="QString"/>
+                <Option name="outline_style" value="solid" type="QString"/>
+                <Option name="outline_width" value="0.2" type="QString"/>
+                <Option name="outline_width_unit" value="MM" type="QString"/>
+                <Option name="style" value="solid" type="QString"/>
+              </Option>
+              <data_defined_properties>
+                <Option type="Map">
+                  <Option name="name" value="" type="QString"/>
+                  <Option name="properties"/>
+                  <Option name="type" value="collection" type="QString"/>
+                </Option>
+              </data_defined_properties>
+            </layer>
+          </symbol>
+        </profileFillSymbol>
+        <profileMarkerSymbol>
+          <symbol alpha="1" frame_rate="10" name="" is_animated="0" force_rhr="0" clip_to_extent="1" type="marker">
+            <data_defined_properties>
+              <Option type="Map">
+                <Option name="name" value="" type="QString"/>
+                <Option name="properties"/>
+                <Option name="type" value="collection" type="QString"/>
+              </Option>
+            </data_defined_properties>
+            <layer locked="0" class="SimpleMarker" pass="0" enabled="1">
+              <Option type="Map">
+                <Option name="angle" value="0" type="QString"/>
+                <Option name="cap_style" value="square" type="QString"/>
+                <Option name="color" value="190,207,80,255" type="QString"/>
+                <Option name="horizontal_anchor_point" value="1" type="QString"/>
+                <Option name="joinstyle" value="bevel" type="QString"/>
+                <Option name="name" value="diamond" type="QString"/>
+                <Option name="offset" value="0,0" type="QString"/>
+                <Option name="offset_map_unit_scale" value="3x:0,0,0,0,0,0" type="QString"/>
+                <Option name="offset_unit" value="MM" type="QString"/>
+                <Option name="outline_color" value="136,148,57,255" type="QString"/>
+                <Option name="outline_style" value="solid" type="QString"/>
+                <Option name="outline_width" value="0.2" type="QString"/>
+                <Option name="outline_width_map_unit_scale" value="3x:0,0,0,0,0,0" type="QString"/>
+                <Option name="outline_width_unit" value="MM" type="QString"/>
+                <Option name="scale_method" value="diameter" type="QString"/>
+                <Option name="size" value="3" type="QString"/>
+                <Option name="size_map_unit_scale" value="3x:0,0,0,0,0,0" type="QString"/>
+                <Option name="size_unit" value="MM" type="QString"/>
+                <Option name="vertical_anchor_point" value="1" type="QString"/>
+              </Option>
+              <data_defined_properties>
+                <Option type="Map">
+                  <Option name="name" value="" type="QString"/>
+                  <Option name="properties"/>
+                  <Option name="type" value="collection" type="QString"/>
+                </Option>
+              </data_defined_properties>
+            </layer>
+          </symbol>
+        </profileMarkerSymbol>
+      </elevation>
+      <renderer-v2 symbollevels="0" forceraster="0" type="singleSymbol" enableorderby="0" referencescale="-1">
+        <symbols>
+          <symbol alpha="1" frame_rate="10" name="0" is_animated="0" force_rhr="0" clip_to_extent="1" type="line">
+            <data_defined_properties>
+              <Option type="Map">
+                <Option name="name" value="" type="QString"/>
+                <Option name="properties"/>
+                <Option name="type" value="collection" type="QString"/>
+              </Option>
+            </data_defined_properties>
+            <layer locked="0" class="ArrowLine" pass="0" enabled="1">
+              <Option type="Map">
+                <Option name="arrow_start_width" value="1" type="QString"/>
+                <Option name="arrow_start_width_unit" value="MM" type="QString"/>
+                <Option name="arrow_start_width_unit_scale" value="3x:0,0,0,0,0,0" type="QString"/>
+                <Option name="arrow_type" value="0" type="QString"/>
+                <Option name="arrow_width" value="1" type="QString"/>
+                <Option name="arrow_width_unit" value="MM" type="QString"/>
+                <Option name="arrow_width_unit_scale" value="3x:0,0,0,0,0,0" type="QString"/>
+                <Option name="head_length" value="2.5" type="QString"/>
+                <Option name="head_length_unit" value="MM" type="QString"/>
+                <Option name="head_length_unit_scale" value="3x:0,0,0,0,0,0" type="QString"/>
+                <Option name="head_thickness" value="2.4" type="QString"/>
+                <Option name="head_thickness_unit" value="MM" type="QString"/>
+                <Option name="head_thickness_unit_scale" value="3x:0,0,0,0,0,0" type="QString"/>
+                <Option name="head_type" value="0" type="QString"/>
+                <Option name="is_curved" value="1" type="QString"/>
+                <Option name="is_repeated" value="1" type="QString"/>
+                <Option name="offset" value="0" type="QString"/>
+                <Option name="offset_unit" value="MM" type="QString"/>
+                <Option name="offset_unit_scale" value="3x:0,0,0,0,0,0" type="QString"/>
+                <Option name="ring_filter" value="0" type="QString"/>
+              </Option>
+              <data_defined_properties>
+                <Option type="Map">
+                  <Option name="name" value="" type="QString"/>
+                  <Option name="properties"/>
+                  <Option name="type" value="collection" type="QString"/>
+                </Option>
+              </data_defined_properties>
+              <symbol alpha="1" frame_rate="10" name="@0@0" is_animated="0" force_rhr="0" clip_to_extent="1" type="fill">
+                <data_defined_properties>
+                  <Option type="Map">
+                    <Option name="name" value="" type="QString"/>
+                    <Option name="properties"/>
+                    <Option name="type" value="collection" type="QString"/>
+                  </Option>
+                </data_defined_properties>
+                <layer locked="0" class="SimpleFill" pass="0" enabled="1">
+                  <Option type="Map">
+                    <Option name="border_width_map_unit_scale" value="3x:0,0,0,0,0,0" type="QString"/>
+                    <Option name="color" value="0,104,192,255" type="QString"/>
+                    <Option name="joinstyle" value="miter" type="QString"/>
+                    <Option name="offset" value="0,0" type="QString"/>
+                    <Option name="offset_map_unit_scale" value="3x:0,0,0,0,0,0" type="QString"/>
+                    <Option name="offset_unit" value="MM" type="QString"/>
+                    <Option name="outline_color" value="255,255,255,140" type="QString"/>
+                    <Option name="outline_style" value="solid" type="QString"/>
+                    <Option name="outline_width" value="0.26" type="QString"/>
+                    <Option name="outline_width_unit" value="MM" type="QString"/>
+                    <Option name="style" value="solid" type="QString"/>
+                  </Option>
+                  <data_defined_properties>
+                    <Option type="Map">
+                      <Option name="name" value="" type="QString"/>
+                      <Option name="properties"/>
+                      <Option name="type" value="collection" type="QString"/>
+                    </Option>
+                  </data_defined_properties>
+                </layer>
+              </symbol>
+            </layer>
+          </symbol>
+        </symbols>
+        <rotation/>
+        <sizescale/>
+      </renderer-v2>
+      <customproperties>
+        <Option/>
+      </customproperties>
+      <blendMode>0</blendMode>
+      <featureBlendMode>0</featureBlendMode>
+      <layerOpacity>1</layerOpacity>
+      <geometryOptions removeDuplicateNodes="0" geometryPrecision="0">
+        <activeChecks type="StringList">
+          <Option value="" type="QString"/>
+        </activeChecks>
+        <checkConfiguration/>
+      </geometryOptions>
+      <legend showLabelLegend="0" type="default-vector"/>
+      <referencedLayers/>
+      <fieldConfiguration>
+        <field name="id" configurationFlags="None">
+          <editWidget type="">
+            <config>
+              <Option/>
+            </config>
+          </editWidget>
+        </field>
+      </fieldConfiguration>
+      <aliases>
+        <alias name="" field="id" index="0"/>
+      </aliases>
+      <defaults>
+        <default field="id" expression="" applyOnUpdate="0"/>
+      </defaults>
+      <constraints>
+        <constraint unique_strength="1" notnull_strength="1" exp_strength="0" field="id" constraints="3"/>
+      </constraints>
+      <constraintExpressions>
+        <constraint desc="" field="id" exp=""/>
+      </constraintExpressions>
+      <expressionfields/>
+      <attributeactions>
+        <defaultAction value="{00000000-0000-0000-0000-000000000000}" key="Canvas"/>
+      </attributeactions>
+      <attributetableconfig sortExpression="" actionWidgetStyle="dropDown" sortOrder="0">
+        <columns/>
+      </attributetableconfig>
+      <conditionalstyles>
+        <rowstyles/>
+        <fieldstyles/>
+      </conditionalstyles>
+      <storedexpressions/>
+      <editform tolerant="1"></editform>
+      <editforminit/>
+      <editforminitcodesource>0</editforminitcodesource>
+      <editforminitfilepath></editforminitfilepath>
+      <editforminitcode><![CDATA[]]></editforminitcode>
+      <featformsuppress>0</featformsuppress>
+      <editorlayout>generatedlayout</editorlayout>
+      <editable/>
+      <labelOnTop/>
+      <reuseLastValue/>
+      <dataDefinedFieldProperties/>
+      <widgets/>
+      <previewExpression></previewExpression>
+      <mapTip></mapTip>
+    </maplayer>
     <maplayer simplifyMaxScale="1" readOnly="0" simplifyDrawingHints="1" simplifyAlgorithm="0" simplifyDrawingTol="1" refreshOnNotifyEnabled="0" maxScale="0" hasScaleBasedVisibilityFlag="0" minScale="100000000" refreshOnNotifyMessage="" type="vector" legendPlaceholderImage="" autoRefreshEnabled="0" autoRefreshTime="0" simplifyLocal="1" styleCategories="AllStyleCategories" symbologyReferenceScale="-1" wkbType="Point" geometry="Point" labelsEnabled="0">
       <extent>
         <xmin>2537381.93679434293881059</xmin>
@@ -15017,6 +15408,7 @@ END</previewExpression>
     <layer id="Landeskarten__farbig__a4d140cf_7103_4db6_a9bc_52ef09d7ea6b"/>
     <layer id="vw_edited_support_9e44c97f_e06b_4184_b445_881318a02e8b"/>
     <layer id="SWISSIMAGE_Fond_de_plan_7d61cf38_35d1_4208_a775_1d854d304e6f"/>
+    <layer id="vw_azimut_edit_b7acca0e_e618_4f1d_8de3_08e2eb5bf359"/>
   </layerorder>
   <properties>
     <DefaultStyles/>
@@ -15408,7 +15800,7 @@ END</previewExpression>
   <Bookmarks/>
   <ProjectViewSettings UseProjectScales="0" rotation="0">
     <Scales/>
-    <DefaultViewExtent ymin="1152405.40327656571753323" ymax="1152591.77361899451352656" xmin="2537484.14173737168312073" xmax="2537643.73349062167108059">
+    <DefaultViewExtent ymin="1152307.63188518956303596" ymax="1152644.79615335632115602" xmin="2537250.72028661053627729" xmax="2537767.99200277868658304">
       <spatialrefsys nativeFormat="Wkt">
         <wkt>PROJCRS["CH1903+ / LV95",BASEGEOGCRS["CH1903+",DATUM["CH1903+",ELLIPSOID["Bessel 1841",6377397.155,299.1528128,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4150]],CONVERSION["Swiss Oblique Mercator 1995",METHOD["Hotine Oblique Mercator (variant B)",ID["EPSG",9815]],PARAMETER["Latitude of projection centre",46.9524055555556,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8811]],PARAMETER["Longitude of projection centre",7.43958333333333,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8812]],PARAMETER["Azimuth of initial line",90,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8813]],PARAMETER["Angle from Rectified to Skew Grid",90,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8814]],PARAMETER["Scale factor on initial line",1,SCALEUNIT["unity",1],ID["EPSG",8815]],PARAMETER["Easting at projection centre",2600000,LENGTHUNIT["metre",1],ID["EPSG",8816]],PARAMETER["Northing at projection centre",1200000,LENGTHUNIT["metre",1],ID["EPSG",8817]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Cadastre, engineering survey, topographic mapping (large and medium scale)."],AREA["Liechtenstein; Switzerland."],BBOX[45.82,5.96,47.81,10.49]],ID["EPSG",2056]]</wkt>
         <proj4>+proj=somerc +lat_0=46.9524055555556 +lon_0=7.43958333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs</proj4>