changeset 4537:e0d04cd8f992 iso-areas

Add SLD templates dir for geoserver with one template * Add script to upload SLD templates to gemma. * Add sounding_results_area.sld-template for polygons, still visible at all zoom level for debugging (see xml commented out line).
author Bernhard Reiter <bernhard@intevation.de>
date Wed, 25 Sep 2019 22:01:05 +0200
parents 3130c005abef
children 46c9a731a686
files style-templates/sounding_results_area.sld-template style-templates/upload-styles.sh
diffstat 2 files changed, 218 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/style-templates/sounding_results_area.sld-template	Wed Sep 25 22:01:05 2019 +0200
@@ -0,0 +1,99 @@
+<?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:PolygonSymbolizer>
+            <se:Fill>
+              <se:SvgParameter name="fill">{{ .Color }}</se:SvgParameter>
+            </se:Fill>
+            <se:Stroke>
+              <se:SvgParameter name="stroke">#404040</se:SvgParameter>
+              <se:SvgParameter name="stroke-width">0.5</se:SvgParameter>
+            </se:Stroke>
+          </se:PolygonSymbolizer>
+        </se:Rule>
+        {{ 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>5e3</se:MaxScaleDenominator>
+          -->
+          <se:TextSymbolizer>
+            <se:Label>
+              <ogc:PropertyName>height</ogc:PropertyName>
+            </se:Label>
+            <se:Font>
+              <se:SvgParameter name="font-family">Avenir</se:SvgParameter>
+              <se:SvgParameter name="font-family">Helvetica</se:SvgParameter>
+              <se:SvgParameter name="font-family">Arial</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">#070707</se:SvgParameter>
+            </se:Fill>
+          </se:TextSymbolizer>
+        </se:Rule>
+      </se:FeatureTypeStyle>
+    </UserStyle>
+  </NamedLayer>
+</StyledLayerDescriptor>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/style-templates/upload-styles.sh	Wed Sep 25 22:01:05 2019 +0200
@@ -0,0 +1,119 @@
+#!/bin/bash -e
+#
+# This is Free Software under GNU Affero General Public License v >= 3.0
+# without warranty, see README.md and license for details.
+#
+# SPDX-License-Identifier: AGPL-3.0-or-later
+# License-Filename: LICENSES/AGPL-3.0.txt
+#
+# Copyright (C) 2019 by via donau
+#   – Österreichische Wasserstraßen-Gesellschaft mbH
+# Software engineering by Intevation GmbH
+#
+# Author(s):
+# * Sascha Wilde <wilde@intevation.de>
+
+ME=`basename "$0"`
+BASEDIR=`dirname "$0"`
+
+usage()
+{
+  cat <<EOF
+$ME [OPTION]...
+
+Upload map styles to gemma.
+
+Options:
+  -P, --g_port=GPORT  connect to gemma server at GPORT. Default 8000.
+  -g, --g_host=GHOST  connect to gemma server on GHOST. Default "localhost".
+  -u, --g_user=GUSER  login to gemma as user GUSER. Default "sophie".
+      --g_pw=GPW      password for GUSER. Default "so2Phie4".
+      --help          display this help and exit
+
+EOF
+}
+
+fatal()
+{
+  echo >&2 "$1"
+  exit 23
+}
+
+# Defaults:
+
+g_port=8000
+g_host="localhost"
+g_user="sophie"
+g_pw="so2Phie4"
+
+# Parse options:
+
+OPTS=`getopt \
+      -l help,g_port:,g_host:,g_user:,g_pw: \
+      -o P:g:u: -n "$ME" -- "$@"`
+[ $? -eq 0 ] || { usage ; exit 1 ; }
+
+eval set -- "$OPTS"
+
+while true ; do
+  case "$1" in
+    --g_port|-P)
+      g_port="$2"
+      shift 2
+      ;;
+    --g_host|-g)
+      g_host="$2"
+      shift 2
+      ;;
+    --g_user|-u)
+      g_user="$2"
+      shift 2
+      ;;
+    --g_pw)
+      g_pw="$2"
+      shift 2
+      ;;
+    --help)
+      { usage ; exit 0 ; }
+      ;;
+    --)
+      shift
+      break
+      ;;
+  esac
+done
+
+if [ $# != 0 ] ; then
+  { usage ; exit 23 ; }
+fi
+
+# Main ------------------------------------------------------------
+
+# Login to gemma server
+login=$(curl -f -s -S -X POST \
+             -d "{\"user\":\"${g_user}\",\"password\":\"${g_pw}\"}" \
+             "http://${g_host}:${g_port}/api/login")
+token=$(jq -r '.token' <<<"$login")
+if [ -z "$token" ]
+then
+  echo "could not login to gemma server" >&2
+  exit 1
+fi
+
+roles=$(jq -r '.roles' <<<"$login")
+
+basedir=$( dirname $( realpath "${BASH_SOURCE[0]}" ))
+datadir="${basedir}/."
+
+if jq -e 'any(. == "sys_admin")' <<<"$roles" > /dev/null
+then
+  echo "== Configuring geoserver styles" >&2
+  for style in $(basename -s .sld-template $(ls $datadir/*.sld-template))
+  do
+    curl -f -s -S -H "X-Gemma-Auth:${token}" -X POST \
+         -F style=@"${datadir}/${style}.sld-template" \
+         "http://${g_host}:${g_port}/api/geo/style/${style}"
+  done
+else
+  echo >&2 'Not authorized as sys_admin'
+fi