Mercurial > gemma
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>≤ {{ 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>> {{ 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>≤ {{ 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>≤ {{ 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>> {{ 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>≤ {{ 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>