changeset 5423:24156a964eaa marking-single-beam

[WIP] Add support for scan marking points in geoserver.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 08 Jul 2021 12:21:55 +0200
parents ad8e3fffb868
children 2f3fd2d0486b
files pkg/controllers/system.go pkg/geoserver/templates.go schema/default_sysconfig.sql schema/updates/1461/01.config.sql schema/version.sql style-templates/sounding_results_marking_points_geoserver.sld-template
diffstat 6 files changed, 315 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/controllers/system.go	Thu Jul 08 10:53:26 2021 +0200
+++ b/pkg/controllers/system.go	Thu Jul 08 12:21:55 2021 +0200
@@ -194,9 +194,13 @@
 		return nil, err
 	}
 
+	styles := strings.Split(which, ",")
+
 	doBoth := func(req *http.Request) {
 		log.Printf("info: Trigger re-calculation of %s.", which)
-		geoserver.ReconfigureStyle(which)
+		for _, style := range styles {
+			geoserver.ReconfigureStyle(style)
+		}
 		recalc(req)
 	}
 
@@ -228,7 +232,11 @@
 	// Only the color changed -> no expensive recalc needed.
 	if colorChanged {
 		log.Println("info: Only colors changed.")
-		return func(*http.Request) { geoserver.ReconfigureStyle(which) }, nil
+		return func(*http.Request) {
+			for _, style := range styles {
+				geoserver.ReconfigureStyle(style)
+			}
+		}, nil
 	}
 
 	return nil, nil
@@ -239,7 +247,7 @@
 		func(old sql.NullString, curr string) (func(*http.Request), error) {
 			return reconfigureClassBreaks(
 				old, curr,
-				"sounding_results_areas_geoserver",
+				"sounding_results_areas_geoserver,sounding_results_marking_points_geoserver",
 				func(req *http.Request) {
 					if s, ok := auth.GetSession(req); ok {
 						triggerSoundingResultsContoursRecalc(s.User, curr)
--- a/pkg/geoserver/templates.go	Thu Jul 08 10:53:26 2021 +0200
+++ b/pkg/geoserver/templates.go	Thu Jul 08 12:21:55 2021 +0200
@@ -38,6 +38,9 @@
 		"sounding_results_areas_geoserver",
 		templateContourLinesFunc("morphology_classbreaks"))
 	RegisterStylePreprocessor(
+		"sounding_results_marking_points_geoserver",
+		templateContourLinesFunc("morphology_classbreaks"))
+	RegisterStylePreprocessor(
 		"sounding_differences",
 		templateContourLinesFunc("morphology_classbreaks_compare"))
 	RegisterStylePreprocessor(
--- a/schema/default_sysconfig.sql	Thu Jul 08 10:53:26 2021 +0200
+++ b/schema/default_sysconfig.sql	Thu Jul 08 12:21:55 2021 +0200
@@ -218,6 +218,16 @@
         FROM waterway.sounding_results_iso_areas ia
             JOIN waterway.sounding_results sr ON sr.id = ia.sounding_result_id
     $$),
+    ('waterway', 'sounding_results_marking_points_geoserver', 4326, NULL, $$
+        SELECT bottleneck_id,
+            to_char(date_info, 'YYYY-MM-DD') AS date_info,
+            height,
+            points,
+            surtyp,
+            zpg_exception
+        FROM waterway.sounding_results_marking_points mp
+            JOIN waterway.sounding_results sr ON sr.id = mp.sounding_result_id
+    $$),
     ('waterway', 'bottleneck_overview', 4326, NULL, $$
         SELECT
             objnam AS name,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/schema/updates/1461/01.config.sql	Thu Jul 08 12:21:55 2021 +0200
@@ -0,0 +1,15 @@
+-- GeoServer SQL views without time support
+INSERT INTO sys_admin.published_services (
+    schema, name, srid, key_column, view_def
+) VALUES
+    ('waterway', 'sounding_results_marking_points_geoserver', 4326, NULL, $$
+        SELECT bottleneck_id,
+            to_char(date_info, 'YYYY-MM-DD') AS date_info,
+            height,
+            points,
+            surtyp,
+            zpg_exception
+        FROM waterway.sounding_results_marking_points mp
+            JOIN waterway.sounding_results sr ON sr.id = mp.sounding_result_id
+    $$);
+
--- a/schema/version.sql	Thu Jul 08 10:53:26 2021 +0200
+++ b/schema/version.sql	Thu Jul 08 12:21:55 2021 +0200
@@ -1,1 +1,1 @@
-INSERT INTO gemma_schema_version(version) VALUES (1460);
+INSERT INTO gemma_schema_version(version) VALUES (1461);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/style-templates/sounding_results_marking_points_geoserver.sld-template	Thu Jul 08 12:21:55 2021 +0200
@@ -0,0 +1,275 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<StyledLayerDescriptor
+    xmlns="http://www.opengis.net/sld"
+    xmlns:se="http://www.opengis.net/se"
+    xmlns:ogc="http://www.opengis.net/ogc"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd"
+    version="1.1.0">
+  <NamedLayer>
+    <se:Name>sounding_results_areas</se:Name>
+    <UserStyle>
+      <se:Name>sounding_results_areas</se:Name>
+      <se:FeatureTypeStyle>
+          <se:Name>area_colours</se:Name>
+        <se:Description>
+          <se:Abstract>
+            FeatureTypeStyle defining colour classes for height attribute
+          </se:Abstract>
+        </se:Description>
+        {{ range . -}}
+        <se:Rule>
+        {{- if not .HasLow }}
+          <se:Name>&#8804; {{ printf "%g" .High }}</se:Name>
+          <ogc:Filter>
+            <ogc:PropertyIsLessThanOrEqualTo>
+              <ogc:PropertyName>height</ogc:PropertyName>
+              <ogc:Literal>{{ printf "%f" .High }}</ogc:Literal>
+            </ogc:PropertyIsLessThanOrEqualTo>
+          </ogc:Filter>
+        {{- else if not .HasHigh }}
+          <se:Name>&gt; {{ printf "%g" .Low }}</se:Name>
+          <ogc:Filter>
+            <ogc:PropertyIsGreaterThanOrEqualTo>
+              <ogc:PropertyName>height</ogc:PropertyName>
+              <ogc:Literal>{{ printf "%f" .Low }}</ogc:Literal>
+            </ogc:PropertyIsGreaterThanOrEqualTo>
+          </ogc:Filter>
+        {{- else }}
+          <se:Name>&#8804; {{ printf "%g" .High }}</se:Name>
+          <ogc:Filter>
+            <ogc:And>
+              <ogc:PropertyIsGreaterThan>
+                <ogc:PropertyName>height</ogc:PropertyName>
+                <ogc:Literal>{{ printf "%f" .Low }}</ogc:Literal>
+              </ogc:PropertyIsGreaterThan>
+              <ogc:PropertyIsLessThanOrEqualTo>
+                <ogc:PropertyName>height</ogc:PropertyName>
+                <ogc:Literal>{{ printf "%f" .High }}</ogc:Literal>
+              </ogc:PropertyIsLessThanOrEqualTo>
+            </ogc:And>
+          </ogc:Filter>
+        {{- end }}
+          <se:MaxScaleDenominator>34e3</se:MaxScaleDenominator>
+          <se:PointSymbolizer>
+            <se:Graphic>
+              <se:Mark>
+                <se:WellKnownName>circle</se:WellKnownName>
+                <se:Fill>
+                  <se:CssParameter name="fill">{{ .Color }}</se:CssParameter>
+                </se:Fill>
+              </se:Mark>
+              <se:Size>6</se:Size>
+            </se:Graphic>
+          </se:PointSymbolizer>
+        </se:Rule>
+        <se:Rule>
+        {{- if not .HasLow }}
+          <se:Name>&#8804; {{ printf "%g" .High }}</se:Name>
+          <ogc:Filter>
+            <ogc:PropertyIsLessThanOrEqualTo>
+              <ogc:PropertyName>height</ogc:PropertyName>
+              <ogc:Literal>{{ printf "%f" .High }}</ogc:Literal>
+            </ogc:PropertyIsLessThanOrEqualTo>
+          </ogc:Filter>
+        {{- else if not .HasHigh }}
+          <se:Name>&gt; {{ printf "%g" .Low }}</se:Name>
+          <ogc:Filter>
+            <ogc:PropertyIsGreaterThanOrEqualTo>
+              <ogc:PropertyName>height</ogc:PropertyName>
+              <ogc:Literal>{{ printf "%f" .Low }}</ogc:Literal>
+            </ogc:PropertyIsGreaterThanOrEqualTo>
+          </ogc:Filter>
+        {{- else }}
+          <se:Name>&#8804; {{ printf "%g" .High }}</se:Name>
+          <ogc:Filter>
+            <ogc:And>
+              <ogc:PropertyIsGreaterThan>
+                <ogc:PropertyName>height</ogc:PropertyName>
+                <ogc:Literal>{{ printf "%f" .Low }}</ogc:Literal>
+              </ogc:PropertyIsGreaterThan>
+              <ogc:PropertyIsLessThanOrEqualTo>
+                <ogc:PropertyName>height</ogc:PropertyName>
+                <ogc:Literal>{{ printf "%f" .High }}</ogc:Literal>
+              </ogc:PropertyIsLessThanOrEqualTo>
+            </ogc:And>
+          </ogc:Filter>
+        {{- end }}
+          <se:MinScaleDenominator>34e3</se:MinScaleDenominator>
+          <se:PointSymbolizer>
+            <se:Graphic>
+              <se:Mark>
+                <se:WellKnownName>circle</se:WellKnownName>
+                <se:Fill>
+                  <se:CssParameter name="fill">{{ .Color }}</se:CssParameter>
+                </se:Fill>
+              </se:Mark>
+              <se:Size>6</se:Size>
+            </se:Graphic>
+          </se:PointSymbolizer>
+        </se:Rule>
+        <se:VendorOption name="sortBy">height</se:VendorOption>
+        {{ end }}
+      </se:FeatureTypeStyle>
+      <se:FeatureTypeStyle>
+        <se:Name>area_labels</se:Name>
+        <se:Description>
+          <se:Abstract>
+            FeatureTypeStyle for labels at colour areas
+          </se:Abstract>
+        </se:Description>
+        <se:Rule>
+          <se:MaxScaleDenominator>3e2</se:MaxScaleDenominator>
+          <se:TextSymbolizer>
+          <Halo></Halo>
+            <se:VendorOption name="spaceAround">50</se:VendorOption>
+            <se:Label>
+              <ogc:Function name="Recode">
+                <ogc:Function name="numberFormat">
+                  <ogc:Literal>0.000000</ogc:Literal>
+                  <ogc:PropertyName>height</ogc:PropertyName>
+                </ogc:Function>
+                {{ range . -}}
+                {{ if .HasHigh -}}
+                    <ogc:Literal>
+                    {{- printf "%f" .High -}}
+                    </ogc:Literal><ogc:Literal>
+                    {{- printf "%g" .High -}}
+                    </ogc:Literal>
+                {{ end -}}
+                {{ end }}
+              </ogc:Function>
+            </se:Label>
+            <se:Font>
+              <se:SvgParameter name="font-size">80</se:SvgParameter>
+              <se:SvgParameter name="font-weight">bold</se:SvgParameter>
+              <se:SvgParameter name="font-family">Sans Serif</se:SvgParameter>
+            </se:Font>
+            <se:LabelPlacement>
+              <se:LinePlacement>
+                <se:PerpendicularOffset>5</se:PerpendicularOffset>
+              </se:LinePlacement>
+            </se:LabelPlacement>
+            <se:Fill>
+              <se:SvgParameter name="fill">#000000</se:SvgParameter>
+            </se:Fill>
+          </se:TextSymbolizer>
+        </se:Rule>
+        <se:Rule>
+          <se:MaxScaleDenominator>5e2</se:MaxScaleDenominator>
+          <se:MinScaleDenominator>3e2</se:MinScaleDenominator>
+          <se:TextSymbolizer>
+          <Halo></Halo>
+            <se:VendorOption name="spaceAround">80</se:VendorOption>
+            <se:Label>
+              <ogc:Function name="Recode">
+                <ogc:Function name="numberFormat">
+                  <ogc:Literal>0.000000</ogc:Literal>
+                  <ogc:PropertyName>height</ogc:PropertyName>
+                </ogc:Function>
+                {{ range . -}}
+                {{ if .HasHigh -}}
+                    <ogc:Literal>
+                    {{- printf "%f" .High -}}
+                    </ogc:Literal><ogc:Literal>
+                    {{- printf "%g" .High -}}
+                    </ogc:Literal>
+                {{ end -}}
+                {{ end }}
+              </ogc:Function>
+            </se:Label>
+            <se:Font>
+              <se:SvgParameter name="font-size">40</se:SvgParameter>
+              <se:SvgParameter name="font-weight">bold</se:SvgParameter>
+              <se:SvgParameter name="font-family">Sans Serif</se:SvgParameter>
+            </se:Font>
+            <se:LabelPlacement>
+              <se:LinePlacement>
+                <se:PerpendicularOffset>5</se:PerpendicularOffset>
+              </se:LinePlacement>
+            </se:LabelPlacement>
+            <se:Fill>
+              <se:SvgParameter name="fill">#000000</se:SvgParameter>
+            </se:Fill>
+          </se:TextSymbolizer>
+        </se:Rule>
+        <se:Rule>
+          <se:MaxScaleDenominator>7e2</se:MaxScaleDenominator>
+          <se:MinScaleDenominator>5e2</se:MinScaleDenominator>
+          <se:TextSymbolizer>
+          <Halo></Halo>
+            <se:VendorOption name="spaceAround">50</se:VendorOption>
+            <se:Label>
+              <ogc:Function name="Recode">
+                <ogc:Function name="numberFormat">
+                  <ogc:Literal>0.000000</ogc:Literal>
+                  <ogc:PropertyName>height</ogc:PropertyName>
+                </ogc:Function>
+                {{ range . -}}
+                {{ if .HasHigh -}}
+                    <ogc:Literal>
+                    {{- printf "%f" .High -}}
+                    </ogc:Literal><ogc:Literal>
+                    {{- printf "%g" .High -}}
+                    </ogc:Literal>
+                {{ end -}}
+                {{ end }}
+              </ogc:Function>
+            </se:Label>
+            <se:Font>
+              <se:SvgParameter name="font-size">20</se:SvgParameter>
+              <se:SvgParameter name="font-weight">bold</se:SvgParameter>
+              <se:SvgParameter name="font-family">Sans Serif</se:SvgParameter>
+            </se:Font>
+            <se:LabelPlacement>
+              <se:LinePlacement>
+                <se:PerpendicularOffset>5</se:PerpendicularOffset>
+              </se:LinePlacement>
+            </se:LabelPlacement>
+            <se:Fill>
+              <se:SvgParameter name="fill">#000000</se:SvgParameter>
+            </se:Fill>
+          </se:TextSymbolizer>
+        </se:Rule>
+        <se:Rule>
+          <se:MaxScaleDenominator>6e3</se:MaxScaleDenominator>
+          <se:MinScaleDenominator>7e2</se:MinScaleDenominator>
+          <se:TextSymbolizer>
+            <Halo></Halo>
+            <se:VendorOption name="spaceAround">50</se:VendorOption>
+            <se:Label>
+              <ogc:Function name="Recode">
+                <ogc:Function name="numberFormat">
+                  <ogc:Literal>0.000000</ogc:Literal>
+                  <ogc:PropertyName>height</ogc:PropertyName>
+                </ogc:Function>
+                {{ range . -}}
+                {{ if .HasHigh -}}
+                    <ogc:Literal>
+                    {{- printf "%f" .High -}}
+                    </ogc:Literal><ogc:Literal>
+                    {{- printf "%g" .High -}}
+                    </ogc:Literal>
+                {{ end -}}
+                {{ end }}
+              </ogc:Function>
+            </se:Label>
+            <se:Font>
+              <se:SvgParameter name="font-size">12</se:SvgParameter>
+              <se:SvgParameter name="font-weight">bold</se:SvgParameter>
+              <se:SvgParameter name="font-family">Sans Serif</se:SvgParameter>
+            </se:Font>
+            <se:LabelPlacement>
+              <se:LinePlacement>
+                <se:PerpendicularOffset>5</se:PerpendicularOffset>
+              </se:LinePlacement>
+            </se:LabelPlacement>
+            <se:Fill>
+              <se:SvgParameter name="fill">#000000</se:SvgParameter>
+            </se:Fill>
+          </se:TextSymbolizer>
+        </se:Rule>
+      </se:FeatureTypeStyle>
+    </UserStyle>
+  </NamedLayer>
+</StyledLayerDescriptor>