]> git.basschouten.com Git - openhab-addons.git/commitdiff
[pegelonline] Initial contribution (#16831)
authorBernd Weymann <bernd.weymann@gmail.com>
Sat, 15 Jun 2024 17:38:55 +0000 (19:38 +0200)
committerGitHub <noreply@github.com>
Sat, 15 Jun 2024 17:38:55 +0000 (19:38 +0200)
* initial version

Signed-off-by: Bernd Weymann <bernd.weymann@gmail.com>
26 files changed:
CODEOWNERS
bom/openhab-addons/pom.xml
bundles/org.openhab.binding.pegelonline/NOTICE [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/README.md [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/doc/Marburg.png [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/pom.xml [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/src/main/feature/feature.xml [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/PegelOnlineBindingConstants.java [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/PegelOnlineHandlerFactory.java [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/config/PegelOnlineConfiguration.java [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/discovery/PegelDiscovery.java [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/dto/Measure.java [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/dto/Station.java [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/dto/Water.java [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/handler/PegelOnlineHandler.java [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/utils/Utils.java [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/src/main/resources/OH-INF/addon/addon.xml [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/src/main/resources/OH-INF/i18n/pegelonline.properties [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/src/main/resources/OH-INF/thing/thing-types.xml [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/src/test/java/org/openhab/binding/pegelonline/internal/handler/CallbackMock.java [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/src/test/java/org/openhab/binding/pegelonline/internal/handler/PegelTest.java [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/src/test/java/org/openhab/binding/pegelonline/internal/util/FileReader.java [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/src/test/resources/measure.json [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/src/test/resources/rivers.json [new file with mode: 0644]
bundles/org.openhab.binding.pegelonline/src/test/resources/stations.json [new file with mode: 0644]
bundles/pom.xml

index 07394845a67a44e5ed0fa0e8028846c1b33bd9cc..0496f7b8dff550b2af85cee2719b92526103e5e1 100755 (executable)
 /bundles/org.openhab.binding.orvibo/ @tavalin
 /bundles/org.openhab.binding.panasonicbdp/ @mlobstein
 /bundles/org.openhab.binding.paradoxalarm/ @theater
+/bundles/org.openhab.binding.pegelonline/ @weymann
 /bundles/org.openhab.binding.pentair/ @jsjames
 /bundles/org.openhab.binding.phc/ @gnlpfjh
 /bundles/org.openhab.binding.pilight/ @stefanroellin @niklasdoerfler
index a87a21c20000adf14a8f2794e29c1cdaa8330940..95da35babef3acfebfe8a870b93e07258d7edfbb 100644 (file)
       <artifactId>org.openhab.binding.paradoxalarm</artifactId>
       <version>${project.version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.openhab.addons.bundles</groupId>
+      <artifactId>org.openhab.binding.pegelonline</artifactId>
+      <version>${project.version}</version>
+    </dependency>
     <dependency>
       <groupId>org.openhab.addons.bundles</groupId>
       <artifactId>org.openhab.binding.pentair</artifactId>
diff --git a/bundles/org.openhab.binding.pegelonline/NOTICE b/bundles/org.openhab.binding.pegelonline/NOTICE
new file mode 100644 (file)
index 0000000..38d625e
--- /dev/null
@@ -0,0 +1,13 @@
+This content is produced and maintained by the openHAB project.
+
+* Project home: https://www.openhab.org
+
+== Declared Project Licenses
+
+This program and the accompanying materials are made available under the terms
+of the Eclipse Public License 2.0 which is available at
+https://www.eclipse.org/legal/epl-2.0/.
+
+== Source Code
+
+https://github.com/openhab/openhab-addons
diff --git a/bundles/org.openhab.binding.pegelonline/README.md b/bundles/org.openhab.binding.pegelonline/README.md
new file mode 100644 (file)
index 0000000..b4a3cd0
--- /dev/null
@@ -0,0 +1,122 @@
+# PegelOnline Binding
+
+Binding to observe water level from german rivers. 
+Data is provided by german **Water-Route and Shipping Agency** [WSV](https://www.pegelonline.wsv.de/).
+Goal is to monitor actual water levels from rivers nearby your home. 
+In case of changing water levels the corresponding warning level is lowered or raised.
+
+## Supported Things
+
+| Label               | Description                                                                     | ID      |
+|---------------------|---------------------------------------------------------------------------------|---------|
+| Measurement Station | Station providing water level measurements                                      | station |
+
+
+## Discovery
+
+In case your home location coordinates are set the discovery will recognize all measurement stations within a radius of 50 km.
+Found Things are added in your Inbox.
+
+
+## Thing Configuration
+
+Thing configuration contains 3 sections
+
+* [Station selection](station_selection)
+* [Warning Levels of selected station](warning_levels)
+* [Refresh rate](configuration_parameters)
+
+### Station selection
+
+Stations can be selected with an Universally Unique Identifier (uuid). 
+It's automatically added by the Discovery. 
+Configure a station manually using [list of all available stations](https://pegelonline.wsv.de/gast/pegeltabelle) or [stations.json](https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations.json) and choose the uuid of your desired measurement station.
+
+### Warning Levels
+
+<img align="right" src="./doc/Marburg.png" width="450" height="500"/>
+
+Each station has specific warning levels
+
+* Warning Levels 1 (*lowest*) to 3 (*highest*) 
+* Flooding Levels
+
+Unfortunately these levels cannot be queried automatically. 
+Please select your [federal state](https://www.hochwasserzentralen.de/) and check if which levels they provide.
+The picture shows the levels of [measurement station Marburg of federal state Hesse](https://www.hlnug.de/static/pegel/wiskiweb2/stations/25830056/station.html?v=20210802152952)
+
+If you cannot evaluate warning or flooding levels leave the parameter empty.
+
+### Configuration parameters
+
+| configuration    | content   | unit | description               | required | default | 
+|------------------|-----------|------|---------------------------|----------|---------|
+| uuid             | text      |  -   | Unique Station Identifier |     X    | N/A     |
+| warningLevel1    | integer   |  cm  | Warning Level 1           |          | N/A     |
+| warningLevel2    | integer   |  cm  | Warning Level 2           |          | N/A     |
+| warningLevel3    | integer   |  cm  | Warning Level 3           |          | N/A     |
+| hq10             | integer   |  cm  | Decade Flooding           |          | N/A     |
+| hq100            | integer   |  cm  | Century Flooding          |          | N/A     |
+| hqExtreme        | integer   |  cm  | Extreme Flooding          |          | N/A     |
+| refreshInterval  | integer   |  min | Refresh Interval          |     X    | 15      |
+
+## Channels
+
+
+| channel id           | type                 | description                    |
+|----------------------|----------------------|--------------------------------|
+| timestamp            | DateTime             | Last Measurement               |
+| level                | Number:Length        | Water Level                    |
+| trend                | Number               | Water Level Trend              |
+| warning              | Number               | Current Warning                |
+
+### Trend
+
+Possible values:
+
+* 1 : Rising
+* 0 : Steady
+* -1 : Lowering
+
+### Warning
+
+Current warning according to configuration
+
+* 0 : No Warning
+* 1 : Warning level 1
+* 2 : Warning Level 2
+* 3 : Warning Level 3
+* 4 : Decade Flooding
+* 5 : Century Flooding
+* 6 : Extreme Flooding
+
+## Full Example
+
+### Things
+
+```java
+Thing pegelonline:station:giessen "Measurement Station Giessen" [
+    uuid="4b386a6a-996e-4a4a-a440-15d6b40226d4", 
+    refreshInterval=15, 
+    warningLevel1=550, 
+    warningLevel2=600, 
+    warningLevel3=650, 
+    hq10=732, 
+    hq100=786
+]
+```
+
+### Items
+
+```java
+DateTime         Lahn_Giessen_Timestamp      "Measurement timestamp Lahn Giessen"   {channel="pegelonline:station:giessen:timestamp" }                                                                           
+Number:Length    Lahn_Giessen_Level          "Water Level Lahn Giessen]"            {channel="pegelonline:station:giessen:level" }                                                                           
+Number           Lahn_Giessen_Trend          "Water Level Trend Lahn Giessen"       {channel="pegelonline:station:giessen:trend"}
+Number           Lahn_Giessen_Warning        "Warning Level Lahn Giessen"           {channel="pegelonline:station:giessen:warning"}   
+```
+
+
+## Links
+
+[PegelOnline API Documentation](https://www.pegelonline.wsv.de/webservice/dokuRestapi#caching)
+
diff --git a/bundles/org.openhab.binding.pegelonline/doc/Marburg.png b/bundles/org.openhab.binding.pegelonline/doc/Marburg.png
new file mode 100644 (file)
index 0000000..d601402
Binary files /dev/null and b/bundles/org.openhab.binding.pegelonline/doc/Marburg.png differ
diff --git a/bundles/org.openhab.binding.pegelonline/pom.xml b/bundles/org.openhab.binding.pegelonline/pom.xml
new file mode 100644 (file)
index 0000000..2d21531
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.openhab.addons.bundles</groupId>
+    <artifactId>org.openhab.addons.reactor.bundles</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>org.openhab.binding.pegelonline</artifactId>
+
+  <name>openHAB Add-ons :: Bundles :: PegelOnline Binding</name>
+
+</project>
diff --git a/bundles/org.openhab.binding.pegelonline/src/main/feature/feature.xml b/bundles/org.openhab.binding.pegelonline/src/main/feature/feature.xml
new file mode 100644 (file)
index 0000000..1d8625e
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<features name="org.openhab.binding.pegelonline-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.4.0">
+       <repository>mvn:org.openhab.core.features.karaf/org.openhab.core.features.karaf.openhab-core/${ohc.version}/xml/features</repository>
+
+       <feature name="openhab-binding-pegelonline" description="PegelOnline Binding" version="${project.version}">
+               <feature>openhab-runtime-base</feature>
+               <bundle start-level="80">mvn:org.openhab.addons.bundles/org.openhab.binding.pegelonline/${project.version}</bundle>
+       </feature>
+</features>
diff --git a/bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/PegelOnlineBindingConstants.java b/bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/PegelOnlineBindingConstants.java
new file mode 100644 (file)
index 0000000..ef000e1
--- /dev/null
@@ -0,0 +1,63 @@
+/**
+ * Copyright (c) 2010-2024 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.pegelonline.internal;
+
+import java.util.Set;
+
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.openhab.core.library.types.PointType;
+import org.openhab.core.thing.ThingTypeUID;
+
+import com.google.gson.Gson;
+
+/**
+ * The {@link PegelOnlineBindingConstants} class defines common constants, which are
+ * used across the whole binding.
+ *
+ * @author Bernd Weymann - Initial contribution
+ */
+@NonNullByDefault
+public class PegelOnlineBindingConstants {
+
+    private static final String BINDING_ID = "pegelonline";
+
+    // List of all Thing Type UIDs
+    public static final ThingTypeUID STATION_THING = new ThingTypeUID(BINDING_ID, "station");
+    public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Set.of(STATION_THING);
+
+    // List of all Channel ids
+    public static final String TIMESTAMP_CHANNEL = "timestamp";
+    public static final String LEVEL_CHANNEL = "level";
+    public static final String TREND_CHANNEL = "trend";
+    public static final String WARNING_CHANNEL = "warning";
+
+    public static final int NO_WARNING = 0;
+    public static final int WARN_LEVEL_1 = 1;
+    public static final int WARN_LEVEL_2 = 2;
+    public static final int WARN_LEVEL_3 = 3;
+    public static final int HQ10 = 4;
+    public static final int HQ100 = 5;
+    public static final int HQ_EXTREME = 6;
+
+    public static final Gson GSON = new Gson();
+
+    public static final String STATIONS_URI = "https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations";
+    public static final double DISCOVERY_RADIUS = 50;
+    public static final PointType UNDEF_LOCATION = PointType.valueOf("-1,-1");
+
+    public static final String SPACE = " ";
+    public static final String UNDERLINE = "_";
+    public static final String HYPHEN = " - ";
+    public static final String EMPTY = "";
+    public static final String UNKNOWN = "Unknown";
+}
diff --git a/bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/PegelOnlineHandlerFactory.java b/bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/PegelOnlineHandlerFactory.java
new file mode 100644 (file)
index 0000000..b6c4d62
--- /dev/null
@@ -0,0 +1,60 @@
+/**
+ * Copyright (c) 2010-2024 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.pegelonline.internal;
+
+import static org.openhab.binding.pegelonline.internal.PegelOnlineBindingConstants.STATION_THING;
+
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
+import org.openhab.binding.pegelonline.internal.handler.PegelOnlineHandler;
+import org.openhab.core.i18n.LocationProvider;
+import org.openhab.core.io.net.http.HttpClientFactory;
+import org.openhab.core.thing.Thing;
+import org.openhab.core.thing.ThingTypeUID;
+import org.openhab.core.thing.binding.BaseThingHandlerFactory;
+import org.openhab.core.thing.binding.ThingHandler;
+import org.openhab.core.thing.binding.ThingHandlerFactory;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+
+/**
+ * The {@link PegelOnlineHandlerFactory} is responsible for creating things and thing
+ * handlers.
+ *
+ * @author Bernd Weymann - Initial contribution
+ */
+@NonNullByDefault
+@Component(configurationPid = "binding.pegelonline", service = ThingHandlerFactory.class)
+public class PegelOnlineHandlerFactory extends BaseThingHandlerFactory {
+    private final HttpClientFactory httpClientFactory;
+
+    @Activate
+    public PegelOnlineHandlerFactory(final @Reference HttpClientFactory hcf, final @Reference LocationProvider lp) {
+        httpClientFactory = hcf;
+    }
+
+    @Override
+    public boolean supportsThingType(ThingTypeUID thingTypeUID) {
+        return PegelOnlineBindingConstants.SUPPORTED_THING_TYPES_UIDS.contains(thingTypeUID);
+    }
+
+    @Override
+    protected @Nullable ThingHandler createHandler(Thing thing) {
+        ThingTypeUID thingTypeUID = thing.getThingTypeUID();
+        if (STATION_THING.equals(thingTypeUID)) {
+            return new PegelOnlineHandler(thing, httpClientFactory.getCommonHttpClient());
+        }
+        return null;
+    }
+}
diff --git a/bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/config/PegelOnlineConfiguration.java b/bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/config/PegelOnlineConfiguration.java
new file mode 100644 (file)
index 0000000..db5dce9
--- /dev/null
@@ -0,0 +1,81 @@
+/**
+ * Copyright (c) 2010-2024 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.pegelonline.internal.config;
+
+import static org.openhab.binding.pegelonline.internal.PegelOnlineBindingConstants.*;
+
+import java.util.Map.Entry;
+import java.util.TreeMap;
+
+import org.eclipse.jdt.annotation.NonNullByDefault;
+
+/**
+ * The {@link PegelOnlineConfiguration} class contains fields mapping thing configuration parameters.
+ *
+ * @author Bernd Weymann - Initial contribution
+ */
+@NonNullByDefault
+public class PegelOnlineConfiguration {
+    public String uuid = UNKNOWN;
+    public int warningLevel1 = Integer.MAX_VALUE;
+    public int warningLevel2 = Integer.MAX_VALUE;
+    public int warningLevel3 = Integer.MAX_VALUE;
+    public int hq10 = Integer.MAX_VALUE;
+    public int hq100 = Integer.MAX_VALUE;
+    public int hqExtreme = Integer.MAX_VALUE;
+    public int refreshInterval = 15;
+
+    public boolean uuidCheck() {
+        // https://stackoverflow.com/questions/20041051/how-to-judge-a-string-is-uuid-type
+        return uuid.matches("[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$");
+    }
+
+    /**
+     * Check if configured warning levels are in ascending order
+     *
+     * @return true if ascending, false otherwise
+     */
+    public boolean warningCheck() {
+        TreeMap<Integer, Integer> warnMap = this.getWarnings();
+        Entry<Integer, Integer> currentEntry = warnMap.firstEntry();
+        Entry<Integer, Integer> nextEntry = warnMap.higherEntry(currentEntry.getKey());
+        while (nextEntry != null) {
+            // ignore non configured values
+            if (nextEntry.getKey() != Integer.MAX_VALUE) {
+                if (nextEntry.getValue() < currentEntry.getValue()) {
+                    return false;
+                }
+            }
+            currentEntry = nextEntry;
+            nextEntry = warnMap.higherEntry(currentEntry.getKey());
+        }
+        return true;
+    }
+
+    /**
+     * Calculate sorted map with level height and warning level based on configuration
+     *
+     * @return TreeMap with keys containing level height and values containing warning level
+     */
+    public TreeMap<Integer, Integer> getWarnings() {
+        TreeMap<Integer, Integer> warnMap = new TreeMap<>();
+        warnMap.put(0, NO_WARNING);
+        warnMap.put(warningLevel1, WARN_LEVEL_1);
+        warnMap.put(warningLevel2, WARN_LEVEL_2);
+        warnMap.put(warningLevel3, WARN_LEVEL_3);
+        warnMap.put(hq10, HQ10);
+        warnMap.put(hq100, HQ100);
+        warnMap.put(hqExtreme, HQ_EXTREME);
+        return warnMap;
+    }
+}
diff --git a/bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/discovery/PegelDiscovery.java b/bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/discovery/PegelDiscovery.java
new file mode 100644 (file)
index 0000000..b68bf09
--- /dev/null
@@ -0,0 +1,122 @@
+/**
+ * Copyright (c) 2010-2024 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.pegelonline.internal.discovery;
+
+import static org.openhab.binding.pegelonline.internal.PegelOnlineBindingConstants.*;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeoutException;
+
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.jetty.client.api.ContentResponse;
+import org.openhab.binding.pegelonline.internal.dto.Station;
+import org.openhab.binding.pegelonline.internal.handler.PegelOnlineHandler;
+import org.openhab.binding.pegelonline.internal.utils.Utils;
+import org.openhab.core.config.discovery.AbstractDiscoveryService;
+import org.openhab.core.config.discovery.DiscoveryResultBuilder;
+import org.openhab.core.config.discovery.DiscoveryService;
+import org.openhab.core.i18n.LocationProvider;
+import org.openhab.core.io.net.http.HttpClientFactory;
+import org.openhab.core.library.types.PointType;
+import org.openhab.core.thing.ThingUID;
+import org.openhab.core.thing.binding.ThingHandler;
+import org.openhab.core.thing.binding.ThingHandlerService;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * {@link PegelDiscovery} Discovery of measurement stations
+ *
+ * @author Bernd Weymann - Initial contribution
+ */
+@NonNullByDefault
+@Component(service = DiscoveryService.class, immediate = true, configurationPid = "discovery.pegelonline")
+public class PegelDiscovery extends AbstractDiscoveryService implements ThingHandlerService {
+    private final Logger logger = LoggerFactory.getLogger(PegelDiscovery.class);
+    private Optional<PegelOnlineHandler> handler = Optional.empty();
+    private PointType homeLocation = UNDEF_LOCATION;
+    private HttpClientFactory httpClientFactory;
+
+    @Activate
+    public PegelDiscovery(final @Reference HttpClientFactory hcf, final @Reference LocationProvider lp) {
+        super(SUPPORTED_THING_TYPES_UIDS, 10, false);
+        httpClientFactory = hcf;
+        PointType location = lp.getLocation();
+        if (location != null) {
+            homeLocation = location;
+        } else {
+            logger.debug("No home location found");
+        }
+    }
+
+    @Override
+    protected void startScan() {
+        double homeLat = homeLocation.getLatitude().doubleValue();
+        double homeLon = homeLocation.getLongitude().doubleValue();
+        try {
+            ContentResponse cr = httpClientFactory.getCommonHttpClient().GET(STATIONS_URI);
+            Station[] stationArray = GSON.fromJson(cr.getContentAsString(), Station[].class);
+            if (stationArray != null) {
+                for (Station station : stationArray) {
+                    double distance = Utils.calculateDistance(homeLat, homeLon, station.latitude, station.longitude);
+                    if (distance < DISCOVERY_RADIUS) {
+                        logger.trace("Station in range {},{}", station.longname, station.water.shortname);
+                        reportResult(station);
+                    }
+                }
+            } else {
+                logger.trace("No stations found in discovery");
+            }
+        } catch (ExecutionException | TimeoutException | InterruptedException e) {
+            logger.trace("Exception during station discovery: {}", e.getMessage());
+        }
+    }
+
+    public void reportResult(Station s) {
+        String label = "Pegel Station " + Utils.toTitleCase(s.shortname) + " / " + Utils.toTitleCase(s.water.shortname);
+        Map<String, Object> properties = new HashMap<String, Object>();
+        properties.put("agency", s.agency);
+        properties.put("km", s.km);
+        properties.put("river", s.water.longname);
+        properties.put("station", s.longname);
+        properties.put("uuid", s.uuid);
+        properties.put("location", s.latitude + "," + s.longitude);
+        ThingUID uid = new ThingUID(STATION_THING, s.uuid);
+        thingDiscovered(DiscoveryResultBuilder.create(uid).withRepresentationProperty("uuid").withLabel(label)
+                .withProperties(properties).build());
+    }
+
+    @Override
+    public void deactivate() {
+        super.deactivate();
+    }
+
+    @Override
+    public void setThingHandler(ThingHandler thingHandler) {
+        if (thingHandler instanceof PegelOnlineHandler pegelOnlineHandler) {
+            handler = Optional.of(pegelOnlineHandler);
+        }
+    }
+
+    @Override
+    public @Nullable ThingHandler getThingHandler() {
+        return handler.orElse(null);
+    }
+}
diff --git a/bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/dto/Measure.java b/bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/dto/Measure.java
new file mode 100644 (file)
index 0000000..d000aae
--- /dev/null
@@ -0,0 +1,26 @@
+/**
+ * Copyright (c) 2010-2024 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.pegelonline.internal.dto;
+
+/**
+ * {@link Measure} DTO for water level measurements
+ *
+ * @author Bernd Weymann - Initial contribution
+ */
+public class Measure {
+    public String timestamp; // "2021-07-31T19:00:00+02:00",
+    public double value; // ":238.0,
+    public int trend; // -1,
+    public String stateMnwMhw; // "normal",
+    public String stateNswHsw; // "unknown"
+}
diff --git a/bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/dto/Station.java b/bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/dto/Station.java
new file mode 100644 (file)
index 0000000..d04eb90
--- /dev/null
@@ -0,0 +1,30 @@
+/**
+ * Copyright (c) 2010-2024 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.pegelonline.internal.dto;
+
+/**
+ * {@link Station} DTO for measurement Station
+ *
+ * @author Bernd Weymann - Initial contribution
+ */
+public class Station {
+    public String uuid; // "47174d8f-1b8e-4599-8a59-b580dd55bc87",
+    public long number; // "48900237",
+    public String shortname; // "EITZE",
+    public String longname; // "EITZE",
+    public double km; // 9.56,
+    public String agency; // : "WSA VERDEN",
+    public double longitude; // 9.27676943537587,
+    public double latitude; // 52.90406541008721,
+    public Water water;
+}
diff --git a/bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/dto/Water.java b/bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/dto/Water.java
new file mode 100644 (file)
index 0000000..131fcb9
--- /dev/null
@@ -0,0 +1,23 @@
+/**
+ * Copyright (c) 2010-2024 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.pegelonline.internal.dto;
+
+/**
+ * {@link Station} DTO for river naming
+ *
+ * @author Bernd Weymann - Initial contribution
+ */
+public class Water {
+    public String shortname; // "ALLER",
+    public String longname; // "ALLER"
+}
diff --git a/bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/handler/PegelOnlineHandler.java b/bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/handler/PegelOnlineHandler.java
new file mode 100644 (file)
index 0000000..bb4b146
--- /dev/null
@@ -0,0 +1,178 @@
+/**
+ * Copyright (c) 2010-2024 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.pegelonline.internal.handler;
+
+import static org.openhab.binding.pegelonline.internal.PegelOnlineBindingConstants.*;
+
+import java.util.Optional;
+import java.util.TreeMap;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.jetty.client.HttpClient;
+import org.eclipse.jetty.client.api.ContentResponse;
+import org.openhab.binding.pegelonline.internal.config.PegelOnlineConfiguration;
+import org.openhab.binding.pegelonline.internal.dto.Measure;
+import org.openhab.core.config.core.Configuration;
+import org.openhab.core.library.types.DateTimeType;
+import org.openhab.core.library.types.DecimalType;
+import org.openhab.core.library.types.QuantityType;
+import org.openhab.core.library.unit.MetricPrefix;
+import org.openhab.core.library.unit.SIUnits;
+import org.openhab.core.thing.ChannelUID;
+import org.openhab.core.thing.Thing;
+import org.openhab.core.thing.ThingStatus;
+import org.openhab.core.thing.ThingStatusDetail;
+import org.openhab.core.thing.binding.BaseThingHandler;
+import org.openhab.core.types.Command;
+import org.openhab.core.types.RefreshType;
+import org.openhab.core.types.State;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The {@link PegelOnlineHandler} is responsible for handling commands, which are
+ * sent to one of the channels.
+ *
+ * @author Bernd Weymann - Initial contribution
+ */
+@NonNullByDefault
+public class PegelOnlineHandler extends BaseThingHandler {
+    private static final String STATIONS_URI = "https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations";
+    private final Logger logger = LoggerFactory.getLogger(PegelOnlineHandler.class);
+    private Optional<PegelOnlineConfiguration> configuration = Optional.empty();
+    private Optional<ScheduledFuture<?>> schedule = Optional.empty();
+    private Optional<Measure> cache = Optional.empty();
+    private TreeMap<Integer, Integer> warnMap = new TreeMap<>();
+    private String stationUUID = UNKNOWN;
+    private HttpClient httpClient;
+
+    public PegelOnlineHandler(Thing thing, HttpClient hc) {
+        super(thing);
+        httpClient = hc;
+    }
+
+    @Override
+    public void handleCommand(ChannelUID channelUID, Command command) {
+        if (command instanceof RefreshType) {
+            if (cache.isPresent()) {
+                Measure m = cache.get();
+                if (LEVEL_CHANNEL.equals(channelUID.getId())) {
+                    updateChannelState(LEVEL_CHANNEL, QuantityType.valueOf(m.value, MetricPrefix.CENTI(SIUnits.METRE)));
+                } else if (TREND_CHANNEL.equals(channelUID.getId())) {
+                    updateChannelState(TREND_CHANNEL, DecimalType.valueOf(Integer.toString(m.trend)));
+                } else if (TIMESTAMP_CHANNEL.equals(channelUID.getId())) {
+                    updateChannelState(TIMESTAMP_CHANNEL, DateTimeType.valueOf(m.timestamp));
+                } else if (WARNING_CHANNEL.equals(channelUID.getId())) {
+                    updateChannelState(WARNING_CHANNEL,
+                            DecimalType.valueOf(Integer.toString(warnMap.floorEntry((int) m.value).getValue())));
+                }
+            }
+        }
+    }
+
+    @Override
+    public void initialize() {
+        PegelOnlineConfiguration config = getConfigAs(PegelOnlineConfiguration.class);
+        stationUUID = config.uuid;
+        if (!config.uuidCheck()) {
+            String description = "@text/pegelonline.handler.status.uuid [\"" + stationUUID + "\"]";
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, description);
+            return;
+        }
+        if (!config.warningCheck()) {
+            String description = "@text/pegelonline.handler.status.warning";
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, description);
+            return;
+        }
+        warnMap = config.getWarnings();
+        configuration = Optional.of(config);
+        String description = "@text/pegelonline.handler.status.wait-feedback";
+        updateStatus(ThingStatus.UNKNOWN, ThingStatusDetail.NONE, description);
+        schedule = Optional.of(scheduler.scheduleWithFixedDelay(this::performMeasurement, 0,
+                configuration.get().refreshInterval, TimeUnit.MINUTES));
+    }
+
+    @Override
+    public void dispose() {
+        warnMap.clear();
+        if (schedule.isPresent()) {
+            schedule.get().cancel(true);
+        }
+        schedule = Optional.empty();
+    }
+
+    @Override
+    public void updateConfiguration(Configuration configuration) {
+        super.updateConfiguration(configuration);
+    }
+
+    void performMeasurement() {
+        try {
+            ContentResponse cr = httpClient.GET(STATIONS_URI + "/" + stationUUID + "/W/currentmeasurement.json");
+            int responseStatus = cr.getStatus();
+            if (responseStatus == 200) {
+                String content = cr.getContentAsString();
+                Measure measureDto = GSON.fromJson(content, Measure.class);
+                if (isValid(measureDto) && measureDto != null) {
+                    updateStatus(ThingStatus.ONLINE);
+                    updateChannels(measureDto);
+                } else {
+                    String description = "@text/pegelonline.handler.status.json-error [\"" + content + "\"]";
+                    updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, description);
+                }
+            } else if (responseStatus == 404) {
+                // 404 respoonse shows station isn't found
+                String description = "@text/pegelonline.handler.status.uuid-not-found [\"" + stationUUID + "\"]";
+                updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, description);
+            } else {
+                String description = "@text/pegelonline.handler.status.http-status [\"" + responseStatus + "\"]";
+                updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, description);
+            }
+        } catch (InterruptedException | ExecutionException | TimeoutException e) {
+            String description = "@text/pegelonline.handler.status.http-exception [\"" + e.getMessage() + "\"]";
+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, description);
+        }
+    }
+
+    private boolean isValid(@Nullable Measure measureDto) {
+        if (measureDto != null) {
+            if (measureDto.timestamp != null) {
+                try {
+                    DateTimeType.valueOf(measureDto.timestamp);
+                    return true;
+                } catch (Exception e) {
+                    logger.trace("Error converting {} into DateTime: {}", measureDto.timestamp, e.getMessage());
+                }
+            }
+        }
+        return false;
+    }
+
+    private void updateChannels(Measure measureDto) {
+        cache = Optional.of(measureDto);
+        updateChannelState(TIMESTAMP_CHANNEL, DateTimeType.valueOf(measureDto.timestamp));
+        updateChannelState(LEVEL_CHANNEL, QuantityType.valueOf(measureDto.value, MetricPrefix.CENTI(SIUnits.METRE)));
+        updateChannelState(TREND_CHANNEL, DecimalType.valueOf(Integer.toString(measureDto.trend)));
+        updateChannelState(WARNING_CHANNEL,
+                DecimalType.valueOf(Integer.toString(warnMap.floorEntry((int) measureDto.value).getValue())));
+    }
+
+    private void updateChannelState(String channel, State st) {
+        updateState(new ChannelUID(thing.getUID(), channel), st);
+    }
+}
diff --git a/bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/utils/Utils.java b/bundles/org.openhab.binding.pegelonline/src/main/java/org/openhab/binding/pegelonline/internal/utils/Utils.java
new file mode 100644 (file)
index 0000000..99e4cc6
--- /dev/null
@@ -0,0 +1,73 @@
+/**
+ * Copyright (c) 2010-2024 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.pegelonline.internal.utils;
+
+import static org.openhab.binding.pegelonline.internal.PegelOnlineBindingConstants.UNKNOWN;
+
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
+import org.openhab.core.util.StringUtils;
+
+/**
+ * {@link Utils} Utilities for binding
+ *
+ * @author Bernd Weymann - Initial contribution
+ */
+@NonNullByDefault
+public class Utils {
+    public static final int EARTH_RADIUS = 6371;
+
+    /**
+     * Calculate the Distance Using Equirectangular Distance Approximation
+     *
+     * @param lat1 - Latitude of coordinate 1
+     * @param lon1 - Longitude of coordinate 1
+     * @param lat2 - Latitude of coordinate 2
+     * @param lon2 - Longitude of coordinate 2
+     * @return distance in km
+     *
+     * @see https://www.baeldung.com/java-find-distance-between-points#equirectangular-distance-approximation
+     *
+     */
+    public static double calculateDistance(double lat1, double lon1, double lat2, double lon2) {
+        double lat1Rad = Math.toRadians(lat1);
+        double lat2Rad = Math.toRadians(lat2);
+        double lon1Rad = Math.toRadians(lon1);
+        double lon2Rad = Math.toRadians(lon2);
+
+        double x = (lon2Rad - lon1Rad) * Math.cos((lat1Rad + lat2Rad) / 2);
+        double y = (lat2Rad - lat1Rad);
+        double distance = Math.sqrt(x * x + y * y) * EARTH_RADIUS;
+
+        return distance;
+    }
+
+    /**
+     * Converts String from "all upper case" into "title case" after space and hyphen
+     *
+     * @param input - string to convert
+     * @return title case string
+     */
+    public static String toTitleCase(@Nullable String input) {
+        if (input == null) {
+            return toTitleCase(UNKNOWN);
+        } else {
+            StringBuffer titleCaseString = new StringBuffer();
+            for (String string : StringUtils.splitByCharacterType(input)) {
+                String converted = StringUtils.capitalize(string.toLowerCase());
+                titleCaseString.append(converted);
+            }
+            return titleCaseString.toString();
+        }
+    }
+}
diff --git a/bundles/org.openhab.binding.pegelonline/src/main/resources/OH-INF/addon/addon.xml b/bundles/org.openhab.binding.pegelonline/src/main/resources/OH-INF/addon/addon.xml
new file mode 100644 (file)
index 0000000..ff23f71
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<addon:addon id="pegelonline" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:addon="https://openhab.org/schemas/addon/v1.0.0"
+       xsi:schemaLocation="https://openhab.org/schemas/addon/v1.0.0 https://openhab.org/schemas/addon-1.0.0.xsd">
+
+       <type>binding</type>
+       <name>PegelOnline Binding</name>
+       <description>This is the binding for PegelOnline.</description>
+       <connection>cloud</connection>
+       <countries>de</countries>
+
+</addon:addon>
diff --git a/bundles/org.openhab.binding.pegelonline/src/main/resources/OH-INF/i18n/pegelonline.properties b/bundles/org.openhab.binding.pegelonline/src/main/resources/OH-INF/i18n/pegelonline.properties
new file mode 100644 (file)
index 0000000..3096ed1
--- /dev/null
@@ -0,0 +1,58 @@
+# add-on
+
+addon.pegelonline.name = PegelOnline Binding
+addon.pegelonline.description = This is the binding for PegelOnline.
+
+# thing types
+
+thing-type.pegelonline.station.label = Measurement Station
+thing-type.pegelonline.station.description = Station providing water level measurements
+
+# thing types config
+
+thing-type.config.pegelonline.station.hq10.label = Decade Flooding
+thing-type.config.pegelonline.station.hq10.description = Water level of decade flooding 10-20 years
+thing-type.config.pegelonline.station.hq100.label = Century Flooding
+thing-type.config.pegelonline.station.hq100.description = Water level of century flooding in ~ 100 years
+thing-type.config.pegelonline.station.hqExtreme.label = Extreme Flooding
+thing-type.config.pegelonline.station.hqExtreme.description = Water level of extra ordinary flooding > 200 years
+thing-type.config.pegelonline.station.refreshInterval.label = Refresh Interval
+thing-type.config.pegelonline.station.refreshInterval.description = Interval measurement polling in minutes.
+thing-type.config.pegelonline.station.uuid.label = Station Identifier
+thing-type.config.pegelonline.station.uuid.description = Unique Station Identifier
+thing-type.config.pegelonline.station.warningLevel1.label = Warning Level 1
+thing-type.config.pegelonline.station.warningLevel1.description = Water level triggering level 1 warning
+thing-type.config.pegelonline.station.warningLevel2.label = Warning Level 2
+thing-type.config.pegelonline.station.warningLevel2.description = Water level triggering level 2 warning
+thing-type.config.pegelonline.station.warningLevel3.label = Warning Level 3
+thing-type.config.pegelonline.station.warningLevel3.description = Water level triggering level 3 warning
+
+# channel types
+
+channel-type.pegelonline.level.label = Water Level
+channel-type.pegelonline.timestamp.label = Last Measurement
+channel-type.pegelonline.timestamp.state.pattern = %1$tA, %1$td.%1$tm. %1$tH:%1$tM
+channel-type.pegelonline.trend.label = Water Level Trend
+channel-type.pegelonline.trend.state.option.-1 = Lowering
+channel-type.pegelonline.trend.state.option.0 = Steady
+channel-type.pegelonline.trend.state.option.1 = Rising
+channel-type.pegelonline.warning.label = Warning Level
+channel-type.pegelonline.warning.state.option.0 = No warning
+channel-type.pegelonline.warning.state.option.1 = Warning Level 1
+channel-type.pegelonline.warning.state.option.2 = Warning Level 2
+channel-type.pegelonline.warning.state.option.3 = Warning Level 3
+channel-type.pegelonline.warning.state.option.4 = Decade Flooding
+channel-type.pegelonline.warning.state.option.5 = Century Flooding
+channel-type.pegelonline.warning.state.option.6 = Extreme Flooding
+
+# channel types
+
+pegelonline.handler.status.uuid = Unique Identifier {0} not valid
+pegelonline.handler.status.warning = Warnings shall be entered in increasing order
+pegelonline.handler.status.flooding = Flooding Levels shall be entered in increasing order
+pegelonline.handler.status.wait-feedback = Wait for first feedback
+pegelonline.handler.status.uuid-not-found = No station found for uuid {0}
+pegelonline.handler.status.uuid-verification = Verification for uuid {0} ongoing. Next try in 1 minute.
+pegelonline.handler.status.http-status = HTTP status {0} received
+pegelonline.handler.status.http-exception = Exception {0}
+pegelonline.handler.status.json-error = Error parsing {0}
diff --git a/bundles/org.openhab.binding.pegelonline/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.pegelonline/src/main/resources/OH-INF/thing/thing-types.xml
new file mode 100644 (file)
index 0000000..f7e8cb3
--- /dev/null
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<thing:thing-descriptions bindingId="pegelonline"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
+       xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
+
+       <thing-type id="station">
+               <label>Measurement Station</label>
+               <description>Station providing water level measurements</description>
+
+               <channels>
+                       <channel id="timestamp" typeId="timestamp"/>
+                       <channel id="level" typeId="level"/>
+                       <channel id="trend" typeId="trend"/>
+                       <channel id="warning" typeId="warning"/>
+               </channels>
+
+               <representation-property>uuid</representation-property>
+
+               <config-description>
+                       <parameter name="uuid" type="text" required="true">
+                               <label>Station Identifier</label>
+                               <description>Unique Station Identifier</description>
+                       </parameter>
+                       <parameter name="warningLevel1" type="integer">
+                               <label>Warning Level 1</label>
+                               <description>Water level triggering level 1 warning</description>
+                       </parameter>
+                       <parameter name="warningLevel2" type="integer">
+                               <label>Warning Level 2</label>
+                               <description>Water level triggering level 2 warning</description>
+                       </parameter>
+                       <parameter name="warningLevel3" type="integer">
+                               <label>Warning Level 3</label>
+                               <description>Water level triggering level 3 warning</description>
+                       </parameter>
+                       <parameter name="hq10" type="integer">
+                               <label>Decade Flooding</label>
+                               <description>Water level of decade flooding 10-20 years</description>
+                       </parameter>
+                       <parameter name="hq100" type="integer">
+                               <label>Century Flooding</label>
+                               <description>Water level of century flooding in ~ 100 years</description>
+                       </parameter>
+                       <parameter name="hqExtreme" type="integer">
+                               <label>Extreme Flooding</label>
+                               <description>Water level of extra ordinary flooding > 200 years</description>
+                       </parameter>
+                       <parameter name="refreshInterval" type="integer" unit="m" min="1" required="true">
+                               <label>Refresh Interval</label>
+                               <default>15</default>
+                               <description>Interval measurement polling in minutes.</description>
+                       </parameter>
+               </config-description>
+       </thing-type>
+
+
+       <channel-type id="timestamp">
+               <item-type>DateTime</item-type>
+               <label>Last Measurement</label>
+               <state pattern="%1$tA, %1$td.%1$tm. %1$tH:%1$tM" readOnly="true"/>
+       </channel-type>
+       <channel-type id="level">
+               <item-type>Number:Length</item-type>
+               <label>Water Level</label>
+               <state pattern="%d %unit%" readOnly="true"/>
+       </channel-type>
+       <channel-type id="trend">
+               <item-type>Number</item-type>
+               <label>Water Level Trend</label>
+               <state readOnly="true">
+                       <options>
+                               <option value="-1">Lowering</option>
+                               <option value="0">Steady</option>
+                               <option value="1">Rising</option>
+                       </options>
+               </state>
+       </channel-type>
+       <channel-type id="warning">
+               <item-type>Number</item-type>
+               <label>Warning Level</label>
+               <state readOnly="true">
+                       <options>
+                               <option value="0">No warning</option>
+                               <option value="1">Warning Level 1</option>
+                               <option value="2">Warning Level 2</option>
+                               <option value="3">Warning Level 3</option>
+                               <option value="4">Decade Flooding</option>
+                               <option value="5">Century Flooding</option>
+                               <option value="6">Extreme Flooding</option>
+                       </options>
+               </state>
+       </channel-type>
+</thing:thing-descriptions>
diff --git a/bundles/org.openhab.binding.pegelonline/src/test/java/org/openhab/binding/pegelonline/internal/handler/CallbackMock.java b/bundles/org.openhab.binding.pegelonline/src/test/java/org/openhab/binding/pegelonline/internal/handler/CallbackMock.java
new file mode 100644 (file)
index 0000000..8216e85
--- /dev/null
@@ -0,0 +1,156 @@
+/**
+ * Copyright (c) 2010-2024 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.pegelonline.internal.handler;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
+import org.openhab.core.config.core.ConfigDescription;
+import org.openhab.core.config.core.Configuration;
+import org.openhab.core.thing.Bridge;
+import org.openhab.core.thing.Channel;
+import org.openhab.core.thing.ChannelGroupUID;
+import org.openhab.core.thing.ChannelUID;
+import org.openhab.core.thing.Thing;
+import org.openhab.core.thing.ThingStatusInfo;
+import org.openhab.core.thing.ThingTypeUID;
+import org.openhab.core.thing.ThingUID;
+import org.openhab.core.thing.binding.ThingHandlerCallback;
+import org.openhab.core.thing.binding.builder.ChannelBuilder;
+import org.openhab.core.thing.type.ChannelGroupTypeUID;
+import org.openhab.core.thing.type.ChannelTypeUID;
+import org.openhab.core.types.Command;
+import org.openhab.core.types.State;
+import org.openhab.core.types.TimeSeries;
+import org.openhab.core.types.TimeSeries.Policy;
+import org.openhab.core.types.UnDefType;
+
+/**
+ * The {@link CallbackMock} is a helper for unit tests to receive callbacks
+ *
+ * @author Bernd Weymann - Initial contribution
+ */
+@NonNullByDefault
+public class CallbackMock implements ThingHandlerCallback {
+    private Map<String, State> stateMap = new HashMap<>();
+    private @Nullable ThingStatusInfo thingStatus;
+
+    public @Nullable ThingStatusInfo getThingStatus() {
+        synchronized (this) {
+            while (thingStatus == null) {
+                try {
+                    wait();
+                } catch (InterruptedException e) {
+                }
+            }
+        }
+        return thingStatus;
+    }
+
+    @Override
+    public void stateUpdated(ChannelUID channelUID, State state) {
+        stateMap.put(channelUID.getAsString(), state);
+    }
+
+    public State getState(String channelUID) {
+        State val = stateMap.get(channelUID);
+        if (val == null) {
+            return UnDefType.UNDEF;
+        } else {
+            return val;
+        }
+    }
+
+    @Override
+    public void postCommand(ChannelUID channelUID, Command command) {
+    }
+
+    @Override
+    public void sendTimeSeries(ChannelUID channelUID, TimeSeries timeSeries) {
+    }
+
+    public TimeSeries getTimeSeries(String cuid) {
+        return new TimeSeries(Policy.REPLACE);
+    }
+
+    @Override
+    public void statusUpdated(Thing thing, ThingStatusInfo thingStatus) {
+        synchronized (this) {
+            this.thingStatus = thingStatus;
+            notifyAll();
+        }
+    }
+
+    @Override
+    public void thingUpdated(Thing thing) {
+    }
+
+    @Override
+    public void validateConfigurationParameters(Thing thing, Map<String, Object> configurationParameters) {
+    }
+
+    @Override
+    public void validateConfigurationParameters(Channel channel, Map<String, Object> configurationParameters) {
+    }
+
+    @Override
+    public @Nullable ConfigDescription getConfigDescription(ChannelTypeUID channelTypeUID) {
+        return null;
+    }
+
+    @Override
+    public @Nullable ConfigDescription getConfigDescription(ThingTypeUID thingTypeUID) {
+        return null;
+    }
+
+    @Override
+    public void configurationUpdated(Thing thing) {
+    }
+
+    @Override
+    public void migrateThingType(Thing thing, ThingTypeUID thingTypeUID, Configuration configuration) {
+    }
+
+    @Override
+    public void channelTriggered(Thing thing, ChannelUID channelUID, String event) {
+    }
+
+    @Override
+    public ChannelBuilder createChannelBuilder(ChannelUID channelUID, ChannelTypeUID channelTypeUID) {
+        return ChannelBuilder.create(channelUID);
+    }
+
+    @Override
+    public ChannelBuilder editChannel(Thing thing, ChannelUID channelUID) {
+        return ChannelBuilder.create(channelUID);
+    }
+
+    @Override
+    public List<ChannelBuilder> createChannelBuilders(ChannelGroupUID channelGroupUID,
+            ChannelGroupTypeUID channelGroupTypeUID) {
+        return List.of();
+    }
+
+    @Override
+    public boolean isChannelLinked(ChannelUID channelUID) {
+        return false;
+    }
+
+    @Override
+    public @Nullable Bridge getBridge(ThingUID bridgeUID) {
+        return null;
+    }
+}
diff --git a/bundles/org.openhab.binding.pegelonline/src/test/java/org/openhab/binding/pegelonline/internal/handler/PegelTest.java b/bundles/org.openhab.binding.pegelonline/src/test/java/org/openhab/binding/pegelonline/internal/handler/PegelTest.java
new file mode 100644 (file)
index 0000000..7a007ff
--- /dev/null
@@ -0,0 +1,375 @@
+/**
+ * Copyright (c) 2010-2024 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.pegelonline.internal.handler;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.*;
+import static org.openhab.binding.pegelonline.internal.PegelOnlineBindingConstants.*;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeoutException;
+
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jetty.client.HttpClient;
+import org.eclipse.jetty.client.api.ContentResponse;
+import org.junit.jupiter.api.Test;
+import org.openhab.binding.pegelonline.internal.config.PegelOnlineConfiguration;
+import org.openhab.binding.pegelonline.internal.dto.Measure;
+import org.openhab.binding.pegelonline.internal.dto.Station;
+import org.openhab.binding.pegelonline.internal.util.FileReader;
+import org.openhab.binding.pegelonline.internal.utils.Utils;
+import org.openhab.core.config.core.Configuration;
+import org.openhab.core.library.types.DecimalType;
+import org.openhab.core.thing.ThingStatus;
+import org.openhab.core.thing.ThingStatusDetail;
+import org.openhab.core.thing.ThingStatusInfo;
+import org.openhab.core.thing.ThingTypeUID;
+import org.openhab.core.thing.internal.ThingImpl;
+import org.openhab.core.types.State;
+
+/**
+ * The {@link PegelTest} Test helper utils
+ *
+ * @author Bernd Weymann - Initial contribution
+ */
+@NonNullByDefault
+class PegelTest {
+    public static final String TEST_STATION_UUID = "1ebd0f94-cc06-445c-8e73-43fe2b8c72dc";
+
+    @Test
+    void testConfigurationValidations() {
+        PegelOnlineConfiguration config = new PegelOnlineConfiguration();
+        assertFalse(config.uuidCheck(), config.uuid);
+        config.uuid = "abc@";
+        assertFalse(config.uuidCheck(), config.uuid);
+        config.uuid = "abc d";
+        assertFalse(config.uuidCheck(), config.uuid);
+        config.uuid = "1234567a-abc1-efd9-cdf3-0123456789ab";
+        assertTrue(config.uuidCheck(), config.uuid);
+        assertTrue(config.warningCheck(), "Warnings");
+
+        String content = FileReader.readFileInString("src/test/resources/stations.json");
+        Station[] stationArray = GSON.fromJson(content, Station[].class);
+        assertNotNull(stationArray);
+        for (Station station : stationArray) {
+            config.uuid = station.uuid;
+            assertTrue(config.uuidCheck(), config.uuid);
+        }
+    }
+
+    @Test
+    void testNameConversion() {
+        String stationName = "EIDER-SPERRWERK BP";
+        String conversion = Utils.toTitleCase(stationName);
+        assertEquals("Eider-Sperrwerk Bp", conversion, "Station Name");
+
+        String content = FileReader.readFileInString("src/test/resources/stations.json");
+        Station[] stationArray = GSON.fromJson(content, Station[].class);
+        assertNotNull(stationArray);
+        for (Station station : stationArray) {
+            assertTrue(Character.isUpperCase(Utils.toTitleCase(station.shortname).charAt(0)),
+                    "First Character Upper Case");
+            assertTrue(Character.isUpperCase(Utils.toTitleCase(station.water.shortname).charAt(0)),
+                    "First Character Upper Case");
+        }
+    }
+
+    @Test
+    void testDistance() {
+        // Frankfurt Main: 50.117461111005, 8.639069127891485
+        String content = FileReader.readFileInString("src/test/resources/stations.json");
+        Station[] stationArray = GSON.fromJson(content, Station[].class);
+        assertNotNull(stationArray);
+        int hitCounter = 0;
+        for (Station station : stationArray) {
+            double distance = Utils.calculateDistance(50.117461111005, 8.639069127891485, station.latitude,
+                    station.longitude);
+            if (distance < 50) {
+                hitCounter++;
+                assertTrue(station.water.shortname.equals("RHEIN") || station.water.shortname.equals("MAIN"),
+                        "RHEIN or MAIN");
+            }
+        }
+        assertEquals(11, hitCounter, "Meassurement Stations around FRA");
+    }
+
+    @Test
+    void testMeasureObject() {
+        String content = FileReader.readFileInString("src/test/resources/measure.json");
+        Measure measure = GSON.fromJson(content, Measure.class);
+        if (measure != null) {
+            assertEquals("2021-08-01T16:00:00+02:00", measure.timestamp, "Timestamp");
+            assertEquals(238, measure.value, "Level");
+            assertEquals(-1, measure.trend, "Trend");
+        } else {
+            fail();
+        }
+    }
+
+    @Test
+    void test404Status() {
+        String stationContent = FileReader.readFileInString("src/test/resources/stations.json");
+        ContentResponse stationResponse = mock(ContentResponse.class);
+        when(stationResponse.getStatus()).thenReturn(200);
+        when(stationResponse.getContentAsString()).thenReturn(stationContent);
+
+        String content = "{}";
+        ContentResponse measureResponse = mock(ContentResponse.class);
+        when(measureResponse.getStatus()).thenReturn(404);
+        when(measureResponse.getContentAsString()).thenReturn(content);
+
+        HttpClient httpClientMock = mock(HttpClient.class);
+        try {
+            when(httpClientMock.GET(STATIONS_URI + "/" + TEST_STATION_UUID + "/W/currentmeasurement.json"))
+                    .thenReturn(measureResponse);
+            when(httpClientMock.GET(STATIONS_URI)).thenReturn(stationResponse);
+        } catch (InterruptedException | ExecutionException | TimeoutException e) {
+            fail();
+        }
+
+        CallbackMock callback = new CallbackMock();
+        ThingImpl ti = new ThingImpl(new ThingTypeUID("pegelonline:station"), "test");
+        PegelOnlineHandler handler = new PegelOnlineHandler(ti, httpClientMock);
+        Configuration config = new Configuration();
+        config.put("uuid", TEST_STATION_UUID);
+        handler.setCallback(callback);
+        handler.updateConfiguration(config);
+        handler.initialize();
+        handler.performMeasurement();
+        ThingStatusInfo tsi = callback.getThingStatus();
+        assertNotNull(tsi);
+        assertEquals(ThingStatus.OFFLINE, tsi.getStatus(), "Status");
+        assertEquals(ThingStatusDetail.CONFIGURATION_ERROR, tsi.getStatusDetail(), "Detail");
+        String description = tsi.getDescription();
+        assertNotNull(description);
+        assertEquals("@text/pegelonline.handler.status.uuid-not-found [\"" + TEST_STATION_UUID + "\"]", description,
+                "Description");
+    }
+
+    @Test
+    void testWrongContent() {
+        String stationContent = FileReader.readFileInString("src/test/resources/stations.json");
+        ContentResponse stationResponse = mock(ContentResponse.class);
+        when(stationResponse.getStatus()).thenReturn(200);
+        when(stationResponse.getContentAsString()).thenReturn(stationContent);
+
+        String content = "{}";
+        ContentResponse measureResponse = mock(ContentResponse.class);
+        when(measureResponse.getStatus()).thenReturn(200);
+        when(measureResponse.getContentAsString()).thenReturn(content);
+
+        HttpClient httpClientMock = mock(HttpClient.class);
+        try {
+            when(httpClientMock.GET(STATIONS_URI + "/" + TEST_STATION_UUID + "/W/currentmeasurement.json"))
+                    .thenReturn(measureResponse);
+            when(httpClientMock.GET(STATIONS_URI)).thenReturn(stationResponse);
+        } catch (InterruptedException | ExecutionException | TimeoutException e) {
+            fail();
+        }
+
+        CallbackMock callback = new CallbackMock();
+        ThingImpl ti = new ThingImpl(new ThingTypeUID("pegelonline:station"), "test");
+        PegelOnlineHandler handler = new PegelOnlineHandler(ti, httpClientMock);
+        Configuration config = new Configuration();
+        config.put("uuid", TEST_STATION_UUID);
+        handler.setCallback(callback);
+        handler.updateConfiguration(config);
+        handler.initialize();
+        handler.performMeasurement();
+        ThingStatusInfo tsi = callback.getThingStatus();
+        assertNotNull(tsi);
+        assertEquals(ThingStatus.OFFLINE, tsi.getStatus(), "Status");
+        assertEquals(ThingStatusDetail.COMMUNICATION_ERROR, tsi.getStatusDetail(), "Detail");
+        String description = tsi.getDescription();
+        assertNotNull(description);
+        assertEquals("@text/pegelonline.handler.status.json-error [\"{}\"]", description, "Description");
+    }
+
+    @Test
+    public void testWrongConfiguration() {
+        CallbackMock callback = new CallbackMock();
+        PegelOnlineHandler handler = getConfiguredHandler(callback, 99);
+
+        Configuration config = new Configuration();
+        config.put("uuid", " ");
+        handler.updateConfiguration(new Configuration(config));
+        handler.initialize();
+
+        ThingStatusInfo tsi = callback.getThingStatus();
+        assertNotNull(tsi);
+        assertEquals(ThingStatus.OFFLINE, tsi.getStatus(), "Status");
+        assertEquals(ThingStatusDetail.CONFIGURATION_ERROR, tsi.getStatusDetail(), "Detail");
+        String description = tsi.getDescription();
+        assertNotNull(description);
+        assertEquals("@text/pegelonline.handler.status.uuid [\" \"]", description, "Description");
+    }
+
+    @Test
+    public void testInconsistentLevels() {
+        CallbackMock callback = new CallbackMock();
+        PegelOnlineHandler handler = getConfiguredHandler(callback, 99);
+
+        Configuration config = new Configuration();
+        config.put("uuid", TEST_STATION_UUID);
+        config.put("warningLevel1", 100);
+        config.put("warningLevel2", 200);
+        config.put("warningLevel3", 150);
+        handler.updateConfiguration(config);
+        handler.initialize();
+
+        ThingStatusInfo tsi = callback.getThingStatus();
+        assertNotNull(tsi);
+        assertEquals(ThingStatus.OFFLINE, tsi.getStatus(), "Status");
+        assertEquals(ThingStatusDetail.CONFIGURATION_ERROR, tsi.getStatusDetail(), "Detail");
+        String description = tsi.getDescription();
+        assertNotNull(description);
+        assertEquals("@text/pegelonline.handler.status.warning", description, "Description");
+
+        handler.dispose();
+        config = new Configuration();
+        config.put("uuid", TEST_STATION_UUID);
+        config.put("warningLevel1", 100);
+        config.put("warningLevel2", 200);
+        config.put("warningLevel3", 300);
+        config.put("hqExtreme", 600);
+        handler.updateConfiguration(new Configuration(config));
+        handler.initialize();
+
+        tsi = callback.getThingStatus();
+        assertNotNull(tsi);
+        assertEquals(ThingStatus.UNKNOWN, tsi.getStatus(), "Status");
+        assertEquals(ThingStatusDetail.NONE, tsi.getStatusDetail(), "Detail");
+        description = tsi.getDescription();
+        assertNotNull(description);
+        assertEquals("@text/pegelonline.handler.status.wait-feedback", description, "Description");
+
+        handler.dispose();
+        config = new Configuration();
+        config.put("uuid", TEST_STATION_UUID);
+        config.put("warningLevel1", 100);
+        config.put("warningLevel2", 200);
+        config.put("warningLevel3", 300);
+        config.put("hq10", 100);
+        config.put("hq100", 200);
+        config.put("hqExtreme", 150);
+        handler.updateConfiguration(new Configuration(config));
+        handler.initialize();
+
+        tsi = callback.getThingStatus();
+        assertNotNull(tsi);
+        assertEquals(ThingStatus.OFFLINE, tsi.getStatus(), "Status");
+        assertEquals(ThingStatusDetail.CONFIGURATION_ERROR, tsi.getStatusDetail(), "Detail");
+        description = tsi.getDescription();
+        assertNotNull(description);
+        assertEquals("@text/pegelonline.handler.status.warning", description, "Description");
+    }
+
+    @Test
+    public void testWrongResponse() {
+        String measureContent = "{}";
+        ContentResponse measureResponse = mock(ContentResponse.class);
+        when(measureResponse.getStatus()).thenReturn(500);
+        when(measureResponse.getContentAsString()).thenReturn(measureContent);
+        HttpClient httpClientMock = mock(HttpClient.class);
+        try {
+            when(httpClientMock.GET(STATIONS_URI + "/" + TEST_STATION_UUID + "/W/currentmeasurement.json"))
+                    .thenReturn(measureResponse);
+        } catch (InterruptedException | ExecutionException | TimeoutException e) {
+            fail();
+        }
+
+        CallbackMock callback = new CallbackMock();
+        ThingImpl ti = new ThingImpl(new ThingTypeUID("pegelonline:station"), "test");
+        PegelOnlineHandler handler = new PegelOnlineHandler(ti, httpClientMock);
+        Configuration config = new Configuration();
+        config.put("uuid", TEST_STATION_UUID);
+        handler.setCallback(callback);
+        handler.updateConfiguration(config);
+        handler.initialize();
+        handler.performMeasurement();
+        ThingStatusInfo tsi = callback.getThingStatus();
+        assertNotNull(tsi);
+        assertEquals(ThingStatus.OFFLINE, tsi.getStatus(), "Status");
+        assertEquals(ThingStatusDetail.COMMUNICATION_ERROR, tsi.getStatusDetail(), "Detail");
+        String description = tsi.getDescription();
+        assertNotNull(description);
+        assertEquals("@text/pegelonline.handler.status.http-status [\"500\"]", description, "Description");
+    }
+
+    @Test
+    public void testWarnings() {
+        CallbackMock callback = new CallbackMock();
+        PegelOnlineHandler handler = getConfiguredHandler(callback, 99);
+        handler.initialize();
+        handler.performMeasurement();
+        State state = callback.getState("pegelonline:station:test:warning");
+        assertTrue(state instanceof DecimalType);
+        assertEquals(NO_WARNING, ((DecimalType) state).intValue(), "No warning");
+
+        handler = getConfiguredHandler(callback, 100);
+        handler.initialize();
+        handler.performMeasurement();
+        state = callback.getState("pegelonline:station:test:warning");
+        assertTrue(state instanceof DecimalType);
+        assertEquals(WARN_LEVEL_1, ((DecimalType) state).intValue(), "Warn Level 1");
+
+        handler = getConfiguredHandler(callback, 299);
+        handler.initialize();
+        handler.performMeasurement();
+        state = callback.getState("pegelonline:station:test:warning");
+        assertTrue(state instanceof DecimalType);
+        assertEquals(WARN_LEVEL_2, ((DecimalType) state).intValue(), "Warn Level 2");
+
+        handler = getConfiguredHandler(callback, 1000);
+        handler.initialize();
+        handler.performMeasurement();
+        state = callback.getState("pegelonline:station:test:warning");
+        assertTrue(state instanceof DecimalType);
+        assertEquals(HQ_EXTREME, ((DecimalType) state).intValue(), "HQ extreme");
+    }
+
+    private PegelOnlineHandler getConfiguredHandler(CallbackMock callback, int levelSimulation) {
+        String stationContent = FileReader.readFileInString("src/test/resources/stations.json");
+        ContentResponse stationResponse = mock(ContentResponse.class);
+        when(stationResponse.getStatus()).thenReturn(200);
+        when(stationResponse.getContentAsString()).thenReturn(stationContent);
+
+        String measureContent = "{  \"timestamp\": \"2021-08-01T16:00:00+02:00\",  \"value\": " + levelSimulation
+                + ",  \"trend\": -1}";
+        ContentResponse measureResponse = mock(ContentResponse.class);
+        when(measureResponse.getStatus()).thenReturn(200);
+        when(measureResponse.getContentAsString()).thenReturn(measureContent);
+        HttpClient httpClientMock = mock(HttpClient.class);
+        try {
+            when(httpClientMock.GET(STATIONS_URI + "/" + TEST_STATION_UUID + "/W/currentmeasurement.json"))
+                    .thenReturn(measureResponse);
+            when(httpClientMock.GET(STATIONS_URI)).thenReturn(stationResponse);
+        } catch (InterruptedException | ExecutionException | TimeoutException e) {
+            fail();
+        }
+
+        ThingImpl ti = new ThingImpl(new ThingTypeUID("pegelonline:station"), "test");
+        PegelOnlineHandler handler = new PegelOnlineHandler(ti, httpClientMock);
+        Configuration config = new Configuration();
+        config.put("uuid", TEST_STATION_UUID);
+        config.put("warningLevel1", 100);
+        config.put("warningLevel2", 200);
+        config.put("warningLevel3", 300);
+        config.put("hq10", 400);
+        config.put("hq100", 500);
+        config.put("hqExtreme", 600);
+        handler.setCallback(callback);
+        handler.updateConfiguration(config);
+        return handler;
+    }
+}
diff --git a/bundles/org.openhab.binding.pegelonline/src/test/java/org/openhab/binding/pegelonline/internal/util/FileReader.java b/bundles/org.openhab.binding.pegelonline/src/test/java/org/openhab/binding/pegelonline/internal/util/FileReader.java
new file mode 100644 (file)
index 0000000..7888d75
--- /dev/null
@@ -0,0 +1,48 @@
+/**
+ * Copyright (c) 2010-2024 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.pegelonline.internal.util;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.openhab.binding.pegelonline.internal.PegelOnlineBindingConstants;
+
+/**
+ * The {@link FileReader} Helper Util to read test resource files
+ *
+ * @author Bernd Weymann - Initial contribution
+ */
+@NonNullByDefault
+public class FileReader {
+
+    public static String readFileInString(String filename) {
+        try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filename), "UTF-8"));) {
+            StringBuilder buf = new StringBuilder();
+            String sCurrentLine;
+
+            while ((sCurrentLine = br.readLine()) != null) {
+                buf.append(sCurrentLine);
+            }
+            return buf.toString();
+        } catch (IOException e) {
+            // fail if file cannot be read
+            assertTrue(false, e.getMessage());
+        }
+        return PegelOnlineBindingConstants.UNKNOWN;
+    }
+}
diff --git a/bundles/org.openhab.binding.pegelonline/src/test/resources/measure.json b/bundles/org.openhab.binding.pegelonline/src/test/resources/measure.json
new file mode 100644 (file)
index 0000000..cf2c821
--- /dev/null
@@ -0,0 +1,7 @@
+{
+  "timestamp": "2021-08-01T16:00:00+02:00",
+  "value": 238.0,
+  "trend": -1,
+  "stateMnwMhw": "normal",
+  "stateNswHsw": "unknown"
+}
\ No newline at end of file
diff --git a/bundles/org.openhab.binding.pegelonline/src/test/resources/rivers.json b/bundles/org.openhab.binding.pegelonline/src/test/resources/rivers.json
new file mode 100644 (file)
index 0000000..0f26a8f
--- /dev/null
@@ -0,0 +1,100 @@
+[
+  {
+    "uuid": "4e7a6cfa-7548-4f7f-a97a-eb0694881003",
+    "number": "25830056",
+    "shortname": "Marburg",
+    "longname": "MARBURG",
+    "km": -38.7,
+    "agency": "REGIERUNGSPRÄSIDIUM GIESSEN ABTEILUNG STAATLICHES UMWELTAMT MARBURG",
+    "longitude": 8.764488839485487,
+    "latitude": 50.798715477809225,
+    "water": {
+      "shortname": "LAHN",
+      "longname": "LAHN"
+    }
+  },
+  {
+    "uuid": "4b386a6a-996e-4a4a-a440-15d6b40226d4",
+    "number": "25800100",
+    "shortname": "GIESSEN KLÄRWERK",
+    "longname": "GIESSEN KLÄRWERK",
+    "km": -3.21,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 8.64860169166119,
+    "latitude": 50.575037651225514,
+    "water": {
+      "shortname": "LAHN",
+      "longname": "LAHN"
+    }
+  },
+  {
+    "uuid": "32807065-b887-49f0-935a-80033e5f3cb0",
+    "number": "25800200",
+    "shortname": "LEUN NEU",
+    "longname": "LEUN NEU",
+    "km": 25.1,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 8.355230130810975,
+    "latitude": 50.545120232764674,
+    "water": {
+      "shortname": "LAHN",
+      "longname": "LAHN"
+    }
+  },
+  {
+    "uuid": "89038b42-8181-48df-a0cd-2ca3913f2d68",
+    "number": "25800440",
+    "shortname": "LIMBURG SCHLEUSE UP",
+    "longname": "LIMBURG SCHLEUSE UP",
+    "km": 76.611,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 8.065188851061134,
+    "latitude": 50.39151276997554,
+    "water": {
+      "shortname": "LAHN",
+      "longname": "LAHN"
+    }
+  },
+  {
+    "uuid": "eadedeb6-c31e-483f-b6c4-ca0153359ad7",
+    "number": "25800500",
+    "shortname": "DIEZ HAFEN",
+    "longname": "DIEZ HAFEN",
+    "km": 83.7,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 8.005066992072132,
+    "latitude": 50.3723880903084,
+    "water": {
+      "shortname": "LAHN",
+      "longname": "LAHN"
+    }
+  },
+  {
+    "uuid": "64f735fd-88b6-42ea-9cdd-dc18d3806c34",
+    "number": "25800600",
+    "shortname": "KALKOFEN NEU",
+    "longname": "KALKOFEN NEU",
+    "km": 106.4,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 7.8898156192725235,
+    "latitude": 50.31783177830708,
+    "water": {
+      "shortname": "LAHN",
+      "longname": "LAHN"
+    }
+  },
+  {
+    "uuid": "6b6b31e2-e5c7-4c85-8405-b8d0b6e158c4",
+    "number": "25800800",
+    "shortname": "LAHNSTEIN SCHLEUSE UP",
+    "longname": "LAHNSTEIN SCHLEUSE UP",
+    "km": 135.986,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 7.612956624441373,
+    "latitude": 50.30803174924558,
+    "water": {
+      "shortname": "LAHN",
+      "longname": "LAHN"
+    }
+  }
+]
\ No newline at end of file
diff --git a/bundles/org.openhab.binding.pegelonline/src/test/resources/stations.json b/bundles/org.openhab.binding.pegelonline/src/test/resources/stations.json
new file mode 100644 (file)
index 0000000..f48c81a
--- /dev/null
@@ -0,0 +1,9381 @@
+[
+  {
+    "uuid": "47174d8f-1b8e-4599-8a59-b580dd55bc87",
+    "number": "48900237",
+    "shortname": "EITZE",
+    "longname": "EITZE",
+    "km": 9.56,
+    "agency": "WSA VERDEN",
+    "longitude": 9.27676943537587,
+    "latitude": 52.90406541008721,
+    "water": {
+      "shortname": "ALLER",
+      "longname": "ALLER"
+    }
+  },
+  {
+    "uuid": "5aaed954-de4e-4528-8f65-f3f530bc8325",
+    "number": "48900204",
+    "shortname": "RETHEM",
+    "longname": "RETHEM",
+    "km": 34.22,
+    "agency": "WSA VERDEN",
+    "longitude": 9.382840810129357,
+    "latitude": 52.78909755467678,
+    "water": {
+      "shortname": "ALLER",
+      "longname": "ALLER"
+    }
+  },
+  {
+    "uuid": "522286e2-b2b3-4d0d-9a11-01b3ea418c76",
+    "number": "48900102",
+    "shortname": "AHLDEN",
+    "longname": "AHLDEN",
+    "km": 57.92,
+    "agency": "WSA VERDEN",
+    "longitude": 9.570880730005372,
+    "latitude": 52.76243123735362,
+    "water": {
+      "shortname": "ALLER",
+      "longname": "ALLER"
+    }
+  },
+  {
+    "uuid": "8b4f9f7c-3376-4dd8-95c1-de55b1be4dfd",
+    "number": "48700103",
+    "shortname": "MARKLENDORF",
+    "longname": "MARKLENDORF",
+    "km": 75.91,
+    "agency": "WSA VERDEN",
+    "longitude": 9.703455757318089,
+    "latitude": 52.68275723511432,
+    "water": {
+      "shortname": "ALLER",
+      "longname": "ALLER"
+    }
+  },
+  {
+    "uuid": "b475386c-30cc-453a-b3b7-1d17ace13595",
+    "number": "48300105",
+    "shortname": "CELLE",
+    "longname": "CELLE",
+    "km": 111.55,
+    "agency": "WSA VERDEN",
+    "longitude": 10.062164093638698,
+    "latitude": 52.62270549447987,
+    "water": {
+      "shortname": "ALLER",
+      "longname": "ALLER"
+    }
+  },
+  {
+    "uuid": "ee52ce62-212c-4735-b438-26fbdc37e3e2",
+    "number": "586640",
+    "shortname": "BERLIN-PLOETZENSEE OP",
+    "longname": "BERLIN-PLOETZENSEE OP",
+    "km": 7.41,
+    "agency": "WSA BERLIN",
+    "longitude": 13.32314190907983,
+    "latitude": 52.54369958358309,
+    "water": {
+      "shortname": "BSK",
+      "longname": "BERLIN-SPANDAUER-SCHIFFFAHRTSKANAL"
+    }
+  },
+  {
+    "uuid": "45721a68-566c-4e2a-a6c7-a7595982a779",
+    "number": "586650",
+    "shortname": "BERLIN-PLOETZENSEE UP",
+    "longname": "BERLIN-PLOETZENSEE UP",
+    "km": 7.5,
+    "agency": "WSA BERLIN",
+    "longitude": 13.323858970566246,
+    "latitude": 52.54303550696079,
+    "water": {
+      "shortname": "BSK",
+      "longname": "BERLIN-SPANDAUER-SCHIFFFAHRTSKANAL"
+    }
+  },
+  {
+    "uuid": "aa9179c1-17ef-4c61-a48a-74193fa7bfdf",
+    "number": "906",
+    "shortname": "KONSTANZ",
+    "longname": "KONSTANZ",
+    "km": 0.0,
+    "agency": "REGIERUNGSPRÄSIDIUM FREIBURG",
+    "longitude": 9.181039087954112,
+    "latitude": 47.660750098681156,
+    "water": {
+      "shortname": "BODENSEE",
+      "longname": "BODENSEE"
+    }
+  },
+  {
+    "uuid": "28ec91e8-90c0-44d1-8fd2-b0b64c00c43b",
+    "number": "126013",
+    "shortname": "ABBENFLETH SPERRWERK",
+    "longname": "ABBENFLETH SPERRWERK",
+    "km": 2.95,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.494306874416917,
+    "latitude": 53.66896299867038,
+    "water": {
+      "shortname": "Bützflether Süderelbe",
+      "longname": "BÜTZFLETHER SÜDERELBE"
+    }
+  },
+  {
+    "uuid": "6b595707-8c47-4bc7-a803-dbc327775c26",
+    "number": "586810",
+    "shortname": "BERLIN-SCHMOECKWITZ",
+    "longname": "BERLIN-SCHMOECKWITZ",
+    "km": 0.28,
+    "agency": "WSA BERLIN",
+    "longitude": 13.653581054978613,
+    "latitude": 52.3743981024444,
+    "water": {
+      "shortname": "DAW",
+      "longname": "DAHME-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "c9a6c3bf-02d4-4945-83e8-b7c6cf9701fa",
+    "number": "586280",
+    "shortname": "NEUE MÜHLE SCHLEUSE UP",
+    "longname": "NEUE MÜHLE SCHLEUSE UP",
+    "km": 9.4,
+    "agency": "WSA BERLIN",
+    "longitude": 13.649641346289084,
+    "latitude": 52.2974746382713,
+    "water": {
+      "shortname": "DAW",
+      "longname": "DAHME-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "0e0dbcc9-0a7d-494a-bc92-52e56a7fffe2",
+    "number": "586270",
+    "shortname": "NEUE MÜHLE SCHLEUSE OP",
+    "longname": "NEUE MÜHLE SCHLEUSE OP",
+    "km": 9.56,
+    "agency": "WSA BERLIN",
+    "longitude": 13.651757595446602,
+    "latitude": 52.296815768340494,
+    "water": {
+      "shortname": "DAW",
+      "longname": "DAHME-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "facc5c16-f700-4248-9893-a395bffaf2e4",
+    "number": "27800090",
+    "shortname": "WALTROP",
+    "longname": "WALTROP",
+    "km": 2.144,
+    "agency": "WSA RHEINE",
+    "longitude": 7.380201417969081,
+    "latitude": 51.639741266643966,
+    "water": {
+      "shortname": "DHK",
+      "longname": "DATTELN-HAMM-KANAL"
+    }
+  },
+  {
+    "uuid": "4ef9dd9c-b32b-43fc-bc5e-3849d4ab7ecc",
+    "number": "27800080",
+    "shortname": "HAMM UW",
+    "longname": "HAMM UW",
+    "km": 36.59,
+    "agency": "WSA RHEINE",
+    "longitude": 7.8157886355655055,
+    "latitude": 51.684812401946154,
+    "water": {
+      "shortname": "DHK",
+      "longname": "DATTELN-HAMM-KANAL"
+    }
+  },
+  {
+    "uuid": "4dbce62d-a015-4011-afcd-423bb8d4b7a1",
+    "number": "27800060",
+    "shortname": "HAMM OW",
+    "longname": "HAMM OW",
+    "km": 38.72,
+    "agency": "WSA RHEINE",
+    "longitude": 7.842759417458165,
+    "latitude": 51.69378170588779,
+    "water": {
+      "shortname": "DHK",
+      "longname": "DATTELN-HAMM-KANAL"
+    }
+  },
+  {
+    "uuid": "d31767ef-2cf8-4046-9881-d5651d81ade8",
+    "number": "27800050",
+    "shortname": "WERRIES OW",
+    "longname": "WERRIES OW",
+    "km": 40.611,
+    "agency": "WSA RHEINE",
+    "longitude": 7.870045686711512,
+    "latitude": 51.69515274731866,
+    "water": {
+      "shortname": "DHK",
+      "longname": "DATTELN-HAMM-KANAL"
+    }
+  },
+  {
+    "uuid": "33092c28-201a-4210-89c9-ce68cad61ed1",
+    "number": "44100206",
+    "shortname": "HELMINGHAUSEN",
+    "longname": "HELMINGHAUSEN",
+    "km": 90.0,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 8.730780201102268,
+    "latitude": 51.3814751905412,
+    "water": {
+      "shortname": "DIEMEL",
+      "longname": "DIEMEL"
+    }
+  },
+  {
+    "uuid": "5cdc6555-87d7-4fcd-834d-cbbe24c9d08b",
+    "number": "44100104",
+    "shortname": "DIEMELTALSPERRE",
+    "longname": "DIEMELTALSPERRE",
+    "km": 90.6,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 8.728647958229969,
+    "latitude": 51.37769518366961,
+    "water": {
+      "shortname": "DIEMEL",
+      "longname": "DIEMEL"
+    }
+  },
+  {
+    "uuid": "7deedc21-2878-40cc-ab47-f6da0d9002f1",
+    "number": "44100024",
+    "shortname": "WILHELMSBRÜCKE",
+    "longname": "WILHELMSBRÜCKE",
+    "km": 97.4,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 8.723953002325766,
+    "latitude": 51.34631485945018,
+    "water": {
+      "shortname": "DIEMEL",
+      "longname": "DIEMEL"
+    }
+  },
+  {
+    "uuid": "99619dc5-9c88-45e9-a97d-653c41cda8a1",
+    "number": "10096001",
+    "shortname": "ERLAU",
+    "longname": "ERLAU",
+    "km": 2214.51,
+    "agency": "WSA REGENSBURG",
+    "longitude": 13.586857356936074,
+    "latitude": 48.56736670179466,
+    "water": {
+      "shortname": "DONAU",
+      "longname": "DONAU"
+    }
+  },
+  {
+    "uuid": "c389c9e2-a5d8-4104-a4cf-510ade44f143",
+    "number": "10094006",
+    "shortname": "ACHLEITEN",
+    "longname": "ACHLEITEN",
+    "km": 2223.05,
+    "agency": "VIA DONAU - ÖSTERREICHISCHE WASSERSTRASSEN-GESELLSCHAFT MBH",
+    "longitude": 13.503184735677362,
+    "latitude": 48.58204677038562,
+    "water": {
+      "shortname": "DONAU",
+      "longname": "DONAU"
+    }
+  },
+  {
+    "uuid": "33ceb441-23bc-4ca6-9fcd-ac35d41ef117",
+    "number": "10092000",
+    "shortname": "PASSAU ILZSTADT",
+    "longname": "PASSAU ILZSTADT",
+    "km": 2225.25,
+    "agency": "WSA REGENSBURG",
+    "longitude": 13.478019136458602,
+    "latitude": 48.575208623171456,
+    "water": {
+      "shortname": "DONAU",
+      "longname": "DONAU"
+    }
+  },
+  {
+    "uuid": "4520c1a8-174c-4b95-9ca3-fe1e3f9d874a",
+    "number": "10091013",
+    "shortname": "PASSAU LUITPOLDBRÜCKE DFH",
+    "longname": "PASSAU LUITPOLDBRÜCKE DFH",
+    "km": 2225.75,
+    "agency": "WSA REGENSBURG",
+    "longitude": 13.472832549818259,
+    "latitude": 48.57583526499114,
+    "water": {
+      "shortname": "DONAU",
+      "longname": "DONAU"
+    }
+  },
+  {
+    "uuid": "9f12c405-35ac-4d90-9b7b-023be355867e",
+    "number": "10091008",
+    "shortname": "PASSAU DONAU",
+    "longname": "PASSAU DONAU",
+    "km": 2226.7,
+    "agency": "WSA REGENSBURG",
+    "longitude": 13.459076672254577,
+    "latitude": 48.57612011844346,
+    "water": {
+      "shortname": "DONAU",
+      "longname": "DONAU"
+    }
+  },
+  {
+    "uuid": "3199ce09-cd9b-4be2-82bc-f03bb81438e5",
+    "number": "10090710",
+    "shortname": "PASSAU STEINBACHBRÜCKE DFH",
+    "longname": "PASSAU STEINBACHBRÜCKE DFH",
+    "km": 2230.31,
+    "agency": "WSA REGENSBURG",
+    "longitude": 13.475461520306283,
+    "latitude": 48.57566991908354,
+    "water": {
+      "shortname": "DONAU",
+      "longname": "DONAU"
+    }
+  },
+  {
+    "uuid": "0fd56e0a-e32e-4b56-9cda-e0ce93d715c4",
+    "number": "10090708",
+    "shortname": "KACHLET UP",
+    "longname": "KACHLET UP",
+    "km": 2230.32,
+    "agency": "WSA REGENSBURG",
+    "longitude": 13.41078588341841,
+    "latitude": 48.57855473136858,
+    "water": {
+      "shortname": "DONAU",
+      "longname": "DONAU"
+    }
+  },
+  {
+    "uuid": "560cf185-0052-4e40-832b-7792b52dd343",
+    "number": "10090408",
+    "shortname": "KACHLET WEHR UP",
+    "longname": "KACHLET WEHR UP",
+    "km": 2230.724,
+    "agency": "WSA REGENSBURG",
+    "water": {
+      "shortname": "DONAU",
+      "longname": "DONAU"
+    }
+  },
+  {
+    "uuid": "e6d68ab7-5c27-4f25-896f-11dbf04056cd",
+    "number": "10089006",
+    "shortname": "VILSHOFEN",
+    "longname": "VILSHOFEN",
+    "km": 2249.47,
+    "agency": "WSA REGENSBURG",
+    "longitude": 13.182358222269338,
+    "latitude": 48.637199594501034,
+    "water": {
+      "shortname": "DONAU",
+      "longname": "DONAU"
+    }
+  },
+  {
+    "uuid": "616dd98e-816d-4e17-b8cd-57b163dbc8a2",
+    "number": "10088003",
+    "shortname": "HOFKIRCHEN",
+    "longname": "HOFKIRCHEN",
+    "km": 2256.86,
+    "agency": "WSA REGENSBURG",
+    "longitude": 13.115160271464772,
+    "latitude": 48.67663176781114,
+    "water": {
+      "shortname": "DONAU",
+      "longname": "DONAU"
+    }
+  },
+  {
+    "uuid": "53d40547-8a09-4b25-988c-2e6d8d8d98ee",
+    "number": "10081004",
+    "shortname": "DEGGENDORF",
+    "longname": "DEGGENDORF",
+    "km": 2284.44,
+    "agency": "WSA REGENSBURG",
+    "longitude": 12.962349998942592,
+    "latitude": 48.824932569913784,
+    "water": {
+      "shortname": "DONAU",
+      "longname": "DONAU"
+    }
+  },
+  {
+    "uuid": "7fe63a95-8ff6-4cff-9a29-a124136516b5",
+    "number": "10078000",
+    "shortname": "PFELLING",
+    "longname": "PFELLING",
+    "km": 2305.53,
+    "agency": "WSA REGENSBURG",
+    "longitude": 12.747330153374985,
+    "latitude": 48.87984985609091,
+    "water": {
+      "shortname": "DONAU",
+      "longname": "DONAU"
+    }
+  },
+  {
+    "uuid": "f768173a-7a22-40f7-90a3-4676da7e5010",
+    "number": "10068006",
+    "shortname": "PFATTER",
+    "longname": "PFATTER",
+    "km": 2350.69,
+    "agency": "WSA REGENSBURG",
+    "longitude": 12.383769252011401,
+    "latitude": 48.98045247487973,
+    "water": {
+      "shortname": "DONAU",
+      "longname": "DONAU"
+    }
+  },
+  {
+    "uuid": "7644f1d7-3198-4313-9340-abefd459a4f3",
+    "number": "10062000",
+    "shortname": "SCHWABELWEIS",
+    "longname": "SCHWABELWEIS",
+    "km": 2376.49,
+    "agency": "WSA REGENSBURG",
+    "longitude": 12.13868286367361,
+    "latitude": 49.02359432882008,
+    "water": {
+      "shortname": "DONAU",
+      "longname": "DONAU"
+    }
+  },
+  {
+    "uuid": "eebd633a-3af0-4b79-83d5-b6490765e06c",
+    "number": "10061007",
+    "shortname": "EISERNE BRÜCKE",
+    "longname": "EISERNE BRÜCKE",
+    "km": 2379.27,
+    "agency": "WSA REGENSBURG",
+    "longitude": 12.101838366417141,
+    "latitude": 49.02137883980302,
+    "water": {
+      "shortname": "DONAU",
+      "longname": "DONAU"
+    }
+  },
+  {
+    "uuid": "e476bcad-b898-4f68-9c26-4f1a1159dff6",
+    "number": "10056302",
+    "shortname": "OBERNDORF",
+    "longname": "OBERNDORF",
+    "km": 2397.38,
+    "agency": "WSA REGENSBURG",
+    "longitude": 12.014757615398487,
+    "latitude": 48.94685787976606,
+    "water": {
+      "shortname": "DONAU",
+      "longname": "DONAU"
+    }
+  },
+  {
+    "uuid": "c9409937-b794-4b69-b36b-38467daab09a",
+    "number": "10054500",
+    "shortname": "KELHEIMWINZER",
+    "longname": "KELHEIMWINZER",
+    "km": 2409.7,
+    "agency": "WSA REGENSBURG",
+    "longitude": 11.932078963881246,
+    "latitude": 48.91185866862933,
+    "water": {
+      "shortname": "DONAU",
+      "longname": "DONAU"
+    }
+  },
+  {
+    "uuid": "824a046b-9ca3-4db8-993d-e755122854e0",
+    "number": "10046105",
+    "shortname": "INGOLSTADT LUITPOLDSTRASSE",
+    "longname": "INGOLSTADT LUITPOLDSTRASSE",
+    "km": 2458.3,
+    "agency": "WASSERWIRTSCHAFTSAMT INGOLSTADT",
+    "longitude": 11.426054133096121,
+    "latitude": 48.75741413624857,
+    "water": {
+      "shortname": "DONAU",
+      "longname": "DONAU"
+    }
+  },
+  {
+    "uuid": "70bee932-1c14-42f8-b4df-9a85589ca80e",
+    "number": "27700111",
+    "shortname": "HENRICHENBURG OW",
+    "longname": "HENRICHENBURG OW",
+    "km": 14.3,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 7.339002440622217,
+    "latitude": 51.61604683260784,
+    "water": {
+      "shortname": "DEK",
+      "longname": "DORTMUND-EMS-KANAL"
+    }
+  },
+  {
+    "uuid": "e6b68bc2-6814-4bbf-b37e-44a0b7807c2d",
+    "number": "27700133",
+    "shortname": "HENRICHENBURG UW",
+    "longname": "HENRICHENBURG UW",
+    "km": 15.9,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 7.32942536471659,
+    "latitude": 51.62111782997715,
+    "water": {
+      "shortname": "DEK",
+      "longname": "DORTMUND-EMS-KANAL"
+    }
+  },
+  {
+    "uuid": "f5bc4a51-004f-4e5e-99b9-e6ae888d57de",
+    "number": "27800020",
+    "shortname": "LÜDINGHAUSEN",
+    "longname": "LÜDINGHAUSEN",
+    "km": 39.32,
+    "agency": "WSA RHEINE",
+    "longitude": 7.401947345930443,
+    "latitude": 51.798112678551554,
+    "water": {
+      "shortname": "DEK",
+      "longname": "DORTMUND-EMS-KANAL"
+    }
+  },
+  {
+    "uuid": "ccd3e8f1-39e9-4e09-aa41-625afda84460",
+    "number": "27800040",
+    "shortname": "MÜNSTER OW",
+    "longname": "MÜNSTER OW",
+    "km": 70.315,
+    "agency": "WSA RHEINE",
+    "longitude": 7.664374042081728,
+    "latitude": 51.96894192140413,
+    "water": {
+      "shortname": "DEK",
+      "longname": "DORTMUND-EMS-KANAL"
+    }
+  },
+  {
+    "uuid": "ed260406-bdd6-42ef-bf2a-1246eea392f9",
+    "number": "27800030",
+    "shortname": "MÜNSTER UW",
+    "longname": "MÜNSTER UW",
+    "km": 72.49,
+    "agency": "WSA RHEINE",
+    "longitude": 7.660129217739214,
+    "latitude": 51.9871250324716,
+    "water": {
+      "shortname": "DEK",
+      "longname": "DORTMUND-EMS-KANAL"
+    }
+  },
+  {
+    "uuid": "ade3a084-8680-47b5-9d2e-288cb6c5f9d5",
+    "number": "34000010",
+    "shortname": "BERGESHÖVEDE",
+    "longname": "BERGESHÖVEDE",
+    "km": 108.26,
+    "agency": "WSA RHEINE",
+    "longitude": 7.60495826627035,
+    "latitude": 52.27585261525862,
+    "water": {
+      "shortname": "DEK",
+      "longname": "DORTMUND-EMS-KANAL"
+    }
+  },
+  {
+    "uuid": "04572010-1db2-4338-8562-b3dca5e715c5",
+    "number": "3690010",
+    "shortname": "HASEHUBBRÜCKE",
+    "longname": "HASEHUBBRÜCKE",
+    "km": 166.42,
+    "agency": "WSA MEPPEN",
+    "longitude": 7.292912281272764,
+    "latitude": 52.69419096026676,
+    "water": {
+      "shortname": "DEK",
+      "longname": "DORTMUND-EMS-KANAL"
+    }
+  },
+  {
+    "uuid": "8177a148-5674-4b8f-8ded-050907f640f3",
+    "number": "3770030",
+    "shortname": "HERBRUM HAFENDAMM",
+    "longname": "HERBRUM HAFENDAMM",
+    "km": 213.07,
+    "agency": "WSA MEPPEN",
+    "longitude": 7.317135433826929,
+    "latitude": 53.04191531444477,
+    "water": {
+      "shortname": "DEK",
+      "longname": "DORTMUND-EMS-KANAL"
+    }
+  },
+  {
+    "uuid": "16508b11-4349-48f7-be51-1227b7888585",
+    "number": "3770040",
+    "shortname": "RHEDE",
+    "longname": "RHEDE",
+    "km": 217.86,
+    "agency": "WSA MEPPEN",
+    "longitude": 7.286979017850521,
+    "latitude": 53.07241788394306,
+    "water": {
+      "shortname": "DEK",
+      "longname": "DORTMUND-EMS-KANAL"
+    }
+  },
+  {
+    "uuid": "e1217d07-91f8-4019-b3a2-0c0d69316ab8",
+    "number": "2130154610",
+    "shortname": "GW-PWDRFP 02",
+    "longname": "GW-PWDRFP 02",
+    "km": 11.94,
+    "agency": "WSA BRUNSBÜTTEL",
+    "longitude": 9.262888663124173,
+    "latitude": 53.9572369939967,
+    "water": {
+      "shortname": "DYHRSSENMOOR",
+      "longname": "DYHRSSENMOOR"
+    }
+  },
+  {
+    "uuid": "4a4daad2-0e96-4070-914e-a1c4f6b7a3e5",
+    "number": "1130154610",
+    "shortname": "GW-PWDRFP 01",
+    "longname": "GW-PWDRFP 01",
+    "km": 12.03,
+    "agency": "WSA BRUNSBÜTTEL",
+    "longitude": 9.260387081801174,
+    "latitude": 53.95940617253433,
+    "water": {
+      "shortname": "DYHRSSENMOOR",
+      "longname": "DYHRSSENMOOR"
+    }
+  },
+  {
+    "uuid": "bc9f369e-5fd4-466c-8d97-ddb1ecd2aed2",
+    "number": "8130154610",
+    "shortname": "GW-PWDRFP 08",
+    "longname": "GW-PWDRFP 08",
+    "km": 12.45,
+    "agency": "WSA BRUNSBÜTTEL",
+    "longitude": 9.265026101191742,
+    "latitude": 53.96211864218393,
+    "water": {
+      "shortname": "DYHRSSENMOOR",
+      "longname": "DYHRSSENMOOR"
+    }
+  },
+  {
+    "uuid": "6cb287c2-2fb2-4845-b11f-e78bd5db2ce3",
+    "number": "3130154610",
+    "shortname": "GW-PWDRFP 03",
+    "longname": "GW-PWDRFP 03",
+    "km": 12.49,
+    "agency": "WSA BRUNSBÜTTEL",
+    "longitude": 9.268645473763716,
+    "latitude": 53.96081287595425,
+    "water": {
+      "shortname": "DYHRSSENMOOR",
+      "longname": "DYHRSSENMOOR"
+    }
+  },
+  {
+    "uuid": "18216ff8-18aa-4a71-bd32-e7479ccc439d",
+    "number": "9130154610",
+    "shortname": "GW-PWDRFP 09",
+    "longname": "GW-PWDRFP 09",
+    "km": 12.73,
+    "agency": "WSA BRUNSBÜTTEL",
+    "longitude": 9.267517071045393,
+    "latitude": 53.96419551601779,
+    "water": {
+      "shortname": "DYHRSSENMOOR",
+      "longname": "DYHRSSENMOOR"
+    }
+  },
+  {
+    "uuid": "6e19aeca-d37a-4b00-9354-c6dd90f12de2",
+    "number": "4130154610",
+    "shortname": "GW-PWDRFP 04",
+    "longname": "GW-PWDRFP 04",
+    "km": 13.0,
+    "agency": "WSA BRUNSBÜTTEL",
+    "longitude": 9.276800135485715,
+    "latitude": 53.96278185572357,
+    "water": {
+      "shortname": "DYHRSSENMOOR",
+      "longname": "DYHRSSENMOOR"
+    }
+  },
+  {
+    "uuid": "69fc0432-e9dc-400c-8c21-0c26e85df884",
+    "number": "6130154610",
+    "shortname": "GW-PWDRFP 06",
+    "longname": "GW-PWDRFP 06",
+    "km": 13.31,
+    "agency": "WSA BRUNSBÜTTEL",
+    "longitude": 9.27218333697518,
+    "latitude": 53.968640829454415,
+    "water": {
+      "shortname": "DYHRSSENMOOR",
+      "longname": "DYHRSSENMOOR"
+    }
+  },
+  {
+    "uuid": "a1341b43-9c62-4e71-87cc-61a0d4d1b105",
+    "number": "5130154610",
+    "shortname": "GW-PWDRFP 05",
+    "longname": "GW-PWDRFP 05",
+    "km": 13.41,
+    "agency": "WSA BRUNSBÜTTEL",
+    "longitude": 9.275973783528286,
+    "latitude": 53.96794404784011,
+    "water": {
+      "shortname": "DYHRSSENMOOR",
+      "longname": "DYHRSSENMOOR"
+    }
+  },
+  {
+    "uuid": "f6dc9514-bdaf-4817-b3bf-34cd4b5c3e18",
+    "number": "7130154610",
+    "shortname": "GW-PWDRFP 07",
+    "longname": "GW-PWDRFP 07",
+    "km": 13.86,
+    "agency": "WSA BRUNSBÜTTEL",
+    "longitude": 9.275959434151838,
+    "latitude": 53.97311783991779,
+    "water": {
+      "shortname": "DYHRSSENMOOR",
+      "longname": "DYHRSSENMOOR"
+    }
+  },
+  {
+    "uuid": "ab9d5a42-2b8d-491b-9fd1-8120df23c8e6",
+    "number": "42800502",
+    "shortname": "AFFOLDERN",
+    "longname": "AFFOLDERN",
+    "km": 44.02,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 9.084726303618204,
+    "latitude": 51.164140826669616,
+    "water": {
+      "shortname": "EDER",
+      "longname": "EDER"
+    }
+  },
+  {
+    "uuid": "c6e9f744-4dbf-4e8e-a219-cab051ec610c",
+    "number": "42800310",
+    "shortname": "EDERTALSPERRE",
+    "longname": "EDERTALSPERRE",
+    "km": 49.2,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 9.058927535521473,
+    "latitude": 51.18404001559913,
+    "water": {
+      "shortname": "EDER",
+      "longname": "EDER"
+    }
+  },
+  {
+    "uuid": "d2155fa6-b03d-468c-884e-ccf6fefc40bd",
+    "number": "42800309",
+    "shortname": "SCHMITTLOTHEIM",
+    "longname": "SCHMITTLOTHEIM",
+    "km": 74.5,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 8.899212377819229,
+    "latitude": 51.156952649485866,
+    "water": {
+      "shortname": "EDER",
+      "longname": "EDER"
+    }
+  },
+  {
+    "uuid": "86c5688f-2fac-4d58-a245-ad8ce14cafbf",
+    "number": "9520020",
+    "shortname": "LEXFÄHRE OBERWASSER",
+    "longname": "LEXFÄHRE OBERWASSER",
+    "km": 26.09,
+    "agency": "WSA TÖNNING",
+    "longitude": 9.436143069928907,
+    "latitude": 54.222472083209574,
+    "water": {
+      "shortname": "EIDER",
+      "longname": "EIDER"
+    }
+  },
+  {
+    "uuid": "7f01fbd8-653c-40ba-8ed0-57386a9b4557",
+    "number": "9520030",
+    "shortname": "LEXFÄHRE UNTERWASSER",
+    "longname": "LEXFÄHRE UNTERWASSER",
+    "km": 26.09,
+    "agency": "WSA TÖNNING",
+    "longitude": 9.43567567190707,
+    "latitude": 54.22321945463886,
+    "water": {
+      "shortname": "EIDER",
+      "longname": "EIDER"
+    }
+  },
+  {
+    "uuid": "61394669-3f1b-44e5-ae37-50fd2512f4fa",
+    "number": "9520040",
+    "shortname": "NORDFELD OBERWASSER",
+    "longname": "NORDFELD OBERWASSER",
+    "km": 78.19,
+    "agency": "WSA TÖNNING",
+    "longitude": 9.139643467419782,
+    "latitude": 54.33873307277425,
+    "water": {
+      "shortname": "EIDER",
+      "longname": "EIDER"
+    }
+  },
+  {
+    "uuid": "cb93548e-c1ce-43f6-b3a1-6903f8835b33",
+    "number": "9520050",
+    "shortname": "NORDFELD UNTERWASSER",
+    "longname": "NORDFELD UNTERWASSER",
+    "km": 78.312,
+    "agency": "WSA TÖNNING",
+    "longitude": 9.138246832675826,
+    "latitude": 54.339462378306536,
+    "water": {
+      "shortname": "EIDER",
+      "longname": "EIDER"
+    }
+  },
+  {
+    "uuid": "721313e7-935a-4bb8-8c6d-0e014211b2ec",
+    "number": "9520060",
+    "shortname": "FRIEDRICHSTADT STRASSENBRÜCKE",
+    "longname": "FRIEDRICHSTADT STRASSENBRÜCKE",
+    "km": 83.14,
+    "agency": "WSA TÖNNING",
+    "longitude": 9.094603006864787,
+    "latitude": 54.36846849174286,
+    "water": {
+      "shortname": "EIDER",
+      "longname": "EIDER"
+    }
+  },
+  {
+    "uuid": "00e386ac-e35c-4a6e-80dd-f8cd8a9e7a62",
+    "number": "9520070",
+    "shortname": "TÖNNING",
+    "longname": "TÖNNING",
+    "km": 99.8,
+    "agency": "WSA TÖNNING",
+    "longitude": 8.950149034965454,
+    "latitude": 54.31468296416213,
+    "water": {
+      "shortname": "EIDER",
+      "longname": "EIDER"
+    }
+  },
+  {
+    "uuid": "8ac85e6c-6167-496c-b16f-fa94f81cd94a",
+    "number": "9520081",
+    "shortname": "EIDER-SPERRWERK BP",
+    "longname": "EIDER-SPERRWERK BP",
+    "km": 109.6,
+    "agency": "WSA TÖNNING",
+    "longitude": 8.849450815238436,
+    "latitude": 54.26585320877476,
+    "water": {
+      "shortname": "EIDER",
+      "longname": "EIDER"
+    }
+  },
+  {
+    "uuid": "6da1a0e2-9af5-4a4c-b52d-c0faead67d70",
+    "number": "71161198",
+    "shortname": "HAHNÖFER NEBENELBE 1",
+    "longname": "HAHNÖFER NEBENELBE 1",
+    "agency": "WSA HAMBURG",
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "d634b809-286e-4c68-aa5b-49932bf34a97",
+    "number": "501421",
+    "shortname": "WITTENBERGGÜTE",
+    "longname": "WITTENBERGGÜTE",
+    "km": 1.0,
+    "agency": "BUNDESANSTALT FÜR GEWÄSSERKUNDE",
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "7cb7461b-3530-4c01-8978-7f676b8f71ed",
+    "number": "501010",
+    "shortname": "SCHÖNA",
+    "longname": "SCHÖNA",
+    "km": 2.05,
+    "agency": "WSA DRESDEN",
+    "longitude": 14.235228651495222,
+    "latitude": 50.87576228360562,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "85d686f1-55b2-4d36-8dba-3207b50901a7",
+    "number": "501040",
+    "shortname": "PIRNA",
+    "longname": "PIRNA",
+    "km": 34.67,
+    "agency": "WSA DRESDEN",
+    "longitude": 13.929755188361455,
+    "latitude": 50.96458457915114,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "70272185-b2b3-4178-96b8-43bea330dcae",
+    "number": "501060",
+    "shortname": "DRESDEN",
+    "longname": "DRESDEN",
+    "km": 55.63,
+    "agency": "WSA DRESDEN",
+    "longitude": 13.738831783620387,
+    "latitude": 51.05445972641962,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "24440872-5bd2-4fb3-8554-907b49816c49",
+    "number": "501080",
+    "shortname": "MEISSEN",
+    "longname": "MEISSEN",
+    "km": 82.2,
+    "agency": "WSA DRESDEN",
+    "longitude": 13.475467710324816,
+    "latitude": 51.16440553646387,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "b04b739d-7ffa-41ee-9eb9-95cb1b4ef508",
+    "number": "501110",
+    "shortname": "RIESA",
+    "longname": "RIESA",
+    "km": 108.4,
+    "agency": "WSA DRESDEN",
+    "longitude": 13.293340521685113,
+    "latitude": 51.31148155805161,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "16b9b4e7-be14-41fd-941e-6755c97276cc",
+    "number": "501160",
+    "shortname": "MÜHLBERG",
+    "longname": "MÜHLBERG",
+    "km": 128.02,
+    "agency": "WSA DRESDEN",
+    "longitude": 13.191761890400072,
+    "latitude": 51.43734955683441,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "83bbaedb-5d81-4bc6-9f66-3bd700c99c1f",
+    "number": "501261",
+    "shortname": "TORGAU",
+    "longname": "TORGAU",
+    "km": 154.15,
+    "agency": "WSA DRESDEN",
+    "longitude": 13.01013060185494,
+    "latitude": 51.553684503588414,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "f3dc8f07-c2bb-4b92-b0b0-4e01a395a2c6",
+    "number": "501330",
+    "shortname": "PRETZSCH-MAUKEN",
+    "longname": "PRETZSCH-MAUKEN",
+    "km": 184.45,
+    "agency": "WSA DRESDEN",
+    "longitude": 12.82329701429728,
+    "latitude": 51.71699260639268,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "c093b557-4954-4f05-8f5c-6c6d7916c62d",
+    "number": "501390",
+    "shortname": "ELSTER",
+    "longname": "ELSTER",
+    "km": 200.15,
+    "agency": "WSA DRESDEN",
+    "longitude": 12.827256703317092,
+    "latitude": 51.82685063279587,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "070b1eb4-3872-4e07-b2e5-e25fd9251b93",
+    "number": "501420",
+    "shortname": "WITTENBERG",
+    "longname": "WITTENBERG",
+    "km": 214.14,
+    "agency": "WSA DRESDEN",
+    "longitude": 12.646310954043884,
+    "latitude": 51.85652910647732,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "1ce53a59-33b9-40dc-9b17-3cd2a2414607",
+    "number": "501470",
+    "shortname": "COSWIG",
+    "longname": "COSWIG",
+    "km": 236.31,
+    "agency": "WSA DRESDEN",
+    "longitude": 12.454011602418165,
+    "latitude": 51.876940469957034,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "ae93f2a5-612e-4514-b5fd-9c8aecdd73c7",
+    "number": "501480",
+    "shortname": "VOCKERODE",
+    "longname": "VOCKERODE",
+    "km": 245.62,
+    "agency": "WSA DRESDEN",
+    "longitude": 12.355386908862238,
+    "latitude": 51.85133260782863,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "e97116a4-7d30-4671-8ba1-cdce0a153d1d",
+    "number": "501490",
+    "shortname": "ROSSLAU",
+    "longname": "ROSSLAU",
+    "km": 257.84,
+    "agency": "WSA DRESDEN",
+    "longitude": 12.236540981164824,
+    "latitude": 51.8814073366522,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "1edc5fa4-88af-47f5-95a4-0e77a06fe8b1",
+    "number": "502000",
+    "shortname": "DESSAU",
+    "longname": "DESSAU",
+    "km": 261.16,
+    "agency": "WSA DRESDEN",
+    "longitude": 12.223276831448223,
+    "latitude": 51.856888312230645,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "094b96e5-caeb-46d3-a8ee-d44182add069",
+    "number": "502010",
+    "shortname": "AKEN",
+    "longname": "AKEN",
+    "km": 274.75,
+    "agency": "WSA DRESDEN",
+    "longitude": 12.058859064366539,
+    "latitude": 51.857867421455005,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "939f82ec-15a9-49c8-8828-dc2f8a2d49e2",
+    "number": "502070",
+    "shortname": "BARBY",
+    "longname": "BARBY",
+    "km": 294.82,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.882246426452301,
+    "latitude": 51.98483374360124,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "90bcb315-f080-41a8-a0ac-6122331bb4cf",
+    "number": "502130",
+    "shortname": "SCHÖNEBECK",
+    "longname": "SCHÖNEBECK",
+    "km": 311.76,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.738801713181422,
+    "latitude": 52.02453372628083,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "b8567c1e-8610-4c2b-a240-65e8a74919fa",
+    "number": "502170",
+    "shortname": "MAGDEBURG-BUCKAU",
+    "longname": "MAGDEBURG-BUCKAU",
+    "km": 325.39,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.634986074196531,
+    "latitude": 52.11927104944553,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "ccccb57f-a2f9-4183-ae88-5710d3afaefd",
+    "number": "502180",
+    "shortname": "MAGDEBURG-STROMBRÜCKE",
+    "longname": "MAGDEBURG-STROMBRÜCKE",
+    "km": 326.67,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.644334378196518,
+    "latitude": 52.129697761951476,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "e30f2e83-b80b-4b96-8f39-fa60317afcc7",
+    "number": "502210",
+    "shortname": "ROTHENSEE",
+    "longname": "ROTHENSEE",
+    "km": 333.12,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.682653289015432,
+    "latitude": 52.180952723286076,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "3adf88fd-fd7a-41d0-84f5-1143c98a6564",
+    "number": "502240",
+    "shortname": "NIEGRIPP AP",
+    "longname": "NIEGRIPP AP",
+    "km": 343.6,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.73755447886122,
+    "latitude": 52.249748325832506,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "133f0f6c-2ca1-4798-9360-5b5f417dd839",
+    "number": "502250",
+    "shortname": "ROGÄTZ",
+    "longname": "ROGÄTZ",
+    "km": 350.64,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.768833909111391,
+    "latitude": 52.313845363822594,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "13e91b77-90f3-41a5-a320-641748e9c311",
+    "number": "502350",
+    "shortname": "TANGERMÜNDE",
+    "longname": "TANGERMÜNDE",
+    "km": 388.26,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.978056091329778,
+    "latitude": 52.54130608476928,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "de4cc1db-51cb-4b62-bee2-9750cbe4f5c4",
+    "number": "502370",
+    "shortname": "STORKAU",
+    "longname": "STORKAU",
+    "km": 396.11,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 12.00248266741288,
+    "latitude": 52.61040476093329,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "f4c55f77-ab80-4e00-bed3-aa6631aba074",
+    "number": "502430",
+    "shortname": "SANDAU",
+    "longname": "SANDAU",
+    "km": 416.06,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 12.031305110634692,
+    "latitude": 52.784769775069606,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "e32b0a28-8cd5-4053-bc86-fff9c6469106",
+    "number": "503030",
+    "shortname": "SCHARLEUK",
+    "longname": "SCHARLEUK",
+    "km": 447.22,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.83755792821885,
+    "latitude": 52.95696918182865,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "cbf3cd49-91bd-49cc-8926-ccc6c0e7eca4",
+    "number": "503050",
+    "shortname": "WITTENBERGE",
+    "longname": "WITTENBERGE",
+    "km": 453.98,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.75944299732184,
+    "latitude": 52.98552861101009,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "48f2661f-f9cb-4093-9d57-da2418ed656e",
+    "number": "503070",
+    "shortname": "MÜGGENDORF",
+    "longname": "MÜGGENDORF",
+    "km": 463.94,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.65621263391411,
+    "latitude": 53.00790130889209,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "550e3885-a9d1-4e55-bd25-34228bd6d988",
+    "number": "5910010",
+    "shortname": "SCHNACKENBURG",
+    "longname": "SCHNACKENBURG",
+    "km": 474.56,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.569161666053072,
+    "latitude": 53.03825049644637,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "c80a4f21-528c-4771-98d7-10cd591699a4",
+    "number": "503120",
+    "shortname": "LENZEN",
+    "longname": "LENZEN",
+    "km": 484.7,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.455945648065999,
+    "latitude": 53.079992970560305,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "ac507f42-1593-49ea-865f-10b2523617c7",
+    "number": "5910020",
+    "shortname": "GORLEBEN",
+    "longname": "GORLEBEN",
+    "km": 492.95,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.349502776620287,
+    "latitude": 53.05028175067159,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "6e3ea719-48b1-408a-bc55-0986c1e94cd5",
+    "number": "5910025",
+    "shortname": "DÖMITZ",
+    "longname": "DÖMITZ",
+    "km": 504.725,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.242932640396107,
+    "latitude": 53.1403563002025,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "c233674f-259a-4304-b81f-dce1f415d85b",
+    "number": "5910030",
+    "shortname": "DAMNATZ",
+    "longname": "DAMNATZ",
+    "km": 509.35,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.179440956310591,
+    "latitude": 53.13777045834148,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "a26e57c9-1cb8-4fca-ba80-9e02abc81df8",
+    "number": "5920010",
+    "shortname": "HITZACKER",
+    "longname": "HITZACKER",
+    "km": 522.915,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.045477219403653,
+    "latitude": 53.154627767415526,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "67d6e882-b60c-40d3-975c-a6d7a2b4e40a",
+    "number": "5930010",
+    "shortname": "NEU DARCHAU",
+    "longname": "NEU DARCHAU",
+    "km": 536.44,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.888809791040135,
+    "latitude": 53.23227495420561,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "6aa1cd8e-e528-4bcb-ba8e-705b6dcb7da2",
+    "number": "5930020",
+    "shortname": "BLECKEDE",
+    "longname": "BLECKEDE",
+    "km": 549.71,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.73532983500628,
+    "latitude": 53.29437629468059,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "33e0bce0-13df-4ffc-be9d-f1a79e795e1c",
+    "number": "5930033",
+    "shortname": "BOIZENBURG",
+    "longname": "BOIZENBURG",
+    "km": 559.46,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.717752844075033,
+    "latitude": 53.375466836951226,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "d9289367-c8aa-4b6a-b1ad-857fec94c6bb",
+    "number": "5930040",
+    "shortname": "HOHNSTORF",
+    "longname": "HOHNSTORF",
+    "km": 568.97,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.558824624251303,
+    "latitude": 53.36626795191103,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "b3492c68-8373-4769-9b29-22f66635a478",
+    "number": "5930050",
+    "shortname": "ARTLENBURG",
+    "longname": "ARTLENBURG",
+    "km": 573.8,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.48920565856956,
+    "latitude": 53.376168564842324,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "44f7e955-c97d-45c8-9ed7-19406806fb4c",
+    "number": "5930060",
+    "shortname": "GEESTHACHT",
+    "longname": "GEESTHACHT",
+    "km": 583.36,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.374502723680603,
+    "latitude": 53.42650078096063,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "0f7f58a8-411f-43d9-b42a-e897e63c4faa",
+    "number": "5930062",
+    "shortname": "WEHR GEESTHACHT UP",
+    "longname": "WEHR GEESTHACHT UP",
+    "km": 586.0,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.334765293678318,
+    "latitude": 53.42329357982252,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "2ee12b9a-f7fd-4856-82b9-6bdd850c2bba",
+    "number": "5930070",
+    "shortname": "ALTENGAMME",
+    "longname": "ALTENGAMME",
+    "km": 588.73,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.297376253613347,
+    "latitude": 53.431200926576814,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "3de8ea26-ab29-4e46-adad-06198ba2e0b7",
+    "number": "5930090",
+    "shortname": "ZOLLENSPIEKER",
+    "longname": "ZOLLENSPIEKER",
+    "km": 598.2,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.18539294274835,
+    "latitude": 53.39870390434762,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "b02ce5c0-64e9-4d24-90b9-269a28a1e9f9",
+    "number": "5950010",
+    "shortname": "OVER",
+    "longname": "OVER",
+    "km": 605.0,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.10108534214382,
+    "latitude": 53.42868635965855,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "ae1b91d0-e746-4f65-9f64-2d2e23603a82",
+    "number": "5952020",
+    "shortname": "BUNTHAUS",
+    "longname": "BUNTHAUS",
+    "km": 609.88,
+    "agency": "HAMBURG PORT AUTHORITY",
+    "longitude": 10.064007910377194,
+    "latitude": 53.461413851966704,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "706e5110-c5e2-4915-9989-c071fcb492ec",
+    "number": "5952025",
+    "shortname": "HAMBURG-HARBURG",
+    "longname": "HAMBURG-HARBURG",
+    "km": 615.0,
+    "agency": "HAMBURG PORT AUTHORITY",
+    "longitude": 9.991814826063603,
+    "latitude": 53.472725864524804,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "fed4c295-7a01-463c-998e-70ebad8cd2cc",
+    "number": "5952030",
+    "shortname": "SCHÖPFSTELLE",
+    "longname": "SCHÖPFSTELLE",
+    "km": 615.3,
+    "agency": "HAMBURG PORT AUTHORITY",
+    "longitude": 10.061584576548826,
+    "latitude": 53.50839277564603,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "d488c5cc-4de9-4631-8ce1-0db0e700b546",
+    "number": "5952050",
+    "shortname": "HAMBURG ST. PAULI",
+    "longname": "HAMBURG ST. PAULI",
+    "km": 623.1,
+    "agency": "HAMBURG PORT AUTHORITY",
+    "longitude": 9.969996726842329,
+    "latitude": 53.54568502657209,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "816affba-0118-4668-887f-fb882ed573b2",
+    "number": "5952060",
+    "shortname": "SEEMANNSHÖFT",
+    "longname": "SEEMANNSHÖFT",
+    "km": 628.9,
+    "agency": "HAMBURG PORT AUTHORITY",
+    "longitude": 9.879567409613173,
+    "latitude": 53.53956902594973,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "e6b42536-6bf8-42e3-8ef5-7d1a283a8608",
+    "number": "5950070",
+    "shortname": "CRANZ",
+    "longname": "CRANZ",
+    "km": 634.42,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.791537018911868,
+    "latitude": 53.535943723982584,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "bacb459b-0f24-4233-bb35-cd224a51678e",
+    "number": "5952065",
+    "shortname": "BLANKENESE UF",
+    "longname": "BLANKENESE UF",
+    "km": 635.0,
+    "agency": "HAMBURG PORT AUTHORITY",
+    "longitude": 9.795825319280944,
+    "latitude": 53.55772718103615,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "f3c6ee73-5561-4068-96ec-364016e7d9ef",
+    "number": "5950090",
+    "shortname": "SCHULAU",
+    "longname": "SCHULAU",
+    "km": 641.0,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.702887479041944,
+    "latitude": 53.567910528723715,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "81c95d3a-3193-4e9c-a411-adf97c751a43",
+    "number": "126017",
+    "shortname": "HAHNÖFER SAND WEST SIEL",
+    "longname": "HAHNÖFER SAND WEST SIEL",
+    "km": 641.5,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.690490444910013,
+    "latitude": 53.54823793633717,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "1c80e441-a1d7-400c-b569-e038c9876a4f",
+    "number": "71160198",
+    "shortname": "D1 HANSKALBSAND OBERFLÄCHE",
+    "longname": "D1 HANSKALBSAND OBERFLÄCHE",
+    "km": 643.0,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.672074804388942,
+    "latitude": 53.56571128392121,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "8d18d129-07f1-4c4d-adba-a985016be0b0",
+    "number": "5960010",
+    "shortname": "LÜHORT",
+    "longname": "LÜHORT",
+    "km": 645.5,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.633361851581585,
+    "latitude": 53.57157451197346,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "599c23b1-4550-41e3-a7e7-3056989927f1",
+    "number": "5970010",
+    "shortname": "HETLINGEN",
+    "longname": "HETLINGEN",
+    "km": 650.5,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.584318424577651,
+    "latitude": 53.60941130435129,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "6d43098c-632d-4e89-996f-98b1c99e5630",
+    "number": "126015",
+    "shortname": "TWIELENFLETH SIEL",
+    "longname": "TWIELENFLETH SIEL",
+    "km": 650.7,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.567137091002857,
+    "latitude": 53.59875445021304,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "3988cd01-1c7c-4bd3-a8ce-d324f73f346d",
+    "number": "71160398",
+    "shortname": "D2 LÜHESAND OBERFLÄCHE",
+    "longname": "D2 LÜHESAND OBERFLÄCHE",
+    "km": 651.3,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.569255731082905,
+    "latitude": 53.608025941016116,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "80f0fc4d-9fc7-449d-9d68-ee89333f0eff",
+    "number": "5970013",
+    "shortname": "STADERSAND",
+    "longname": "STADERSAND",
+    "km": 654.86,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.52660227783838,
+    "latitude": 53.629729269859254,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "391bbba5-83d4-4791-b07e-65ab29b423f6",
+    "number": "5970019",
+    "shortname": "PINNAU-SPERRWERK AP",
+    "longname": "PINNAU-SPERRWERK AP",
+    "km": 658.444,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.558227529245833,
+    "latitude": 53.67138892766762,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "ccf0645d-ddad-4c9e-b4f1-dc1f1edb2aa4",
+    "number": "5970020",
+    "shortname": "GRAUERORT",
+    "longname": "GRAUERORT",
+    "km": 660.6,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.494906271967864,
+    "latitude": 53.67790728314029,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "7398029b-c6a1-484f-b1f6-1afe568ee1e2",
+    "number": "5970026",
+    "shortname": "GRAUERORT REEDE",
+    "longname": "GRAUERORT REEDE",
+    "km": 660.738,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.494796126117517,
+    "latitude": 53.67914967442031,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "a653eb04-de2e-47f7-8e2c-09277cfe95ae",
+    "number": "5970024",
+    "shortname": "KRÜCKAU-SPERRWERK AP",
+    "longname": "KRÜCKAU-SPERRWERK AP",
+    "km": 663.3,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.526336706347767,
+    "latitude": 53.71614057991539,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "3ed90357-4b01-4119-b1c5-bd2c62871e7b",
+    "number": "5970025",
+    "shortname": "KOLLMAR",
+    "longname": "KOLLMAR",
+    "km": 666.9,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.459761691832878,
+    "latitude": 53.731123436561475,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "e651fe4a-d759-49c5-8e00-55137d0f2975",
+    "number": "5970030",
+    "shortname": "KRAUTSAND",
+    "longname": "KRAUTSAND",
+    "km": 671.75,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.391553456044239,
+    "latitude": 53.75428442700496,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "8c20b4dc-1540-4b14-8c88-0e1d87de22c4",
+    "number": "5970031",
+    "shortname": "KRAUTSAND REEDE",
+    "longname": "KRAUTSAND REEDE",
+    "km": 671.787,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.391186976193614,
+    "latitude": 53.7547049182697,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "1f1bbed7-c1fa-45b4-90d3-df94b50ad631",
+    "number": "5970035",
+    "shortname": "GLÜCKSTADT",
+    "longname": "GLÜCKSTADT",
+    "km": 674.0,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.409429815364883,
+    "latitude": 53.78436111734677,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "c8ff06a7-eac9-4db7-ab22-46954d4481cb",
+    "number": "71160798",
+    "shortname": "D4 RHINPLATTE-NORD OBERFLÄCHE",
+    "longname": "D4 RHINPLATTE-NORD OBERFLÄCHE",
+    "km": 676.5,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.3722470258039,
+    "latitude": 53.79658489924948,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "d9acdbec-61ff-4308-978a-2f4d1c2c4059",
+    "number": "5970041",
+    "shortname": "STÖR-SPERRWERK AP",
+    "longname": "STÖR-SPERRWERK AP",
+    "km": 678.636,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.400981175517032,
+    "latitude": 53.82594572968708,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "610ab204-d3c4-4a11-a38b-e31461fdcf27",
+    "number": "5970050",
+    "shortname": "BROKDORF",
+    "longname": "BROKDORF",
+    "km": 684.2,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.316029583340883,
+    "latitude": 53.86270347191609,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "f973fb71-4a44-4603-8b13-25002dd6dbd8",
+    "number": "126005",
+    "shortname": "SCHÖNEWORTH SIEL",
+    "longname": "SCHÖNEWORTH SIEL",
+    "km": 685.1,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.28820059301234,
+    "latitude": 53.84689709635665,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "d4f5f719-8c52-4f8d-945d-1c31404cc628",
+    "number": "5970094",
+    "shortname": "BRUNSBÜTTEL MPM",
+    "longname": "BRUNSBÜTTEL MPM",
+    "km": 695.214,
+    "agency": "WSA CUXHAVEN",
+    "longitude": 9.148744899065209,
+    "latitude": 53.88780676587327,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "12847496-b0e9-4cb3-905c-b1b1c3c087db",
+    "number": "5970093",
+    "shortname": "BRUNSBÜTTEL MOLE 1",
+    "longname": "BRUNSBÜTTEL MOLE 1",
+    "km": 695.7,
+    "agency": "WSA CUXHAVEN",
+    "longitude": 9.144031265919063,
+    "latitude": 53.88881898280839,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "eb90bd3f-5405-412d-81e0-7a58be52dcef",
+    "number": "5970096",
+    "shortname": "OSTERIFF MPM",
+    "longname": "OSTERIFF MPM",
+    "km": 703.44,
+    "agency": "WSA CUXHAVEN",
+    "longitude": 9.031629023778263,
+    "latitude": 53.856368689225654,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "5140295e-b93e-4081-a920-642d89c7ca8b",
+    "number": "5990011",
+    "shortname": "OTTERNDORF MPM",
+    "longname": "OTTERNDORF MPM",
+    "km": 714.02,
+    "agency": "WSA CUXHAVEN",
+    "longitude": 8.870723820918473,
+    "latitude": 53.83537004729649,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "aad49293-242a-43ad-a8b1-e91d7792c4b2",
+    "number": "5990020",
+    "shortname": "CUXHAVEN STEUBENHÖFT",
+    "longname": "CUXHAVEN STEUBENHÖFT",
+    "km": 724.0,
+    "agency": "WSA CUXHAVEN",
+    "longitude": 8.717424884873582,
+    "latitude": 53.86768585758401,
+    "water": {
+      "shortname": "ELBE",
+      "longname": "ELBE"
+    }
+  },
+  {
+    "uuid": "a7b1eda9-bed4-4456-8e54-529828cdcbf9",
+    "number": "587505",
+    "shortname": "DETERSHAGEN",
+    "longname": "DETERSHAGEN",
+    "km": 326.83,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 11.762554814182451,
+    "latitude": 52.25137396176887,
+    "water": {
+      "shortname": "EHK",
+      "longname": "ELBE-HAVEL-KANAL"
+    }
+  },
+  {
+    "uuid": "831ad501-d2fe-4782-ab83-4f1c8e0b15ff",
+    "number": "587507",
+    "shortname": "BURG",
+    "longname": "BURG",
+    "km": 332.54,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 11.83202697629219,
+    "latitude": 52.27673747300618,
+    "water": {
+      "shortname": "EHK",
+      "longname": "ELBE-HAVEL-KANAL"
+    }
+  },
+  {
+    "uuid": "64c37072-db97-4e08-8981-c67f0282de5c",
+    "number": "587510",
+    "shortname": "ZERBEN OP",
+    "longname": "ZERBEN OP",
+    "km": 345.25,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 11.962203879639919,
+    "latitude": 52.34391063213988,
+    "water": {
+      "shortname": "EHK",
+      "longname": "ELBE-HAVEL-KANAL"
+    }
+  },
+  {
+    "uuid": "532d8718-6ec7-4f12-bb2f-bde2dec50182",
+    "number": "587520",
+    "shortname": "ZERBEN UP",
+    "longname": "ZERBEN UP",
+    "km": 345.63,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 11.964945434651396,
+    "latitude": 52.34689508881927,
+    "water": {
+      "shortname": "EHK",
+      "longname": "ELBE-HAVEL-KANAL"
+    }
+  },
+  {
+    "uuid": "e9e7f20c-9f74-41fd-b054-cad59fca2cd4",
+    "number": "587535",
+    "shortname": "GENTHIN",
+    "longname": "GENTHIN",
+    "km": 361.444,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.140021546748295,
+    "latitude": 52.41085678373606,
+    "water": {
+      "shortname": "EHK",
+      "longname": "ELBE-HAVEL-KANAL"
+    }
+  },
+  {
+    "uuid": "e4f29379-6fd3-4501-afc5-bc5a41cb6e93",
+    "number": "587541",
+    "shortname": "KADE",
+    "longname": "KADE",
+    "km": 371.285,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.279351110358602,
+    "latitude": 52.39704868721982,
+    "water": {
+      "shortname": "EHK",
+      "longname": "ELBE-HAVEL-KANAL"
+    }
+  },
+  {
+    "uuid": "c6a12d34-c78f-44a2-a7ff-4b8d88f316cc",
+    "number": "587540",
+    "shortname": "WUSTERWITZ OP",
+    "longname": "WUSTERWITZ OP",
+    "km": 376.56,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.356118651827487,
+    "latitude": 52.39427213147182,
+    "water": {
+      "shortname": "EHK",
+      "longname": "ELBE-HAVEL-KANAL"
+    }
+  },
+  {
+    "uuid": "3bfcf759-27b3-4042-b59a-f6c8ed9e533e",
+    "number": "587550",
+    "shortname": "WUSTERWITZ UP",
+    "longname": "WUSTERWITZ UP",
+    "km": 376.965,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.370473537607854,
+    "latitude": 52.39283506576701,
+    "water": {
+      "shortname": "EHK",
+      "longname": "ELBE-HAVEL-KANAL"
+    }
+  },
+  {
+    "uuid": "6c5b6422-126d-4bf0-8856-7b86d74ea1b3",
+    "number": "90100100",
+    "shortname": "OSLOSS",
+    "longname": "OSLOSS",
+    "km": 9.72,
+    "agency": "WSA UELZEN",
+    "longitude": 10.667920057338705,
+    "latitude": 52.477670650488086,
+    "water": {
+      "shortname": "ESK",
+      "longname": "ELBESEITENKANAL"
+    }
+  },
+  {
+    "uuid": "9cf795ce-8bdf-494b-b8c6-ef1bfb89c08b",
+    "number": "90100101",
+    "shortname": "WITTINGEN",
+    "longname": "WITTINGEN",
+    "km": 39.0,
+    "agency": "WSA UELZEN",
+    "longitude": 10.66447739629255,
+    "latitude": 52.727726793925115,
+    "water": {
+      "shortname": "ESK",
+      "longname": "ELBESEITENKANAL"
+    }
+  },
+  {
+    "uuid": "728bd3e3-23f2-41c6-8ac5-4cfa223a5a7e",
+    "number": "90100111",
+    "shortname": "UELZEN OW",
+    "longname": "UELZEN OW",
+    "km": 60.38,
+    "agency": "WSA UELZEN",
+    "longitude": 10.614719701462517,
+    "latitude": 52.90933657890343,
+    "water": {
+      "shortname": "ESK",
+      "longname": "ELBESEITENKANAL"
+    }
+  },
+  {
+    "uuid": "3eba7da6-fbd6-431c-91d3-522ec49275f0",
+    "number": "90100113",
+    "shortname": "UELZEN",
+    "longname": "UELZEN",
+    "km": 60.68,
+    "agency": "WSA UELZEN",
+    "longitude": 10.613515486381901,
+    "latitude": 52.91193193258229,
+    "water": {
+      "shortname": "ESK",
+      "longname": "ELBESEITENKANAL"
+    }
+  },
+  {
+    "uuid": "0d0082cf-0b4b-4c8b-8e97-5d37b511916b",
+    "number": "90100110",
+    "shortname": "UELZEN UW",
+    "longname": "UELZEN UW",
+    "km": 60.98,
+    "agency": "WSA UELZEN",
+    "longitude": 10.61231113033207,
+    "latitude": 52.91452727407878,
+    "water": {
+      "shortname": "ESK",
+      "longname": "ELBESEITENKANAL"
+    }
+  },
+  {
+    "uuid": "b8997708-53d0-4932-8fbf-265083e11517",
+    "number": "90100112",
+    "shortname": "BEVENSEN",
+    "longname": "BEVENSEN",
+    "km": 79.72,
+    "agency": "WSA UELZEN",
+    "longitude": 10.603346356554992,
+    "latitude": 53.07479652486107,
+    "water": {
+      "shortname": "ESK",
+      "longname": "ELBESEITENKANAL"
+    }
+  },
+  {
+    "uuid": "c7364d1e-6139-4575-84cb-b420d21275c4",
+    "number": "90100121",
+    "shortname": "LUENEBURG OW",
+    "longname": "LUENEBURG OW",
+    "km": 103.97,
+    "agency": "WSA UELZEN",
+    "longitude": 10.485459016759826,
+    "latitude": 53.272487644066715,
+    "water": {
+      "shortname": "ESK",
+      "longname": "ELBESEITENKANAL"
+    }
+  },
+  {
+    "uuid": "f348f2f6-37c2-41c2-8d53-fd06a18acce0",
+    "number": "90100123",
+    "shortname": "LUENEBURG",
+    "longname": "LUENEBURG",
+    "km": 105.14,
+    "agency": "WSA UELZEN",
+    "longitude": 10.486987882835402,
+    "latitude": 53.282959066596696,
+    "water": {
+      "shortname": "ESK",
+      "longname": "ELBESEITENKANAL"
+    }
+  },
+  {
+    "uuid": "d18033cd-9cf6-4800-9176-57758bb444dc",
+    "number": "90100120",
+    "shortname": "LUENEBURG UW",
+    "longname": "LUENEBURG UW",
+    "km": 106.31,
+    "agency": "WSA UELZEN",
+    "longitude": 10.488563061269604,
+    "latitude": 53.293428170710264,
+    "water": {
+      "shortname": "ESK",
+      "longname": "ELBESEITENKANAL"
+    }
+  },
+  {
+    "uuid": "7fec2f4f-6a2e-47ec-8f3c-016c581e4bbd",
+    "number": "90100122",
+    "shortname": "ARTLENBURG-ELK",
+    "longname": "ARTLENBURG-ELK",
+    "km": 114.74,
+    "agency": "WSA UELZEN",
+    "longitude": 10.501986716627133,
+    "latitude": 53.368564025269755,
+    "water": {
+      "shortname": "ESK",
+      "longname": "ELBESEITENKANAL"
+    }
+  },
+  {
+    "uuid": "bf7bb8e8-e81f-4655-9e84-28738feae936",
+    "number": "9669040",
+    "shortname": "BUESSAU UP",
+    "longname": "BUESSAU UP",
+    "km": 3.37,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.625359636016615,
+    "latitude": 53.81755527881617,
+    "water": {
+      "shortname": "ELBE-LÜBECK-KANAL",
+      "longname": "ELK"
+    }
+  },
+  {
+    "uuid": "45634232-36ac-416c-806d-5f64201dae2c",
+    "number": "9660049",
+    "shortname": "DONNERSCHLEUSE OP",
+    "longname": "DONNERSCHLEUSE OP",
+    "km": 20.598,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.636875854439548,
+    "latitude": 53.67203570705899,
+    "water": {
+      "shortname": "ELBE-LÜBECK-KANAL",
+      "longname": "ELK"
+    }
+  },
+  {
+    "uuid": "46644438-83d6-4da8-a2a1-1deb2cb67561",
+    "number": "9660050",
+    "shortname": "MÖLLN",
+    "longname": "MÖLLN",
+    "km": 26.75,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.67482297794653,
+    "latitude": 53.624400353882585,
+    "water": {
+      "shortname": "ELBE-LÜBECK-KANAL",
+      "longname": "ELK"
+    }
+  },
+  {
+    "uuid": "86f8dbab-6a64-408b-a5d5-69e69f01db2f",
+    "number": "3730001",
+    "shortname": "VERSEN WEHR OP",
+    "longname": "VERSEN WEHR OP",
+    "agency": "WSA MEPPEN",
+    "water": {
+      "shortname": "EMS",
+      "longname": "EMS"
+    }
+  },
+  {
+    "uuid": "ec4a598d-773d-44c1-935e-2053b54e45a3",
+    "number": "3790010",
+    "shortname": "PAPENBURG",
+    "longname": "PAPENBURG",
+    "km": 0.39,
+    "agency": "WSA EMS-NORDSEE",
+    "longitude": 7.365594761853153,
+    "latitude": 53.10819077388404,
+    "water": {
+      "shortname": "EMS",
+      "longname": "EMS"
+    }
+  },
+  {
+    "uuid": "aa6af4e6-a44f-46c4-abf6-449f8a68bab1",
+    "number": "3790020",
+    "shortname": "WEENER",
+    "longname": "WEENER",
+    "km": 6.852,
+    "agency": "WSA EMS-NORDSEE",
+    "longitude": 7.371913437651044,
+    "latitude": 53.161187968385896,
+    "water": {
+      "shortname": "EMS",
+      "longname": "EMS"
+    }
+  },
+  {
+    "uuid": "abb23dad-0880-41ab-8d2d-dd33e11f148f",
+    "number": "3910010",
+    "shortname": "LEERORT",
+    "longname": "LEERORT",
+    "km": 14.79,
+    "agency": "WSA EMS-NORDSEE",
+    "longitude": 7.426190802733352,
+    "latitude": 53.21533512811442,
+    "water": {
+      "shortname": "EMS",
+      "longname": "EMS"
+    }
+  },
+  {
+    "uuid": "244cae8b-ce75-4c2d-a66e-cb804f8335a2",
+    "number": "3910020",
+    "shortname": "TERBORG",
+    "longname": "TERBORG",
+    "km": 24.67,
+    "agency": "WSA EMS-NORDSEE",
+    "longitude": 7.396102412436918,
+    "latitude": 53.29270395998908,
+    "water": {
+      "shortname": "EMS",
+      "longname": "EMS"
+    }
+  },
+  {
+    "uuid": "5d1e4350-0f39-4428-84c3-6f8f0bbe80d4",
+    "number": "3950020",
+    "shortname": "POGUM",
+    "longname": "POGUM",
+    "km": 35.302,
+    "agency": "WSA EMS-NORDSEE",
+    "longitude": 7.259801109021896,
+    "latitude": 53.32135061212295,
+    "water": {
+      "shortname": "EMS",
+      "longname": "EMS"
+    }
+  },
+  {
+    "uuid": "edfdf747-be92-462f-87ed-53d228a33172",
+    "number": "3970010",
+    "shortname": "EMDEN NEUE SEESCHLEUSE",
+    "longname": "EMDEN NEUE SEESCHLEUSE",
+    "km": 40.45,
+    "agency": "WSA EMS-NORDSEE",
+    "longitude": 7.186347889541317,
+    "latitude": 53.3367809193986,
+    "water": {
+      "shortname": "EMS",
+      "longname": "EMS"
+    }
+  },
+  {
+    "uuid": "438b565e-f293-43c8-8771-377e555ed5ec",
+    "number": "3990010",
+    "shortname": "KNOCK",
+    "longname": "KNOCK",
+    "km": 50.848,
+    "agency": "WSA EMS-NORDSEE",
+    "longitude": 7.03067362267113,
+    "latitude": 53.3271726846511,
+    "water": {
+      "shortname": "EMS",
+      "longname": "EMS"
+    }
+  },
+  {
+    "uuid": "7753c1fa-34d8-4d09-a7c7-38024079117c",
+    "number": "3990020",
+    "shortname": "DUKEGAT",
+    "longname": "DUKEGAT",
+    "km": 65.69,
+    "agency": "WSA EMS-NORDSEE",
+    "longitude": 6.926206572590535,
+    "latitude": 53.43360175624244,
+    "water": {
+      "shortname": "EMS",
+      "longname": "EMS"
+    }
+  },
+  {
+    "uuid": "c8af067c-ba6a-4a76-86d8-1ce8e532ef8b",
+    "number": "9340010",
+    "shortname": "EMSHÖRN",
+    "longname": "EMSHÖRN",
+    "km": 74.32,
+    "agency": "WSA EMS-NORDSEE",
+    "longitude": 6.8412044381103785,
+    "latitude": 53.493516863381444,
+    "water": {
+      "shortname": "EMS",
+      "longname": "EMS"
+    }
+  },
+  {
+    "uuid": "3a8ed45f-28e7-4263-8437-d926c6a194f4",
+    "number": "3310010",
+    "shortname": "FUESTRUP",
+    "longname": "FUESTRUP",
+    "km": 102.177,
+    "agency": "WSA MEPPEN",
+    "longitude": 7.680240800859249,
+    "latitude": 52.04026675873374,
+    "water": {
+      "shortname": "EMS",
+      "longname": "EMS"
+    }
+  },
+  {
+    "uuid": "50a449ba-af4c-42c7-b2c4-9a3eda37e1e3",
+    "number": "3390020",
+    "shortname": "RHEINE UNTERSCHLEUSE",
+    "longname": "RHEINE UNTERSCHLEUSE",
+    "km": 153.03,
+    "agency": "WSA MEPPEN",
+    "longitude": 7.4340780399463275,
+    "latitude": 52.28802625706214,
+    "water": {
+      "shortname": "EMS",
+      "longname": "EMS"
+    }
+  },
+  {
+    "uuid": "200363fc-cdc5-4c22-a271-a25d1ba880ed",
+    "number": "3500015",
+    "shortname": "LINGEN-DARME",
+    "longname": "LINGEN-DARME",
+    "km": 196.2,
+    "agency": "WSA MEPPEN",
+    "longitude": 7.288341577719381,
+    "latitude": 52.49658867981537,
+    "water": {
+      "shortname": "EMS",
+      "longname": "EMS"
+    }
+  },
+  {
+    "uuid": "ad357e52-0978-4583-91e6-bc03a222f655",
+    "number": "3550040",
+    "shortname": "DALUM",
+    "longname": "DALUM",
+    "km": 212.04,
+    "agency": "WSA MEPPEN",
+    "longitude": 7.2485301016630315,
+    "latitude": 52.59560286578248,
+    "water": {
+      "shortname": "EMS",
+      "longname": "EMS"
+    }
+  },
+  {
+    "uuid": "6de43652-2db9-4627-a255-9cb1f8efb820",
+    "number": "3730010",
+    "shortname": "VERSEN WEHRDURCHSTICH",
+    "longname": "VERSEN WEHRDURCHSTICH",
+    "km": 234.78,
+    "agency": "WSA MEPPEN",
+    "longitude": 7.241939245128032,
+    "latitude": 52.73298291253683,
+    "water": {
+      "shortname": "EMS",
+      "longname": "EMS"
+    }
+  },
+  {
+    "uuid": "8a08c920-c911-43e5-90dd-27d4d4e757d0",
+    "number": "5950080",
+    "shortname": "BUXTEHUDE",
+    "longname": "BUXTEHUDE",
+    "km": 0.71,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.703368910151168,
+    "latitude": 53.48044959691865,
+    "water": {
+      "shortname": "ESTE",
+      "longname": "ESTE"
+    }
+  },
+  {
+    "uuid": "5fea1a12-326f-4919-ac9a-02f9fa11ab57",
+    "number": "5950081",
+    "shortname": "ESTE INNERES SPERRWERK BP",
+    "longname": "ESTE INNERES SPERRWERK BP",
+    "km": 1.0,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.776501861535763,
+    "latitude": 53.532826669663045,
+    "water": {
+      "shortname": "ESTE",
+      "longname": "ESTE"
+    }
+  },
+  {
+    "uuid": "227b83f7-1302-4d7e-8d70-899036ff4ce2",
+    "number": "5950082",
+    "shortname": "ESTE INNERES SPERRWERK AP",
+    "longname": "ESTE INNERES SPERRWERK AP",
+    "km": 1.0,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.77675237091593,
+    "latitude": 53.53302505387036,
+    "water": {
+      "shortname": "ESTE",
+      "longname": "ESTE"
+    }
+  },
+  {
+    "uuid": "6629a4ca-4e2e-40b8-a66c-964d906c6911",
+    "number": "693010",
+    "shortname": "RUHLSDORF OP",
+    "longname": "RUHLSDORF OP",
+    "km": 59.2,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.566246650747015,
+    "latitude": 52.839182627632134,
+    "water": {
+      "shortname": "FiK",
+      "longname": "FINOWKANAL"
+    }
+  },
+  {
+    "uuid": "f099ce74-1a3d-4d47-9810-75c2b1b178b6",
+    "number": "693030",
+    "shortname": "LEESENBRUECK OP",
+    "longname": "LEESENBRUECK OP",
+    "km": 61.1,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.593943266745564,
+    "latitude": 52.837698594121505,
+    "water": {
+      "shortname": "FiK",
+      "longname": "FINOWKANAL"
+    }
+  },
+  {
+    "uuid": "547422fb-364e-4870-9977-c7782f0712e2",
+    "number": "693050",
+    "shortname": "GRAFENBRUECK OP",
+    "longname": "GRAFENBRUECK OP",
+    "km": 63.318,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.625712942211283,
+    "latitude": 52.84204278735456,
+    "water": {
+      "shortname": "FiK",
+      "longname": "FINOWKANAL"
+    }
+  },
+  {
+    "uuid": "6386de1c-0426-4795-b23d-7ea2754ec782",
+    "number": "693070",
+    "shortname": "SCHOEPFURTH OP",
+    "longname": "SCHOEPFURTH OP",
+    "km": 67.5,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.682534375603925,
+    "latitude": 52.84671301594642,
+    "water": {
+      "shortname": "FiK",
+      "longname": "FINOWKANAL"
+    }
+  },
+  {
+    "uuid": "3cd46cc7-b94d-424f-a860-c389dd9992a4",
+    "number": "693170",
+    "shortname": "EBERSWALDE OP",
+    "longname": "EBERSWALDE OP",
+    "km": 77.9,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.820901248643345,
+    "latitude": 52.83582034251613,
+    "water": {
+      "shortname": "FiK",
+      "longname": "FINOWKANAL"
+    }
+  },
+  {
+    "uuid": "b6bbe4f8-aa59-414a-8292-2d3919590a20",
+    "number": "693190",
+    "shortname": "RAGOESE OP",
+    "longname": "RAGOESE OP",
+    "km": 81.0,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.856280456933005,
+    "latitude": 52.84929577160606,
+    "water": {
+      "shortname": "FiK",
+      "longname": "FINOWKANAL"
+    }
+  },
+  {
+    "uuid": "516fbf8c-dc08-4808-b39b-1fa65a462180",
+    "number": "693210",
+    "shortname": "STECHER OP",
+    "longname": "STECHER OP",
+    "km": 84.4,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.902174069639482,
+    "latitude": 52.84003259518914,
+    "water": {
+      "shortname": "FiK",
+      "longname": "FINOWKANAL"
+    }
+  },
+  {
+    "uuid": "6f81b35f-8339-4012-8029-ca193403e52c",
+    "number": "693230",
+    "shortname": "LIEPE OP",
+    "longname": "LIEPE OP",
+    "km": 88.9,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.953351900793756,
+    "latitude": 52.84899598509975,
+    "water": {
+      "shortname": "FiK",
+      "longname": "FINOWKANAL"
+    }
+  },
+  {
+    "uuid": "79d783d3-e423-4c6d-b914-d7b7d161a89f",
+    "number": "693240",
+    "shortname": "LIEPE UP",
+    "longname": "LIEPE UP",
+    "km": 88.9,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.95402333786989,
+    "latitude": 52.849469196281994,
+    "water": {
+      "shortname": "FiK",
+      "longname": "FINOWKANAL"
+    }
+  },
+  {
+    "uuid": "d3e21e8a-99ce-4033-8db6-9d0f0648beb3",
+    "number": "126006",
+    "shortname": "FREIBURG SPERRWERK",
+    "longname": "FREIBURG SPERRWERK",
+    "km": 0.45,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.295079440408715,
+    "latitude": 53.8269255247804,
+    "water": {
+      "shortname": "Freiburger Hafenpriel",
+      "longname": "FREIBURGER HAFENPRIEL"
+    }
+  },
+  {
+    "uuid": "23721dfd-9b89-4b69-af80-063229917f27",
+    "number": "42900201",
+    "shortname": "BONAFORTH",
+    "longname": "BONAFORTH",
+    "km": 3.61,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 9.632042475708742,
+    "latitude": 51.40349164753268,
+    "water": {
+      "shortname": "FULDA",
+      "longname": "FULDA"
+    }
+  },
+  {
+    "uuid": "213a585d-d665-4be7-96a4-78a992b9614d",
+    "number": "42900100",
+    "shortname": "GUNTERSHAUSEN",
+    "longname": "GUNTERSHAUSEN",
+    "km": 43.99,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 9.46933329275977,
+    "latitude": 51.22658020045521,
+    "water": {
+      "shortname": "FULDA",
+      "longname": "FULDA"
+    }
+  },
+  {
+    "uuid": "acd63934-e40d-4650-a094-01cea45432be",
+    "number": "42700202",
+    "shortname": "GREBENAU",
+    "longname": "GREBENAU",
+    "km": 55.49,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 9.49819441574543,
+    "latitude": 51.193130668351344,
+    "water": {
+      "shortname": "FULDA",
+      "longname": "FULDA"
+    }
+  },
+  {
+    "uuid": "d1ba62a4-767b-49ba-9ce8-ab17537b2fe1",
+    "number": "42700100",
+    "shortname": "ROTENBURG",
+    "longname": "ROTENBURG",
+    "km": 95.69,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 9.72044974360598,
+    "latitude": 51.00376747727409,
+    "water": {
+      "shortname": "FULDA",
+      "longname": "FULDA"
+    }
+  },
+  {
+    "uuid": "f49855d8-371f-4bdf-8ade-ed6b475e6b27",
+    "number": "4940030",
+    "shortname": "RITTERHUDE",
+    "longname": "RITTERHUDE",
+    "km": 25.45,
+    "agency": "WSA BREMEN",
+    "longitude": 8.763345493242257,
+    "latitude": 53.18192796624425,
+    "water": {
+      "shortname": "HAMME",
+      "longname": "HAMME"
+    }
+  },
+  {
+    "uuid": "2c68509c-bf1e-4866-9ec4-b26b231e5e04",
+    "number": "580310",
+    "shortname": "BERLIN-SPANDAU UP",
+    "longname": "BERLIN-SPANDAU UP",
+    "km": 0.55,
+    "agency": "WSA BERLIN",
+    "longitude": 13.209346222164326,
+    "latitude": 52.54006396763462,
+    "water": {
+      "shortname": "HOW",
+      "longname": "HAVEL-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "e607a4b6-85cc-4f12-a53d-116cb6eef4f5",
+    "number": "580300",
+    "shortname": "BERLIN-SPANDAU OP",
+    "longname": "BERLIN-SPANDAU OP",
+    "km": 0.76,
+    "agency": "WSA BERLIN",
+    "longitude": 13.209041700232952,
+    "latitude": 52.54185549253914,
+    "water": {
+      "shortname": "HOW",
+      "longname": "HAVEL-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "1b2e2996-c2ef-4d9c-9052-ced8cb7bc226",
+    "number": "581591",
+    "shortname": "BORGSDORF",
+    "longname": "BORGSDORF",
+    "km": 20.3,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.251248157094599,
+    "latitude": 52.70048541451592,
+    "water": {
+      "shortname": "HOW",
+      "longname": "HAVEL-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "5bb1f56d-7c56-4b01-9da0-2a08a0aaedeb",
+    "number": "581590",
+    "shortname": "LEHNITZ UP",
+    "longname": "LEHNITZ UP",
+    "km": 28.43,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.280309399537114,
+    "latitude": 52.767405265072625,
+    "water": {
+      "shortname": "HOW",
+      "longname": "HAVEL-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "c8a1cf0a-9441-47aa-8c64-64e8962a9bd4",
+    "number": "581580",
+    "shortname": "LEHNITZ OP",
+    "longname": "LEHNITZ OP",
+    "km": 28.746,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.2804175617252,
+    "latitude": 52.767556872159204,
+    "water": {
+      "shortname": "HOW",
+      "longname": "HAVEL-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "414dd4ee-b38b-489f-a1fe-19b1d62f3202",
+    "number": "692080",
+    "shortname": "NIEDERFINOW SHW OP",
+    "longname": "NIEDERFINOW SHW OP",
+    "km": 77.428,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.936478050751903,
+    "latitude": 52.85006819187145,
+    "water": {
+      "shortname": "HOW",
+      "longname": "HAVEL-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "4eec6b25-6b02-4448-b5db-10843c8d6175",
+    "number": "692090",
+    "shortname": "NIEDERFINOW SHW UP",
+    "longname": "NIEDERFINOW SHW UP",
+    "km": 77.972,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.944325796325481,
+    "latitude": 52.849041883415836,
+    "water": {
+      "shortname": "HOW",
+      "longname": "HAVEL-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "3404a6e5-8dfe-42b1-90f6-c0c3741b6ac8",
+    "number": "603310",
+    "shortname": "HOHENSAATEN WEST BP",
+    "longname": "HOHENSAATEN WEST BP",
+    "km": 92.715,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 14.149328038858735,
+    "latitude": 52.87425859247676,
+    "water": {
+      "shortname": "HOW",
+      "longname": "HAVEL-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "99309d3e-58d6-4200-b212-c8499467b4ce",
+    "number": "603400",
+    "shortname": "HOHENSAATEN WEST AP",
+    "longname": "HOHENSAATEN WEST AP",
+    "km": 93.035,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 14.151790544688126,
+    "latitude": 52.87669350564356,
+    "water": {
+      "shortname": "HOW",
+      "longname": "HAVEL-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "4ee515f9-8cfb-4835-8460-8dde0b978fbe",
+    "number": "603410",
+    "shortname": "SCHWEDT SCHLEUSE BP",
+    "longname": "SCHWEDT SCHLEUSE BP",
+    "km": 123.476,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 14.321854551570592,
+    "latitude": 53.068882655421824,
+    "water": {
+      "shortname": "HOW",
+      "longname": "HAVEL-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "314945d6-b499-40cf-bb21-d76cf4547e3a",
+    "number": "603420",
+    "shortname": "FRIEDRICHSTHAL",
+    "longname": "FRIEDRICHSTHAL",
+    "km": 133.712,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 14.357228871006395,
+    "latitude": 53.155890588193245,
+    "water": {
+      "shortname": "HOW",
+      "longname": "HAVEL-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "d8ef9f21-479e-4504-8bf7-aef2dbe6184d",
+    "number": "587050",
+    "shortname": "SCHÖNWALDE OP",
+    "longname": "SCHÖNWALDE OP",
+    "km": 8.676,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 13.08886441720241,
+    "latitude": 52.60786219342105,
+    "water": {
+      "shortname": "HvK",
+      "longname": "HAVELKANAL"
+    }
+  },
+  {
+    "uuid": "b6650b13-582b-4d54-adac-991ac140e039",
+    "number": "587060",
+    "shortname": "SCHÖNWALDE UP",
+    "longname": "SCHÖNWALDE UP",
+    "km": 9.002,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 13.084078146108572,
+    "latitude": 52.607726362162936,
+    "water": {
+      "shortname": "HvK",
+      "longname": "HAVELKANAL"
+    }
+  },
+  {
+    "uuid": "1b51e55e-088a-44c3-a633-b1bee44422d7",
+    "number": "4960030",
+    "shortname": "OLDENBURG-DRIELAKE",
+    "longname": "OLDENBURG-DRIELAKE",
+    "km": 0.547,
+    "agency": "WSA BREMEN",
+    "longitude": 8.234080885188327,
+    "latitude": 53.14022907819447,
+    "water": {
+      "shortname": "HUNTE",
+      "longname": "HUNTE"
+    }
+  },
+  {
+    "uuid": "c9df61c4-2a0b-47bd-8b51-fef7f430e528",
+    "number": "4960040",
+    "shortname": "REITHOERNE",
+    "longname": "REITHOERNE",
+    "km": 7.552,
+    "agency": "WSA BREMEN",
+    "longitude": 8.322516425323332,
+    "latitude": 53.16120722971422,
+    "water": {
+      "shortname": "HUNTE",
+      "longname": "HUNTE"
+    }
+  },
+  {
+    "uuid": "2eacef2f-7a8f-413a-a2c7-f1da4cf22742",
+    "number": "4960050",
+    "shortname": "HOLLERSIEL",
+    "longname": "HOLLERSIEL",
+    "km": 11.535,
+    "agency": "WSA BREMEN",
+    "longitude": 8.378497094469848,
+    "latitude": 53.16814366204687,
+    "water": {
+      "shortname": "HUNTE",
+      "longname": "HUNTE"
+    }
+  },
+  {
+    "uuid": "b3d88ca6-ea13-4540-a623-c02e43800a3b",
+    "number": "4960060",
+    "shortname": "BUTTELERHÖRNE",
+    "longname": "BUTTELERHÖRNE",
+    "km": 14.249,
+    "agency": "WSA BREMEN",
+    "longitude": 8.412609597352633,
+    "latitude": 53.179899152038196,
+    "water": {
+      "shortname": "HUNTE",
+      "longname": "HUNTE"
+    }
+  },
+  {
+    "uuid": "2e1d458b-f78f-41dc-bebd-e0512578610a",
+    "number": "4960070",
+    "shortname": "HUNTEBRUECK",
+    "longname": "HUNTEBRUECK",
+    "km": 17.814,
+    "agency": "WSA BREMEN",
+    "longitude": 8.447392883379909,
+    "latitude": 53.20028313594166,
+    "water": {
+      "shortname": "HUNTE",
+      "longname": "HUNTE"
+    }
+  },
+  {
+    "uuid": "531da758-b2f5-471d-9d9f-a78576081079",
+    "number": "4960080",
+    "shortname": "ELSFLETH OHRT",
+    "longname": "ELSFLETH OHRT",
+    "km": 21.493,
+    "agency": "WSA BREMEN",
+    "longitude": 8.459939466394742,
+    "latitude": 53.22122319633537,
+    "water": {
+      "shortname": "HUNTE",
+      "longname": "HUNTE"
+    }
+  },
+  {
+    "uuid": "003200ab-d138-49d9-aa52-217817941f85",
+    "number": "166640",
+    "shortname": "ILMENAU",
+    "longname": "ILMENAU",
+    "km": 12.0,
+    "agency": "REGIONALSTELLE SUHL",
+    "longitude": 10.928789935384831,
+    "latitude": 50.680935109710866,
+    "water": {
+      "shortname": "ILM",
+      "longname": "ILM"
+    }
+  },
+  {
+    "uuid": "d7a8df36-2978-45b8-99d1-76d84cf34c01",
+    "number": "5940020",
+    "shortname": "LÜNE",
+    "longname": "LÜNE",
+    "km": 1.48,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.41988826867243,
+    "latitude": 53.26103853118387,
+    "water": {
+      "shortname": "ILMENAU",
+      "longname": "ILMENAU"
+    }
+  },
+  {
+    "uuid": "07830b68-c5b8-42dd-bf48-7176802130d0",
+    "number": "5940029",
+    "shortname": "BARDOWICK OP",
+    "longname": "BARDOWICK OP",
+    "km": 5.531,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.401332363749088,
+    "latitude": 53.29028356771887,
+    "water": {
+      "shortname": "ILMENAU",
+      "longname": "ILMENAU"
+    }
+  },
+  {
+    "uuid": "a238b70f-1198-4b2f-8c03-41f3503e5389",
+    "number": "5940030",
+    "shortname": "BARDOWICK UP",
+    "longname": "BARDOWICK UP",
+    "km": 5.78,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.400999061267543,
+    "latitude": 53.292471122708534,
+    "water": {
+      "shortname": "ILMENAU",
+      "longname": "ILMENAU"
+    }
+  },
+  {
+    "uuid": "eb3d4195-8c73-46b6-87e9-ef0de83edddf",
+    "number": "5940049",
+    "shortname": "WITTORF OP",
+    "longname": "WITTORF OP",
+    "km": 12.437,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.383452653753132,
+    "latitude": 53.341192043701525,
+    "water": {
+      "shortname": "ILMENAU",
+      "longname": "ILMENAU"
+    }
+  },
+  {
+    "uuid": "308c39b6-475f-42c3-857f-7cf257426fa1",
+    "number": "5940050",
+    "shortname": "WITTORF UP",
+    "longname": "WITTORF UP",
+    "km": 12.44,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.383349979808017,
+    "latitude": 53.342657963988884,
+    "water": {
+      "shortname": "ILMENAU",
+      "longname": "ILMENAU"
+    }
+  },
+  {
+    "uuid": "c33c3667-b8c5-484a-8ea0-b92933b5a9f0",
+    "number": "5940070",
+    "shortname": "FAHRENHOLZ OP",
+    "longname": "FAHRENHOLZ OP",
+    "km": 17.67,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.316369840651536,
+    "latitude": 53.360282772129885,
+    "water": {
+      "shortname": "ILMENAU",
+      "longname": "ILMENAU"
+    }
+  },
+  {
+    "uuid": "bb62b28f-9947-42b1-92e4-743a1e0c4a76",
+    "number": "5940060",
+    "shortname": "FAHRENHOLZ UP",
+    "longname": "FAHRENHOLZ UP",
+    "km": 17.7,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.315484436390111,
+    "latitude": 53.36031051186378,
+    "water": {
+      "shortname": "ILMENAU",
+      "longname": "ILMENAU"
+    }
+  },
+  {
+    "uuid": "6b05e8dc-3089-497a-a602-f40c4283d8bb",
+    "number": "5940080",
+    "shortname": "ILMENAU SPERRWERK AP",
+    "longname": "ILMENAU SPERRWERK AP",
+    "km": 28.5,
+    "agency": "WSA LAUENBURG",
+    "longitude": 10.178531367963828,
+    "latitude": 53.39387281905528,
+    "water": {
+      "shortname": "ILMENAU",
+      "longname": "ILMENAU"
+    }
+  },
+  {
+    "uuid": "36243256-7786-4e69-922f-50785d8904bf",
+    "number": "44100013",
+    "shortname": "KOTTHAUSEN",
+    "longname": "KOTTHAUSEN",
+    "km": 3.4,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 8.68278565714364,
+    "latitude": 51.363558419498645,
+    "water": {
+      "shortname": "ITTER_DIEMEL",
+      "longname": "ITTER ZUR DIEMEL"
+    }
+  },
+  {
+    "uuid": "855205e7-1cc9-4c5f-a2c2-7d5d84011708",
+    "number": "42800218",
+    "shortname": "HERZHAUSEN",
+    "longname": "HERZHAUSEN",
+    "km": 1.3,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 8.88881490002891,
+    "latitude": 51.19303245892172,
+    "water": {
+      "shortname": "ITTER EDER",
+      "longname": "ITTER ZUR EDER"
+    }
+  },
+  {
+    "uuid": "f85bd17b-06c7-49bd-8bfc-ee2bf3ffea99",
+    "number": "9440020",
+    "shortname": "WHV ALTER VORHAFEN",
+    "longname": "WHV ALTER VORHAFEN",
+    "km": 1.565,
+    "agency": "WSA WILHELMSHAVEN",
+    "longitude": 8.145133955090275,
+    "latitude": 53.51449558364968,
+    "water": {
+      "shortname": "JADE",
+      "longname": "JADE"
+    }
+  },
+  {
+    "uuid": "f77317d9-654f-4f51-925e-004c592049da",
+    "number": "9440030",
+    "shortname": "WHV NEUER VORHAFEN",
+    "longname": "WHV NEUER VORHAFEN",
+    "km": 4.053,
+    "agency": "WSA WILHELMSHAVEN",
+    "longitude": 8.16072874214752,
+    "latitude": 53.530306059467996,
+    "water": {
+      "shortname": "JADE",
+      "longname": "JADE"
+    }
+  },
+  {
+    "uuid": "fac30fe9-a39c-445a-84de-637a199f1dfa",
+    "number": "9430020",
+    "shortname": "HOOKSIELPLATE",
+    "longname": "HOOKSIELPLATE",
+    "km": 18.098,
+    "agency": "WSA WILHELMSHAVEN",
+    "longitude": 8.148590233830715,
+    "latitude": 53.66916508339961,
+    "water": {
+      "shortname": "JADE",
+      "longname": "JADE"
+    }
+  },
+  {
+    "uuid": "b1cda5a0-115f-4976-a0a6-9d427ff6dceb",
+    "number": "9430030",
+    "shortname": "SCHILLIG",
+    "longname": "SCHILLIG",
+    "km": 24.137,
+    "agency": "WSA WILHELMSHAVEN",
+    "longitude": 8.047073182615408,
+    "latitude": 53.6990043194127,
+    "water": {
+      "shortname": "JADE",
+      "longname": "JADE"
+    }
+  },
+  {
+    "uuid": "c8b9a2b6-b783-417f-8479-3a0d732fb901",
+    "number": "9420010",
+    "shortname": "MELLUMPLATE",
+    "longname": "MELLUMPLATE",
+    "km": 31.13,
+    "agency": "WSA WILHELMSHAVEN",
+    "longitude": 8.092507447705561,
+    "latitude": 53.771713596769814,
+    "water": {
+      "shortname": "JADE",
+      "longname": "JADE"
+    }
+  },
+  {
+    "uuid": "26656fda-cacf-4e92-9935-3ae6e717fe5b",
+    "number": "9420020",
+    "shortname": "WANGEROOGE OST",
+    "longname": "WANGEROOGE OST",
+    "km": 34.999,
+    "agency": "WSA WILHELMSHAVEN",
+    "longitude": 7.984916047278568,
+    "latitude": 53.767077715389604,
+    "water": {
+      "shortname": "JADE",
+      "longname": "JADE"
+    }
+  },
+  {
+    "uuid": "c41d42b1-5b0d-47c9-ba53-d58d3d109b64",
+    "number": "9420030",
+    "shortname": "WANGEROOGE NORD",
+    "longname": "WANGEROOGE NORD",
+    "km": 41.049,
+    "agency": "WSA WILHELMSHAVEN",
+    "longitude": 7.929200210236435,
+    "latitude": 53.80629852774029,
+    "water": {
+      "shortname": "JADE",
+      "longname": "JADE"
+    }
+  },
+  {
+    "uuid": "70039212-c8a8-43fc-82a5-150d95831772",
+    "number": "9420040",
+    "shortname": "WANGEROOGE WEST ",
+    "longname": "WANGEROOGE WEST ",
+    "km": 43.208,
+    "agency": "WSA WILHELMSHAVEN",
+    "longitude": 7.867938460727221,
+    "latitude": 53.776237907291524,
+    "water": {
+      "shortname": "JADE",
+      "longname": "JADE"
+    }
+  },
+  {
+    "uuid": "da893bbd-965a-49b7-a661-707a1ba899d1",
+    "number": "9690084",
+    "shortname": "KARNIN",
+    "longname": "KARNIN",
+    "km": 0.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 13.858494243912022,
+    "latitude": 53.8436648377186,
+    "water": {
+      "shortname": "KLEINES HAFF",
+      "longname": "KLEINES HAFF"
+    }
+  },
+  {
+    "uuid": "c1588dcc-e314-4097-a54c-c0ffbe79209f",
+    "number": "9690088",
+    "shortname": "UECKERMÜNDE",
+    "longname": "UECKERMÜNDE",
+    "km": 0.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 14.066477558939376,
+    "latitude": 53.75031035203513,
+    "water": {
+      "shortname": "KLEINES HAFF",
+      "longname": "KLEINES HAFF"
+    }
+  },
+  {
+    "uuid": "136febf6-1371-4118-a9b8-4275444bda5d",
+    "number": "5970022",
+    "shortname": "ELMSHORN HAFEN",
+    "longname": "ELMSHORN HAFEN",
+    "km": 0.028,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.653894435890026,
+    "latitude": 53.75218229281383,
+    "water": {
+      "shortname": "KRÜCKAU",
+      "longname": "KRÜCKAU"
+    }
+  },
+  {
+    "uuid": "53c277c3-7ddb-4281-9937-97dcfe3753fa",
+    "number": "5970023",
+    "shortname": "KRÜCKAU-SPERRWERK BP",
+    "longname": "KRÜCKAU-SPERRWERK BP",
+    "km": 10.5,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.526956004763068,
+    "latitude": 53.71625803363539,
+    "water": {
+      "shortname": "KRÜCKAU",
+      "longname": "KRÜCKAU"
+    }
+  },
+  {
+    "uuid": "cf6ac249-f20a-400b-8543-31f2d2fe23f0",
+    "number": "4960020",
+    "shortname": "HUNDSMÜHLEN",
+    "longname": "HUNDSMÜHLEN",
+    "km": 5.188,
+    "agency": "WSA BREMEN",
+    "longitude": 8.173069994153126,
+    "latitude": 53.108846927349994,
+    "water": {
+      "shortname": "KÜSTENKANAL",
+      "longname": "KÜSTENKANAL"
+    }
+  },
+  {
+    "uuid": "4e7a6cfa-7548-4f7f-a97a-eb0694881003",
+    "number": "25830056",
+    "shortname": "Marburg",
+    "longname": "MARBURG",
+    "km": -38.7,
+    "agency": "REGIERUNGSPRÄSIDIUM GIESSEN ABTEILUNG STAATLICHES UMWELTAMT MARBURG",
+    "longitude": 8.764488839485487,
+    "latitude": 50.798715477809225,
+    "water": {
+      "shortname": "LAHN",
+      "longname": "LAHN"
+    }
+  },
+  {
+    "uuid": "4b386a6a-996e-4a4a-a440-15d6b40226d4",
+    "number": "25800100",
+    "shortname": "GIESSEN KLÄRWERK",
+    "longname": "GIESSEN KLÄRWERK",
+    "km": -3.21,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 8.64860169166119,
+    "latitude": 50.575037651225514,
+    "water": {
+      "shortname": "LAHN",
+      "longname": "LAHN"
+    }
+  },
+  {
+    "uuid": "32807065-b887-49f0-935a-80033e5f3cb0",
+    "number": "25800200",
+    "shortname": "LEUN NEU",
+    "longname": "LEUN NEU",
+    "km": 25.1,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 8.355230130810975,
+    "latitude": 50.545120232764674,
+    "water": {
+      "shortname": "LAHN",
+      "longname": "LAHN"
+    }
+  },
+  {
+    "uuid": "89038b42-8181-48df-a0cd-2ca3913f2d68",
+    "number": "25800440",
+    "shortname": "LIMBURG SCHLEUSE UP",
+    "longname": "LIMBURG SCHLEUSE UP",
+    "km": 76.611,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 8.065188851061134,
+    "latitude": 50.39151276997554,
+    "water": {
+      "shortname": "LAHN",
+      "longname": "LAHN"
+    }
+  },
+  {
+    "uuid": "eadedeb6-c31e-483f-b6c4-ca0153359ad7",
+    "number": "25800500",
+    "shortname": "DIEZ HAFEN",
+    "longname": "DIEZ HAFEN",
+    "km": 83.7,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 8.005066992072132,
+    "latitude": 50.3723880903084,
+    "water": {
+      "shortname": "LAHN",
+      "longname": "LAHN"
+    }
+  },
+  {
+    "uuid": "64f735fd-88b6-42ea-9cdd-dc18d3806c34",
+    "number": "25800600",
+    "shortname": "KALKOFEN NEU",
+    "longname": "KALKOFEN NEU",
+    "km": 106.4,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 7.8898156192725235,
+    "latitude": 50.31783177830708,
+    "water": {
+      "shortname": "LAHN",
+      "longname": "LAHN"
+    }
+  },
+  {
+    "uuid": "6b6b31e2-e5c7-4c85-8405-b8d0b6e158c4",
+    "number": "25800800",
+    "shortname": "LAHNSTEIN SCHLEUSE UP",
+    "longname": "LAHNSTEIN SCHLEUSE UP",
+    "km": 135.986,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 7.612956624441373,
+    "latitude": 50.30803174924558,
+    "water": {
+      "shortname": "LAHN",
+      "longname": "LAHN"
+    }
+  },
+  {
+    "uuid": "d198c901-fe4e-4c3f-9323-d6a771f51960",
+    "number": "586630",
+    "shortname": "BERLIN-UNTERSCHLEUSE UP",
+    "longname": "BERLIN-UNTERSCHLEUSE UP",
+    "km": 1.61,
+    "agency": "WSA BERLIN",
+    "longitude": 13.335037089237414,
+    "latitude": 52.5116077512151,
+    "water": {
+      "shortname": "LWK",
+      "longname": "LANDWEHRKANAL"
+    }
+  },
+  {
+    "uuid": "503ad891-c9de-428c-b682-434510ed9de8",
+    "number": "586620",
+    "shortname": "BERLIN-UNTERSCHLEUSE OP",
+    "longname": "BERLIN-UNTERSCHLEUSE OP",
+    "km": 1.71,
+    "agency": "WSA BERLIN",
+    "longitude": 13.336518600769521,
+    "latitude": 52.5114022960738,
+    "water": {
+      "shortname": "LWK",
+      "longname": "LANDWEHRKANAL"
+    }
+  },
+  {
+    "uuid": "c42ad3df-cfe3-4dca-9dcf-dbbaac569a2f",
+    "number": "586610",
+    "shortname": "BERLIN-OBERSCHLEUSE UP",
+    "longname": "BERLIN-OBERSCHLEUSE UP",
+    "km": 10.51,
+    "agency": "WSA BERLIN",
+    "longitude": 13.448832568216403,
+    "latitude": 52.497408279406315,
+    "water": {
+      "shortname": "LWK",
+      "longname": "LANDWEHRKANAL"
+    }
+  },
+  {
+    "uuid": "24ce3282-39dd-4f2f-ba80-9676e59de7c7",
+    "number": "586600",
+    "shortname": "BERLIN-OBERSCHLEUSE OP",
+    "longname": "BERLIN-OBERSCHLEUSE OP",
+    "km": 10.62,
+    "agency": "WSA BERLIN",
+    "longitude": 13.449729991452958,
+    "latitude": 52.49827804052587,
+    "water": {
+      "shortname": "LWK",
+      "longname": "LANDWEHRKANAL"
+    }
+  },
+  {
+    "uuid": "d4df3617-8209-4bcd-948e-fa723beb6666",
+    "number": "3880010",
+    "shortname": "DREYSCHLOOT",
+    "longname": "DREYSCHLOOT",
+    "km": 0.73,
+    "agency": "WSA EMS-NORDSEE",
+    "longitude": 7.669140034394164,
+    "latitude": 53.17799359137072,
+    "water": {
+      "shortname": "LEDA",
+      "longname": "LEDA"
+    }
+  },
+  {
+    "uuid": "5e6ae93a-7856-4005-bc77-fc6e4f5ad630",
+    "number": "3880050",
+    "shortname": "LEDASPERRWERK UP",
+    "longname": "LEDASPERRWERK UP",
+    "km": 21.125,
+    "agency": "WSA EMS-NORDSEE",
+    "longitude": 7.473235725839977,
+    "latitude": 53.2135493368152,
+    "water": {
+      "shortname": "LEDA",
+      "longname": "LEDA"
+    }
+  },
+  {
+    "uuid": "8e16bd66-c49b-406a-930e-4dccfb330ff5",
+    "number": "48800301",
+    "shortname": "SCHWARMSTEDT",
+    "longname": "SCHWARMSTEDT",
+    "km": 6.2,
+    "agency": "WSA VERDEN",
+    "longitude": 9.604020370697823,
+    "latitude": 52.683400781638795,
+    "water": {
+      "shortname": "LEINE",
+      "longname": "LEINE"
+    }
+  },
+  {
+    "uuid": "dda39817-d01d-467f-a6a3-7487011a45d1",
+    "number": "48800200",
+    "shortname": "NEUSTADT",
+    "longname": "NEUSTADT",
+    "km": 45.74,
+    "agency": "WSA VERDEN",
+    "longitude": 9.466717295927152,
+    "latitude": 52.50959314116962,
+    "water": {
+      "shortname": "LEINE",
+      "longname": "LEINE"
+    }
+  },
+  {
+    "uuid": "8134af78-3100-4679-bf1d-be82410df429",
+    "number": "48800108",
+    "shortname": "HERRENHAUSEN",
+    "longname": "HERRENHAUSEN",
+    "km": 87.07,
+    "agency": "WSA VERDEN",
+    "longitude": 9.676062044544127,
+    "latitude": 52.38806777456838,
+    "water": {
+      "shortname": "LEINE",
+      "longname": "LEINE"
+    }
+  },
+  {
+    "uuid": "76844306-4c37-4a6f-aac4-9e518e96306f",
+    "number": "4930010",
+    "shortname": "WASSERHORST",
+    "longname": "WASSERHORST",
+    "km": 2.3,
+    "agency": "WSA BREMEN",
+    "longitude": 8.718207902429286,
+    "latitude": 53.162825441338896,
+    "water": {
+      "shortname": "LESUM",
+      "longname": "LESUM"
+    }
+  },
+  {
+    "uuid": "9592d736-26af-46e5-84fd-e43e89b66566",
+    "number": "581120",
+    "shortname": "HIMMELPFORT UP",
+    "longname": "HIMMELPFORT UP",
+    "km": 0.249,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.229973172984126,
+    "latitude": 53.17717833114318,
+    "water": {
+      "shortname": "LyG",
+      "longname": "LYCHENER GEWÄSSER"
+    }
+  },
+  {
+    "uuid": "bcdfa310-d887-49bf-a562-1e439759044a",
+    "number": "581110",
+    "shortname": "HIMMELPFORT OP",
+    "longname": "HIMMELPFORT OP",
+    "km": 0.304,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.230639317223481,
+    "latitude": 53.17745900577479,
+    "water": {
+      "shortname": "LyG",
+      "longname": "LYCHENER GEWÄSSER"
+    }
+  },
+  {
+    "uuid": "3244d787-f884-40ae-9752-ad3507309edc",
+    "number": "5960020",
+    "shortname": "HORNEBURG",
+    "longname": "HORNEBURG",
+    "km": 0.25,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.591134701843528,
+    "latitude": 53.51227375628912,
+    "water": {
+      "shortname": "LÜHE",
+      "longname": "LÜHE"
+    }
+  },
+  {
+    "uuid": "259dcb4a-2366-45a6-a448-b06a8941ae16",
+    "number": "126016",
+    "shortname": "LÜHORT LFK",
+    "longname": "LÜHORT LFK",
+    "km": 12.6,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.633671953854105,
+    "latitude": 53.5713750668064,
+    "water": {
+      "shortname": "LÜHE",
+      "longname": "LÜHE"
+    }
+  },
+  {
+    "uuid": "db1684c1-7ffc-4e8a-b8cf-8240a0d03519",
+    "number": "24900108",
+    "shortname": "RAUNHEIM",
+    "longname": "RAUNHEIM",
+    "km": 12.213,
+    "agency": "WSA ASCHAFFENBURG",
+    "longitude": 8.448287072901215,
+    "latitude": 50.01615724952765,
+    "water": {
+      "shortname": "MAIN",
+      "longname": "MAIN"
+    }
+  },
+  {
+    "uuid": "66ff3eb4-513b-478b-abd2-2f5126ea66fd",
+    "number": "24700404",
+    "shortname": "FRANKFURT OSTHAFEN",
+    "longname": "FRANKFURT OSTHAFEN",
+    "km": 37.591,
+    "agency": "WSA ASCHAFFENBURG",
+    "longitude": 8.714994541411016,
+    "latitude": 50.105736840936274,
+    "water": {
+      "shortname": "MAIN",
+      "longname": "MAIN"
+    }
+  },
+  {
+    "uuid": "07374faf-2039-4430-ae6d-adc0e0784c4b",
+    "number": "24700347",
+    "shortname": "HANAU BRÜCKE DFH",
+    "longname": "HANAU BRÜCKE DFH",
+    "km": 56.398,
+    "agency": "WSA ASCHAFFENBURG",
+    "longitude": 8.917580195300888,
+    "latitude": 50.12018025508421,
+    "water": {
+      "shortname": "MAIN",
+      "longname": "MAIN"
+    }
+  },
+  {
+    "uuid": "da453ad0-5f1d-417c-baa3-74ae297f0b7a",
+    "number": "24700346",
+    "shortname": "AUHEIM BRÜCKE DFH",
+    "longname": "AUHEIM BRÜCKE DFH",
+    "km": 59.56,
+    "agency": "WSA ASCHAFFENBURG",
+    "longitude": 8.936362926976006,
+    "latitude": 50.107039557807234,
+    "water": {
+      "shortname": "MAIN",
+      "longname": "MAIN"
+    }
+  },
+  {
+    "uuid": "27eed51b-c0a4-417e-926b-bb4194bfb341",
+    "number": "24700335",
+    "shortname": "KROTZENBURG",
+    "longname": "KROTZENBURG",
+    "km": 63.23,
+    "agency": "WSA ASCHAFFENBURG",
+    "longitude": 8.953596258141465,
+    "latitude": 50.07971675184836,
+    "water": {
+      "shortname": "MAIN",
+      "longname": "MAIN"
+    }
+  },
+  {
+    "uuid": "4627475d-ccda-4d53-8f13-28527c49eaf5",
+    "number": "24700325",
+    "shortname": "MAINFLINGEN",
+    "longname": "MAINFLINGEN",
+    "km": 76.43,
+    "agency": "WSA ASCHAFFENBURG",
+    "longitude": 9.033733207247224,
+    "latitude": 50.01536471997927,
+    "water": {
+      "shortname": "MAIN",
+      "longname": "MAIN"
+    }
+  },
+  {
+    "uuid": "3ef81fc0-33dc-4f67-8bb8-3f66975292d5",
+    "number": "24700323",
+    "shortname": "KLEINOSTHEIM_WUK",
+    "longname": "KLEINOSTHEIM_WUK",
+    "km": 77.8,
+    "agency": "WSA ASCHAFFENBURG",
+    "longitude": 9.040708664679794,
+    "latitude": 50.00823806917759,
+    "water": {
+      "shortname": "MAIN",
+      "longname": "MAIN"
+    }
+  },
+  {
+    "uuid": "3c7cfb10-c866-404b-b11c-0d79986f865a",
+    "number": "24700302",
+    "shortname": "OBERNAU",
+    "longname": "OBERNAU",
+    "km": 92.385,
+    "agency": "WSA ASCHAFFENBURG",
+    "longitude": 9.129075053362595,
+    "latitude": 49.933799962999025,
+    "water": {
+      "shortname": "MAIN",
+      "longname": "MAIN"
+    }
+  },
+  {
+    "uuid": "355b02d2-c578-46d9-a56b-8046d470cb95",
+    "number": "24700200",
+    "shortname": "KLEINHEUBACH",
+    "longname": "KLEINHEUBACH",
+    "km": 121.741,
+    "agency": "WSA ASCHAFFENBURG",
+    "longitude": 9.233008925646716,
+    "latitude": 49.71362016104499,
+    "water": {
+      "shortname": "MAIN",
+      "longname": "MAIN"
+    }
+  },
+  {
+    "uuid": "a919f57f-8378-42d8-82f8-b87eaf008641",
+    "number": "24700109",
+    "shortname": "FAULBACH",
+    "longname": "FAULBACH",
+    "km": 146.63,
+    "agency": "WSA ASCHAFFENBURG",
+    "longitude": 9.438827050517727,
+    "latitude": 49.78498542301384,
+    "water": {
+      "shortname": "MAIN",
+      "longname": "MAIN"
+    }
+  },
+  {
+    "uuid": "0e065a22-9a0b-4f1d-b813-22fe6321bb1a",
+    "number": "24709089",
+    "shortname": "WERTHEIM",
+    "longname": "WERTHEIM",
+    "km": 156.96,
+    "agency": "WSA ASCHAFFENBURG",
+    "longitude": 9.518303910797995,
+    "latitude": 49.760944890765714,
+    "water": {
+      "shortname": "MAIN",
+      "longname": "MAIN"
+    }
+  },
+  {
+    "uuid": "1ed983c3-114c-4fcc-a1db-61d336cf045f",
+    "number": "24500100",
+    "shortname": "STEINBACH",
+    "longname": "STEINBACH",
+    "km": 200.52,
+    "agency": "WSA SCHWEINFURT",
+    "longitude": 9.602081047495362,
+    "latitude": 50.011050343502575,
+    "water": {
+      "shortname": "MAIN",
+      "longname": "MAIN"
+    }
+  },
+  {
+    "uuid": "915d76e1-3bf9-4e37-9a9a-4d144cd771cc",
+    "number": "24300600",
+    "shortname": "WÜRZBURG",
+    "longname": "WÜRZBURG",
+    "km": 251.97,
+    "agency": "WSA SCHWEINFURT",
+    "longitude": 9.925968763247354,
+    "latitude": 49.796208970188495,
+    "water": {
+      "shortname": "MAIN",
+      "longname": "MAIN"
+    }
+  },
+  {
+    "uuid": "3de69bf8-dcbb-4afb-a15b-a8683a6a689c",
+    "number": "24300406",
+    "shortname": "ASTHEIM",
+    "longname": "ASTHEIM",
+    "km": 311.22,
+    "agency": "WSA SCHWEINFURT",
+    "longitude": 10.217655657401856,
+    "latitude": 49.8584094747879,
+    "water": {
+      "shortname": "MAIN",
+      "longname": "MAIN"
+    }
+  },
+  {
+    "uuid": "42ecae60-eeb3-4b41-9721-46b3f12d04b8",
+    "number": "24300304",
+    "shortname": "SCHWEINFURT NEUER HAFEN",
+    "longname": "SCHWEINFURT NEUER HAFEN",
+    "km": 330.78,
+    "agency": "WSA SCHWEINFURT",
+    "longitude": 10.2218584351717,
+    "latitude": 50.03098323632883,
+    "water": {
+      "shortname": "MAIN",
+      "longname": "MAIN"
+    }
+  },
+  {
+    "uuid": "a77aad00-caa0-44a2-95cb-8afd9c4ff00c",
+    "number": "24300202",
+    "shortname": "TRUNSTADT",
+    "longname": "TRUNSTADT",
+    "km": 378.44,
+    "agency": "WSA SCHWEINFURT",
+    "longitude": 10.755205231371262,
+    "latitude": 49.929695902681146,
+    "water": {
+      "shortname": "MAIN",
+      "longname": "MAIN"
+    }
+  },
+  {
+    "uuid": "ff02f181-491c-4925-ad13-07edd2ddb3f1",
+    "number": "24300042",
+    "shortname": "BAMBERG",
+    "longname": "BAMBERG",
+    "km": 7.31,
+    "agency": "WSA NÜRNBERG",
+    "longitude": 10.906536913690166,
+    "latitude": 49.88205058255768,
+    "water": {
+      "shortname": "MDK",
+      "longname": "MAIN-DONAU-KANAL"
+    }
+  },
+  {
+    "uuid": "4a69e82e-97a3-4573-8aeb-b695c1eaa0b1",
+    "number": "13409200",
+    "shortname": "RIEDENBURG_UP",
+    "longname": "RIEDENBURG_UP",
+    "km": 151.2,
+    "agency": "WSA NÜRNBERG",
+    "longitude": 11.685169669607676,
+    "latitude": 48.973380279184966,
+    "water": {
+      "shortname": "MDK",
+      "longname": "MAIN-DONAU-KANAL"
+    }
+  },
+  {
+    "uuid": "a1cf60be-8149-445d-a7a6-e7c7e7051944",
+    "number": "581550",
+    "shortname": "LIEBENWALDE UP",
+    "longname": "LIEBENWALDE UP",
+    "km": 43.261,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.396056310875569,
+    "latitude": 52.850305729880425,
+    "water": {
+      "shortname": "MZK",
+      "longname": "MALZER KANAL"
+    }
+  },
+  {
+    "uuid": "3f8ceb6d-e95d-46e6-b523-3d15fe706049",
+    "number": "581540",
+    "shortname": "LIEBENWALDE OP",
+    "longname": "LIEBENWALDE OP",
+    "km": 45.334,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.396077065717305,
+    "latitude": 52.85095253062228,
+    "water": {
+      "shortname": "MZK",
+      "longname": "MALZER KANAL"
+    }
+  },
+  {
+    "uuid": "6c7c180f-6dc1-4c4d-97bd-814080df8bcf",
+    "number": "31010010",
+    "shortname": "HOERSTEL",
+    "longname": "HOERSTEL",
+    "km": 0.637,
+    "agency": "WSA MINDEN",
+    "longitude": 7.605447065657079,
+    "latitude": 52.28313187138471,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "7af19499-8bc8-4a91-964d-88618ea8998a",
+    "number": "31010011",
+    "shortname": "RECKE",
+    "longname": "RECKE",
+    "km": 12.595,
+    "agency": "WSA MINDEN",
+    "longitude": 7.70627373472818,
+    "latitude": 52.354327818803434,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "bec8a6a5-c3de-4322-856a-870ceb992fe4",
+    "number": "31010020",
+    "shortname": "BRAMSCHE",
+    "longname": "BRAMSCHE",
+    "km": 31.95,
+    "agency": "WSA MINDEN",
+    "longitude": 7.978172733704688,
+    "latitude": 52.39616711650504,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "1125a391-6586-4951-865f-3a2c72f2c81a",
+    "number": "31010032",
+    "shortname": "BROXTEN",
+    "longname": "BROXTEN",
+    "km": 47.43,
+    "agency": "WSA MINDEN",
+    "longitude": 8.190182787252548,
+    "latitude": 52.39066742566611,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "6760b547-a7e7-408a-b3aa-529fe376bfcd",
+    "number": "31010030",
+    "shortname": "BAD ESSEN",
+    "longname": "BAD ESSEN",
+    "km": 60.8,
+    "agency": "WSA MINDEN",
+    "longitude": 8.342519632727996,
+    "latitude": 52.32454057046036,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "c2aa9164-1073-4271-82ef-44344fbe456e",
+    "number": "31010031",
+    "shortname": "LUEBBECKE",
+    "longname": "LUEBBECKE",
+    "km": 80.092,
+    "agency": "WSA MINDEN",
+    "longitude": 8.617140963904099,
+    "latitude": 52.334960638513955,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "ac970eb0-f5cf-4db0-90f0-e281f5d4775c",
+    "number": "31010041",
+    "shortname": "HAHLEN",
+    "longname": "HAHLEN",
+    "km": 98.09,
+    "agency": "WSA MINDEN",
+    "longitude": 8.868900742195017,
+    "latitude": 52.2973109844654,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "6d3a3e2a-713c-4232-9b70-834a2c0e9705",
+    "number": "3101004",
+    "shortname": "MINDEN",
+    "longname": "MINDEN",
+    "km": 102.132,
+    "agency": "WSA MINDEN",
+    "longitude": 8.926898351900594,
+    "latitude": 52.303075757687004,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "8bccd43b-ed6f-4ed8-ae6e-80ad7e330658",
+    "number": "31010045",
+    "shortname": "WESER",
+    "longname": "WESER",
+    "km": 102.5,
+    "agency": "WSA MINDEN",
+    "longitude": 8.932229359197,
+    "latitude": 52.3036058995563,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "d2c8f60e-fda4-4744-9017-9c727fdcfe1f",
+    "number": "31010042",
+    "shortname": "BERENBUSCH",
+    "longname": "BERENBUSCH",
+    "km": 106.732,
+    "agency": "WSA MINDEN",
+    "longitude": 8.990630381569474,
+    "latitude": 52.29494842924103,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "2f1080ba-97a2-40b3-af4e-3ac3d53d27de",
+    "number": "31010040",
+    "shortname": "WARBER GRABEN",
+    "longname": "WARBER GRABEN",
+    "km": 111.75,
+    "agency": "WSA MINDEN",
+    "longitude": 9.053354087265255,
+    "latitude": 52.3111172305382,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "c1f06401-9488-4a27-b932-59cce52c5819",
+    "number": "31010043",
+    "shortname": "RUSBEND",
+    "longname": "RUSBEND",
+    "km": 112.16,
+    "agency": "WSA MINDEN",
+    "longitude": 9.058269750285689,
+    "latitude": 52.31324459320368,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "864a8111-d0c1-4b74-b94e-515f0869355e",
+    "number": "31010044",
+    "shortname": "NIENBRUEGGE",
+    "longname": "NIENBRUEGGE",
+    "km": 126.653,
+    "agency": "WSA MINDEN",
+    "longitude": 9.228531529696014,
+    "latitude": 52.37919574366444,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "eb24b5a3-5102-429b-93a9-15656fee850f",
+    "number": "31010052",
+    "shortname": "RODENBERGER AUE-WEST",
+    "longname": "RODENBERGER AUE-WEST",
+    "km": 132.68,
+    "agency": "WSA BRAUNSCHWEIG",
+    "longitude": 9.315912784359138,
+    "latitude": 52.38758640700614,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "6288de60-38be-4291-9ff6-dcf6c0f58cea",
+    "number": "31010051",
+    "shortname": "RODENBERGER AUE-OST",
+    "longname": "RODENBERGER AUE-OST",
+    "km": 133.55,
+    "agency": "WSA BRAUNSCHWEIG",
+    "longitude": 9.328651380645706,
+    "latitude": 52.38820297196957,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "516c4814-d70b-47bf-99bf-a76844b94e5e",
+    "number": "31010050",
+    "shortname": "LOHNDE",
+    "longname": "LOHNDE",
+    "km": 150.1,
+    "agency": "WSA BRAUNSCHWEIG",
+    "longitude": 9.56415099470703,
+    "latitude": 52.399312263449794,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "27dfd137-3b88-42e8-9baf-6bee76e0717c",
+    "number": "31010062",
+    "shortname": "HANN. LIST",
+    "longname": "HANN. LIST",
+    "km": 163.56,
+    "agency": "WSA BRAUNSCHWEIG",
+    "longitude": 9.74576556778922,
+    "latitude": 52.40596232644757,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "dd41a7d6-9b11-4ec4-9518-388266750cfa",
+    "number": "31010060",
+    "shortname": "ANDERTEN UW",
+    "longname": "ANDERTEN UW",
+    "km": 173.425,
+    "agency": "WSA BRAUNSCHWEIG",
+    "longitude": 9.858777009971709,
+    "latitude": 52.3667148809812,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "98daae03-5aaa-4284-9717-7d52da4fe063",
+    "number": "31010063",
+    "shortname": "ANDERTEN",
+    "longname": "ANDERTEN",
+    "km": 174.5,
+    "agency": "WSA BRAUNSCHWEIG",
+    "longitude": 9.866583192357151,
+    "latitude": 52.35832999049542,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "bc20d819-1782-4588-885d-129f21a27cf9",
+    "number": "31010061",
+    "shortname": "ANDERTEN OW",
+    "longname": "ANDERTEN OW",
+    "km": 174.96,
+    "agency": "WSA BRAUNSCHWEIG",
+    "longitude": 9.869744389448229,
+    "latitude": 52.35467740765629,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "ab0d9117-83f3-412d-bce5-b3e698246c0b",
+    "number": "31010070",
+    "shortname": "SEHNDE",
+    "longname": "SEHNDE",
+    "km": 183.58,
+    "agency": "WSA BRAUNSCHWEIG",
+    "longitude": 9.962091467569225,
+    "latitude": 52.30604876905137,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "be05603a-83e4-48d4-90d9-e074b7d34dcd",
+    "number": "31010071",
+    "shortname": "MEHRUM",
+    "longname": "MEHRUM",
+    "km": 192.556,
+    "agency": "WSA BRAUNSCHWEIG",
+    "longitude": 10.093323740574123,
+    "latitude": 52.31074646602995,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "42b865fb-5dd8-4204-a7aa-260704d69e21",
+    "number": "31010080",
+    "shortname": "THUNE",
+    "longname": "THUNE",
+    "km": 222.85,
+    "agency": "WSA BRAUNSCHWEIG",
+    "longitude": 10.51713424608098,
+    "latitude": 52.33523660910899,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "a8604e8f-9330-4431-8cf6-0a68fc793c82",
+    "number": "31010092",
+    "shortname": "SUELFELD OW",
+    "longname": "SUELFELD OW",
+    "km": 235.7,
+    "agency": "WSA UELZEN",
+    "longitude": 10.647378490339182,
+    "latitude": 52.416830457290295,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "9dfb4b0b-daa6-4a90-9a82-60734d3d2f04",
+    "number": "31010094",
+    "shortname": "SUELFELD",
+    "longname": "SUELFELD",
+    "km": 236.8,
+    "agency": "WSA UELZEN",
+    "longitude": 10.661979362056854,
+    "latitude": 52.421070769420005,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "892183d6-3a28-4347-afb4-bc89602ca927",
+    "number": "31010091",
+    "shortname": "SUELFELD UW",
+    "longname": "SUELFELD UW",
+    "km": 238.0,
+    "agency": "WSA UELZEN",
+    "longitude": 10.678298136429536,
+    "latitude": 52.425073065756166,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "dbb2bb9f-0f80-4df4-9d5c-98af2ee41826",
+    "number": "31010090",
+    "shortname": "VORSFELDE",
+    "longname": "VORSFELDE",
+    "km": 249.12,
+    "agency": "WSA UELZEN",
+    "longitude": 10.840641047318789,
+    "latitude": 52.432888180238834,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "4ed5f6da-b7a0-4431-ab1f-1a26e69a21bc",
+    "number": "31010093",
+    "shortname": "RUEHEN",
+    "longname": "RUEHEN",
+    "km": 256.13,
+    "agency": "WSA UELZEN",
+    "longitude": 10.909579440422446,
+    "latitude": 52.478820809218284,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "36f80081-9353-4ab1-8e61-07a5509f1cea",
+    "number": "3101012",
+    "shortname": "VELSDORF",
+    "longname": "VELSDORF",
+    "km": 283.1,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.27265033711792,
+    "latitude": 52.40916386843749,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "90d92801-c13c-4b1a-8885-83d1a07d6db8",
+    "number": "3101013",
+    "shortname": "HALDENSLEBEN",
+    "longname": "HALDENSLEBEN",
+    "km": 300.9,
+    "agency": "WSA UELZEN",
+    "longitude": 11.408771857381966,
+    "latitude": 52.27792184826823,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "32b997c2-d97c-452a-a5c1-ee4592a15b4c",
+    "number": "3101018",
+    "shortname": "KANALBRÜCKE",
+    "longname": "KANALBRÜCKE",
+    "km": 321.33,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.689096910025187,
+    "latitude": 52.22968857131459,
+    "water": {
+      "shortname": "MLK",
+      "longname": "MITTELLANDKANAL"
+    }
+  },
+  {
+    "uuid": "896aed46-8290-49b0-a6f8-90d53027cd1f",
+    "number": "26900910",
+    "shortname": "Koblenz-Lützel DFH",
+    "longname": "KOBLENZ-LÜTZEL DFH",
+    "km": 1.3,
+    "agency": "WSA KOBLENZ",
+    "longitude": 7.590794333417598,
+    "latitude": 50.36491217910447,
+    "water": {
+      "shortname": "MOSEL",
+      "longname": "MOSEL"
+    }
+  },
+  {
+    "uuid": "9dbcac54-db55-4d24-88b2-74a0d75a68c4",
+    "number": "26900900",
+    "shortname": "KOBLENZ UP",
+    "longname": "KOBLENZ UP",
+    "km": 1.91,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 7.583151547037509,
+    "latitude": 50.36683229879485,
+    "water": {
+      "shortname": "MOSEL",
+      "longname": "MOSEL"
+    }
+  },
+  {
+    "uuid": "dc1bb420-ec60-4bc3-bce2-b3869a2513df",
+    "number": "26900700",
+    "shortname": "LEHMEN UP",
+    "longname": "LEHMEN UP",
+    "km": 20.37,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 7.457699265736656,
+    "latitude": 50.278472281764,
+    "water": {
+      "shortname": "MOSEL",
+      "longname": "MOSEL"
+    }
+  },
+  {
+    "uuid": "16578824-88de-4700-ab09-f61dbb1182bd",
+    "number": "26900510",
+    "shortname": "ALKEN",
+    "longname": "ALKEN",
+    "km": 24.13,
+    "agency": "WSA KOBLENZ",
+    "longitude": 7.446100426875524,
+    "latitude": 50.250183781799535,
+    "water": {
+      "shortname": "MOSEL",
+      "longname": "MOSEL"
+    }
+  },
+  {
+    "uuid": "edc67ca3-b597-402a-9037-ff39ee816452",
+    "number": "26900500",
+    "shortname": "MÜDEN UP",
+    "longname": "MÜDEN UP",
+    "km": 36.8,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 7.336870435150974,
+    "latitude": 50.18243687736841,
+    "water": {
+      "shortname": "MOSEL",
+      "longname": "MOSEL"
+    }
+  },
+  {
+    "uuid": "768df4e9-ed5a-4141-901b-e25ac404d559",
+    "number": "26900400",
+    "shortname": "COCHEM",
+    "longname": "COCHEM",
+    "km": 51.6,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 7.167665994277785,
+    "latitude": 50.14451463419676,
+    "water": {
+      "shortname": "MOSEL",
+      "longname": "MOSEL"
+    }
+  },
+  {
+    "uuid": "583420a8-8903-485e-8c35-003814506838",
+    "number": "26900300",
+    "shortname": "FANKEL UP",
+    "longname": "FANKEL UP",
+    "km": 58.94,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 7.227314292498862,
+    "latitude": 50.12800012686217,
+    "water": {
+      "shortname": "MOSEL",
+      "longname": "MOSEL"
+    }
+  },
+  {
+    "uuid": "20640279-2334-4acd-afb5-c8f3afc18379",
+    "number": "26900100",
+    "shortname": "SANKT ALDEGUND UP",
+    "longname": "SANKT ALDEGUND UP",
+    "km": 78.084,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 7.133981076586329,
+    "latitude": 50.08933523494645,
+    "water": {
+      "shortname": "MOSEL",
+      "longname": "MOSEL"
+    }
+  },
+  {
+    "uuid": "ee861944-647f-4242-bf61-60f9b9d75fb7",
+    "number": "26700900",
+    "shortname": "ENKIRCH UP",
+    "longname": "ENKIRCH UP",
+    "km": 102.626,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 7.1229736756543645,
+    "latitude": 49.978080447156906,
+    "water": {
+      "shortname": "MOSEL",
+      "longname": "MOSEL"
+    }
+  },
+  {
+    "uuid": "d867e7e9-feb9-4d36-8757-4afd865e697b",
+    "number": "26700600",
+    "shortname": "ZELTINGEN UP",
+    "longname": "ZELTINGEN UP",
+    "km": 123.4,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 7.016038265799196,
+    "latitude": 49.95018030455771,
+    "water": {
+      "shortname": "MOSEL",
+      "longname": "MOSEL"
+    }
+  },
+  {
+    "uuid": "a392113c-d040-4b36-b47d-9099275bb308",
+    "number": "26700400",
+    "shortname": "WINTRICH UP",
+    "longname": "WINTRICH UP",
+    "km": 141.1,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 6.946620150874742,
+    "latitude": 49.8757095305584,
+    "water": {
+      "shortname": "MOSEL",
+      "longname": "MOSEL"
+    }
+  },
+  {
+    "uuid": "dc344605-c507-4054-b4e3-293cf0602bc4",
+    "number": "26700200",
+    "shortname": "DETZEM UP",
+    "longname": "DETZEM UP",
+    "km": 165.4,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 6.845035832609275,
+    "latitude": 49.81851246888537,
+    "water": {
+      "shortname": "MOSEL",
+      "longname": "MOSEL"
+    }
+  },
+  {
+    "uuid": "abd34ee6-a578-4639-b73d-fa4e08f40345",
+    "number": "26500150",
+    "shortname": "RUWER",
+    "longname": "RUWER",
+    "km": 185.94,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 6.704233541878358,
+    "latitude": 49.78305164589679,
+    "water": {
+      "shortname": "MOSEL",
+      "longname": "MOSEL"
+    }
+  },
+  {
+    "uuid": "3bec53ca-444e-4014-a7b0-07b3591e954b",
+    "number": "26500100",
+    "shortname": "TRIER UP",
+    "longname": "TRIER UP",
+    "km": 195.3,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 6.626853440931648,
+    "latitude": 49.7321894338546,
+    "water": {
+      "shortname": "MOSEL",
+      "longname": "MOSEL"
+    }
+  },
+  {
+    "uuid": "69308142-f78e-4877-9af8-e7221b01d303",
+    "number": "26100200",
+    "shortname": "GREVENMACHER UP",
+    "longname": "GREVENMACHER UP",
+    "km": 212.5,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 6.43926207002406,
+    "latitude": 49.673564112137775,
+    "water": {
+      "shortname": "MOSEL",
+      "longname": "MOSEL"
+    }
+  },
+  {
+    "uuid": "bb5560fc-7995-40a2-b92f-3d828c67dcfa",
+    "number": "26100140",
+    "shortname": "WINCHERINGEN",
+    "longname": "WINCHERINGEN",
+    "km": 222.2,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 6.40445703822861,
+    "latitude": 49.60679094732159,
+    "water": {
+      "shortname": "MOSEL",
+      "longname": "MOSEL"
+    }
+  },
+  {
+    "uuid": "dfdf753b-75bd-46f0-8cde-15545be9bfba",
+    "number": "26100130",
+    "shortname": "STADTBREDIMUS UP",
+    "longname": "STADTBREDIMUS UP",
+    "km": 229.44,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 6.372088777819485,
+    "latitude": 49.563031581358466,
+    "water": {
+      "shortname": "MOSEL",
+      "longname": "MOSEL"
+    }
+  },
+  {
+    "uuid": "c263ea53-ca4d-41f5-b3f5-6178fec302aa",
+    "number": "26100100",
+    "shortname": "PERL",
+    "longname": "PERL",
+    "km": 241.8,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 6.369034818740495,
+    "latitude": 49.47257532014283,
+    "water": {
+      "shortname": "MOSEL",
+      "longname": "MOSEL"
+    }
+  },
+  {
+    "uuid": "cfad4ee5-580f-4df2-918b-bc89c615ad0b",
+    "number": "582670",
+    "shortname": "GROSSE TRÄNKE WEHR UP",
+    "longname": "GROSSE TRÄNKE WEHR UP",
+    "km": 44.91,
+    "agency": "WSA BERLIN",
+    "longitude": 13.996388122651227,
+    "latitude": 52.36905285886845,
+    "water": {
+      "shortname": "MGS",
+      "longname": "MÜGGELSPREE"
+    }
+  },
+  {
+    "uuid": "81630fdd-5949-412b-a2e0-d3da8bc8bcda",
+    "number": "582660",
+    "shortname": "GROSSE TRÄNKE WEHR OP",
+    "longname": "GROSSE TRÄNKE WEHR OP",
+    "km": 45.03,
+    "agency": "WSA BERLIN",
+    "longitude": 13.996955481640262,
+    "latitude": 52.36798821014676,
+    "water": {
+      "shortname": "MGS",
+      "longname": "MÜGGELSPREE"
+    }
+  },
+  {
+    "uuid": "ad3a51da-2e25-4818-b96f-6a6d8a20d803",
+    "number": "596460",
+    "shortname": "DOEMITZ UP",
+    "longname": "DOEMITZ UP",
+    "km": 0.91,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.25997267677736,
+    "latitude": 53.140179594500715,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "ec8188ee-f4e4-4f5e-91ae-472e765060cd",
+    "number": "596450",
+    "shortname": "DOEMITZ OP",
+    "longname": "DOEMITZ OP",
+    "km": 1.01,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.260589695259206,
+    "latitude": 53.14105864230038,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "30739ff3-9d71-4e38-991c-0f7a2f54ed2d",
+    "number": "596430",
+    "shortname": "NEU KALLISS OP",
+    "longname": "NEU KALLISS OP",
+    "km": 4.97,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.286381754482113,
+    "latitude": 53.17204427845669,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "a5902c55-6ff4-4bbe-88a1-ebba45b03cec",
+    "number": "596410",
+    "shortname": "FINDENWIRUNSHIER OP",
+    "longname": "FINDENWIRUNSHIER OP",
+    "km": 5.84,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.294939237662819,
+    "latitude": 53.17767266477778,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "a64918a6-e6f5-495e-ad2d-a8e3655c9424",
+    "number": "596400",
+    "shortname": "MALLISS UP",
+    "longname": "MALLISS UP",
+    "km": 9.43,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.343941037741446,
+    "latitude": 53.19043907652982,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "497c29ee-32b2-4535-ac5f-3881a106c793",
+    "number": "596390",
+    "shortname": "MALLISS OP",
+    "longname": "MALLISS OP",
+    "km": 9.52,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.345035421942846,
+    "latitude": 53.19058707072247,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "0fab94c7-d51c-4b5a-a2ab-694c13efb024",
+    "number": "596370",
+    "shortname": "ELDENA OP",
+    "longname": "ELDENA OP",
+    "km": 18.0,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.42823379974127,
+    "latitude": 53.232053445064224,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "956ce5ff-1fc8-461e-ab2e-0ac70758bb46",
+    "number": "596350",
+    "shortname": "GUERITZ OP",
+    "longname": "GUERITZ OP",
+    "km": 22.78,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.480125603886963,
+    "latitude": 53.259841797981515,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "db4a69b2-65ba-4dd8-8b3e-eadf2cc241c6",
+    "number": "596330",
+    "shortname": "GRABOW OP",
+    "longname": "GRABOW OP",
+    "km": 30.85,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.573407662677484,
+    "latitude": 53.28314170140682,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "25530a3e-d0a8-456f-b7ea-6a3886843279",
+    "number": "596300",
+    "shortname": "KLEIN LAASCH WEHR OP",
+    "longname": "KLEIN LAASCH WEHR OP",
+    "km": 42.72,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.591912464894568,
+    "latitude": 53.35815517697002,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "c4381eb3-d21f-4bd1-bc1c-66c03b7d8bcf",
+    "number": "596280",
+    "shortname": "NEUSTADT GLEWE OP",
+    "longname": "NEUSTADT GLEWE OP",
+    "km": 46.2,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.58938542581256,
+    "latitude": 53.38167090333936,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "7bbd90ad-98e9-4415-8040-23500f2e01e7",
+    "number": "596250",
+    "shortname": "LEWITZ OP",
+    "longname": "LEWITZ OP",
+    "km": 50.66,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.601601292780472,
+    "latitude": 53.418392744462764,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "12499527-9476-45ed-80a2-b2b729742414",
+    "number": "596230",
+    "shortname": "GARWITZ UP",
+    "longname": "GARWITZ UP",
+    "km": 60.66,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.701096169203845,
+    "latitude": 53.45387084191535,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "bccaacb3-a9a5-44aa-b05b-3f29c3c6e38a",
+    "number": "596200",
+    "shortname": "MALCHOW WEHR OP",
+    "longname": "MALCHOW WEHR OP",
+    "km": 65.2,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.76515769172493,
+    "latitude": 53.44245184670891,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "3dec3921-6f01-4801-b648-a7f3ee33acd3",
+    "number": "5961801",
+    "shortname": "PARCHIM GÜTE",
+    "longname": "PARCHIM GÜTE",
+    "km": 72.57,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.834575288415659,
+    "latitude": 53.425253752100055,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "541c508a-00bf-4a9d-bd47-17fda98b349d",
+    "number": "596160",
+    "shortname": "NEUBURG OP",
+    "longname": "NEUBURG OP",
+    "km": 83.36,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.930331663383237,
+    "latitude": 53.416023168862274,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "a68cf527-a458-4d84-8171-7756813ca72c",
+    "number": "5961601",
+    "shortname": "BUROW",
+    "longname": "BUROW",
+    "km": 88.4,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.97491596320488,
+    "latitude": 53.39016084013592,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "d75442cf-87f8-4a56-8ee0-8ed7f94fe738",
+    "number": "596140",
+    "shortname": "LÜBZ OP",
+    "longname": "LÜBZ OP",
+    "km": 98.98,
+    "agency": "WSA LAUENBURG",
+    "longitude": 12.028491333716696,
+    "latitude": 53.46278605050716,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "faefa284-84cf-4c1e-aa73-dccdc3de729d",
+    "number": "596120",
+    "shortname": "BOBZIN OP",
+    "longname": "BOBZIN OP",
+    "km": 103.84,
+    "agency": "WSA LAUENBURG",
+    "longitude": 12.071875498467268,
+    "latitude": 53.49189290661576,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "06d86c6b-5ed0-475f-805a-a3ceb59af083",
+    "number": "596100",
+    "shortname": "BARKOW OP",
+    "longname": "BARKOW OP",
+    "km": 114.09,
+    "agency": "WSA LAUENBURG",
+    "longitude": 12.18888631862485,
+    "latitude": 53.46932142823997,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "506e6b03-1209-4650-8b3b-3cd2d4724b5f",
+    "number": "596090",
+    "shortname": "PLAU UP",
+    "longname": "PLAU UP",
+    "km": 120.0,
+    "agency": "WSA LAUENBURG",
+    "longitude": 12.259905514045807,
+    "latitude": 53.456706831572134,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "3ffddb2c-4c17-47d1-a7de-e1663d4031b7",
+    "number": "596080",
+    "shortname": "PLAU OP",
+    "longname": "PLAU OP",
+    "km": 120.08,
+    "agency": "WSA LAUENBURG",
+    "longitude": 12.26104246327684,
+    "latitude": 53.45676545155347,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "bd317edd-214a-4e11-a9dc-3cc71a2907c3",
+    "number": "596030",
+    "shortname": "WAREN",
+    "longname": "WAREN",
+    "km": 151.97,
+    "agency": "WSA LAUENBURG",
+    "longitude": 12.674191725059625,
+    "latitude": 53.514373651127926,
+    "water": {
+      "shortname": "MEW",
+      "longname": "MÜRITZ-ELDE-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "19cc3b9a-546b-43dd-96a3-b0bf903672d2",
+    "number": "581010",
+    "shortname": "MIROW UP",
+    "longname": "MIROW UP",
+    "km": 22.888,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 12.802760387855074,
+    "latitude": 53.27148908598734,
+    "water": {
+      "shortname": "MHW",
+      "longname": "MÜRITZ-HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "ab13c115-6924-4d88-822c-0704b8df4767",
+    "number": "581000",
+    "shortname": "MIROW OP",
+    "longname": "MIROW OP",
+    "km": 23.092,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 12.800246962104048,
+    "latitude": 53.272548313078,
+    "water": {
+      "shortname": "MHW",
+      "longname": "MÜRITZ-HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "25582d3f-dc5f-4c70-bd08-e84fd13201ca",
+    "number": "23800900",
+    "shortname": "Mannheim Neckar",
+    "longname": "MANNHEIM NECKAR",
+    "km": 3.06,
+    "agency": "WSA MANNHEIM",
+    "longitude": 8.469364961262574,
+    "latitude": 49.49435041107864,
+    "water": {
+      "shortname": "NECKAR",
+      "longname": "NECKAR"
+    }
+  },
+  {
+    "uuid": "827b2685-47ec-44df-a90f-980f5e0c1591",
+    "number": "23800760",
+    "shortname": "HEIDELBERG UP",
+    "longname": "HEIDELBERG UP",
+    "km": 26.05,
+    "agency": "WSA NECKAR",
+    "longitude": 8.717737397665669,
+    "latitude": 49.414687861109506,
+    "water": {
+      "shortname": "NECKAR",
+      "longname": "NECKAR"
+    }
+  },
+  {
+    "uuid": "3944c1fd-39f5-47b1-bb6e-323db05d70e8",
+    "number": "23800745",
+    "shortname": "ZIEGELHAUSEN AMS",
+    "longname": "ZIEGELHAUSEN AMS",
+    "km": 29.4,
+    "agency": "WSA NECKAR",
+    "longitude": 8.777435199450947,
+    "latitude": 49.41094472438031,
+    "water": {
+      "shortname": "NECKAR",
+      "longname": "NECKAR"
+    }
+  },
+  {
+    "uuid": "4c00a166-7d6d-48d7-b4dc-673b96b4041e",
+    "number": "23800690",
+    "shortname": "Rockenau SKA",
+    "longname": "ROCKENAU SKA",
+    "km": 60.7,
+    "agency": "WSA NECKAR",
+    "longitude": 9.005023979704324,
+    "latitude": 49.4382552226894,
+    "water": {
+      "shortname": "NECKAR",
+      "longname": "NECKAR"
+    }
+  },
+  {
+    "uuid": "fc1072e4-61d4-4e89-bc70-c7e8860fd208",
+    "number": "23800620",
+    "shortname": "GUNDELSHEIM UP",
+    "longname": "GUNDELSHEIM UP",
+    "km": 93.8,
+    "agency": "WSA NECKAR",
+    "longitude": 9.153622055873617,
+    "latitude": 49.28139880369505,
+    "water": {
+      "shortname": "NECKAR",
+      "longname": "NECKAR"
+    }
+  },
+  {
+    "uuid": "8559d1a0-4a03-410a-8910-44a089a07df8",
+    "number": "23800500",
+    "shortname": "Lauffen",
+    "longname": "LAUFFEN",
+    "km": 125.43,
+    "agency": "WSA NECKAR",
+    "longitude": 9.159786627616935,
+    "latitude": 49.072331408981775,
+    "water": {
+      "shortname": "NECKAR",
+      "longname": "NECKAR"
+    }
+  },
+  {
+    "uuid": "46d8ed02-73fd-4958-8e2e-006c047d0576",
+    "number": "23800460",
+    "shortname": "Besigheim SKA",
+    "longname": "BESIGHEIM SKA",
+    "km": 136.284,
+    "agency": "WSA NECKAR",
+    "longitude": 9.152409807968652,
+    "latitude": 49.00733168810783,
+    "water": {
+      "shortname": "NECKAR",
+      "longname": "NECKAR"
+    }
+  },
+  {
+    "uuid": "23517de9-9b81-4a34-ab82-adff6443c235",
+    "number": "23800420",
+    "shortname": "HESSIGHEIM SCHLEUSE UP",
+    "longname": "HESSIGHEIM SCHLEUSE UP",
+    "km": 142.93,
+    "agency": "WSA NECKAR",
+    "longitude": 9.19217387716745,
+    "latitude": 48.99313766018095,
+    "water": {
+      "shortname": "NECKAR",
+      "longname": "NECKAR"
+    }
+  },
+  {
+    "uuid": "a73a9cb4-5bc2-4d42-b7cd-191d5e1ee307",
+    "number": "23800320",
+    "shortname": "Marbach Wehr UP",
+    "longname": "MARBACH WEHR UP",
+    "km": 158.931,
+    "agency": "WSA NECKAR",
+    "longitude": 9.239640072220388,
+    "latitude": 48.92880484557546,
+    "water": {
+      "shortname": "NECKAR",
+      "longname": "NECKAR"
+    }
+  },
+  {
+    "uuid": "be7ce40e-5fff-42df-8386-b42694ca86da",
+    "number": "23800100",
+    "shortname": "Plochingen",
+    "longname": "PLOCHINGEN",
+    "km": 202.56,
+    "agency": "WSA NECKAR",
+    "longitude": 9.419189570661873,
+    "latitude": 48.7074340445856,
+    "water": {
+      "shortname": "NECKAR",
+      "longname": "NECKAR"
+    }
+  },
+  {
+    "uuid": "963bdc26-34ad-43c8-b653-bbaa3466276a",
+    "number": "585850",
+    "shortname": "NEUHAUS OP",
+    "longname": "NEUHAUS OP",
+    "km": 2.7,
+    "agency": "WSA BERLIN",
+    "longitude": 14.290527807836531,
+    "latitude": 52.26642303805525,
+    "water": {
+      "shortname": "NSK",
+      "longname": "NEUHAUSER SPEISEKANAL"
+    }
+  },
+  {
+    "uuid": "bf48cefd-0d00-4186-a366-343c25f43615",
+    "number": "585860",
+    "shortname": "NEUHAUS UP",
+    "longname": "NEUHAUS UP",
+    "km": 2.77,
+    "agency": "WSA BERLIN",
+    "longitude": 14.290377024435985,
+    "latitude": 52.265775062002575,
+    "water": {
+      "shortname": "NSK",
+      "longname": "NEUHAUSER SPEISEKANAL"
+    }
+  },
+  {
+    "uuid": "e506460f-4577-4405-8cc3-cc36a4bb516d",
+    "number": "587500",
+    "shortname": "NIEGRIPP BP",
+    "longname": "NIEGRIPP BP",
+    "km": 0.59,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.741879789763411,
+    "latitude": 52.24874233449674,
+    "water": {
+      "shortname": "NVK",
+      "longname": "NIEGRIPPER VERBINDUNGSKANAL"
+    }
+  },
+  {
+    "uuid": "0e192297-1224-4465-b1c7-a476cc17f74d",
+    "number": "5970069",
+    "shortname": "AWK STROHBRÜCK",
+    "longname": "AWK STROHBRÜCK",
+    "km": 0.89,
+    "agency": "WSA KIEL-HOLTENAU",
+    "longitude": 9.967772383695177,
+    "latitude": 54.334833173187114,
+    "water": {
+      "shortname": "Nord-Ostsee-Kanal",
+      "longname": "NORD-OSTSEE-KANAL"
+    }
+  },
+  {
+    "uuid": "85fc0dac-a53f-4638-880d-40b24bb282f3",
+    "number": "5970091",
+    "shortname": "NOK BRUNSBÜTTEL",
+    "longname": "NOK BRUNSBÜTTEL",
+    "km": 2.116,
+    "agency": "WSA BRUNSBÜTTEL",
+    "longitude": 9.149862765792989,
+    "latitude": 53.89839809255912,
+    "water": {
+      "shortname": "Nord-Ostsee-Kanal",
+      "longname": "NORD-OSTSEE-KANAL"
+    }
+  },
+  {
+    "uuid": "3954300d-f112-4fe6-8d0a-b06496372e36",
+    "number": "5970085",
+    "shortname": "NOK DÜKERSWISCH",
+    "longname": "NOK DÜKERSWISCH",
+    "km": 21.5,
+    "agency": "WSA BRUNSBÜTTEL",
+    "longitude": 9.302242787433618,
+    "latitude": 54.0407199671534,
+    "water": {
+      "shortname": "Nord-Ostsee-Kanal",
+      "longname": "NORD-OSTSEE-KANAL"
+    }
+  },
+  {
+    "uuid": "4a904d59-d48f-4878-af7b-cbd955f342e0",
+    "number": "5970075",
+    "shortname": "NOK BREIHOLZ",
+    "longname": "NOK BREIHOLZ",
+    "km": 48.5,
+    "agency": "WSA BRUNSBÜTTEL",
+    "longitude": 9.552319101807727,
+    "latitude": 54.200163554376566,
+    "water": {
+      "shortname": "Nord-Ostsee-Kanal",
+      "longname": "NORD-OSTSEE-KANAL"
+    }
+  },
+  {
+    "uuid": "8c8afb56-88ea-483a-a7d4-033c22f53497",
+    "number": "5970074",
+    "shortname": "NOK RENDSBURG",
+    "longname": "NOK RENDSBURG",
+    "km": 63.5,
+    "agency": "WSA KIEL-HOLTENAU",
+    "longitude": 9.693628157618347,
+    "latitude": 54.29769193418942,
+    "water": {
+      "shortname": "Nord-Ostsee-Kanal",
+      "longname": "NORD-OSTSEE-KANAL"
+    }
+  },
+  {
+    "uuid": "d0ec2790-a870-405e-bb61-2dcc3cf47467",
+    "number": "5970067",
+    "shortname": "NOK KÖNIGSFÖRDE",
+    "longname": "NOK KÖNIGSFÖRDE",
+    "km": 79.63,
+    "agency": "WSA KIEL-HOLTENAU",
+    "longitude": 9.883252534676965,
+    "latitude": 54.356825078445006,
+    "water": {
+      "shortname": "Nord-Ostsee-Kanal",
+      "longname": "NORD-OSTSEE-KANAL"
+    }
+  },
+  {
+    "uuid": "8af24d6a-eecd-434e-9f1a-60ab6bc05490",
+    "number": "5979020",
+    "shortname": "NOK KIEL BINNEN",
+    "longname": "NOK KIEL BINNEN",
+    "km": 97.76,
+    "agency": "WSA KIEL-HOLTENAU",
+    "longitude": 10.13886996753095,
+    "latitude": 54.365693099387045,
+    "water": {
+      "shortname": "Nord-Ostsee-Kanal",
+      "longname": "NORD-OSTSEE-KANAL"
+    }
+  },
+  {
+    "uuid": "6dc44585-5b88-45d7-9c64-7c845408b698",
+    "number": "5650068",
+    "shortname": "NOK KIEL AUSSEN",
+    "longname": "NOK KIEL AUSSEN",
+    "km": 98.13,
+    "agency": "WSA KIEL-HOLTENAU",
+    "longitude": 10.144527384042059,
+    "latitude": 54.36485621246684,
+    "water": {
+      "shortname": "Nord-Ostsee-Kanal",
+      "longname": "NORD-OSTSEE-KANAL"
+    }
+  },
+  {
+    "uuid": "c0ec139b-13b4-4f86-bee3-06665ad81a40",
+    "number": "9510070",
+    "shortname": "HELGOLAND BINNENHAFEN",
+    "longname": "HELGOLAND BINNENHAFEN",
+    "km": 0.0,
+    "agency": "WSA TÖNNING",
+    "longitude": 7.8899042173470155,
+    "latitude": 54.178893927371895,
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "2852b9ab-d30e-4d04-ae06-3e946f48a0b1",
+    "number": "9550021",
+    "shortname": "PELLWORM ANLEGER",
+    "longname": "PELLWORM ANLEGER",
+    "km": 0.0,
+    "agency": "WSA TÖNNING",
+    "longitude": 8.702016358858556,
+    "latitude": 54.50091922540719,
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "9c4c11f2-0548-4555-beac-ecfd36f9bd74",
+    "number": "9570010",
+    "shortname": "WITTDÜN",
+    "longname": "WITTDÜN",
+    "km": 0.0,
+    "agency": "WSA TÖNNING",
+    "longitude": 8.383942818908347,
+    "latitude": 54.63176040673401,
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "4a2501bf-cb57-46bb-87d3-d6808286b31b",
+    "number": "9400090",
+    "shortname": "MINSENER OOG",
+    "longname": "MINSENER OOG",
+    "km": 1.0,
+    "agency": "WSA WILHELMSHAVEN",
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "8727ebfd-e2e1-43da-ab3d-fee48cff9acc",
+    "number": "9340020",
+    "shortname": "BORKUM FISCHERBALJE",
+    "longname": "BORKUM FISCHERBALJE",
+    "km": 83.47,
+    "agency": "WSA EMS-NORDSEE",
+    "longitude": 6.747895484692886,
+    "latitude": 53.55743551063739,
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "478f21e9-906b-4c6f-a009-b5eabb052746",
+    "number": "9340030",
+    "shortname": "BORKUM SÜDSTRAND",
+    "longname": "BORKUM SÜDSTRAND",
+    "km": 89.23,
+    "agency": "WSA EMS-NORDSEE",
+    "longitude": 6.6614163107886855,
+    "latitude": 53.576853550272546,
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "0d8233b8-36c9-4a24-ad77-a4e7c617932f",
+    "number": "9510075",
+    "shortname": "HELGOLAND SÜDHAFEN",
+    "longname": "HELGOLAND SÜDHAFEN",
+    "km": 100.0,
+    "agency": "WSA TÖNNING",
+    "longitude": 7.894312626997272,
+    "latitude": 54.174972252106315,
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "5287a3e1-c540-4ab1-b52e-880d124cbc43",
+    "number": "9510095",
+    "shortname": "BÜSUM",
+    "longname": "BÜSUM",
+    "km": 100.0,
+    "agency": "WSA TÖNNING",
+    "longitude": 8.85910198183386,
+    "latitude": 54.12176072175226,
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "e114aeec-c8d9-4d20-8fe1-8822058cb38b",
+    "number": "9530020",
+    "shortname": "HUSUM",
+    "longname": "HUSUM",
+    "km": 100.0,
+    "agency": "WSA TÖNNING",
+    "longitude": 9.024769717289855,
+    "latitude": 54.472283082352156,
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "6233e901-2600-4b54-ae06-7b987934e99e",
+    "number": "9570040",
+    "shortname": "DAGEBÜLL",
+    "longname": "DAGEBÜLL",
+    "km": 100.0,
+    "agency": "WSA TÖNNING",
+    "longitude": 8.68697281957434,
+    "latitude": 54.730507310903775,
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "733755fd-628f-4130-a694-aaba340531ba",
+    "number": "9570050",
+    "shortname": "HÖRNUM",
+    "longname": "HÖRNUM",
+    "km": 100.0,
+    "agency": "WSA TÖNNING",
+    "longitude": 8.296034563237153,
+    "latitude": 54.75809307879306,
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "5e92d73f-e4ea-42c1-9f98-91536c17cdff",
+    "number": "9570070",
+    "shortname": "LIST AUF SYLT",
+    "longname": "LIST AUF SYLT",
+    "km": 100.0,
+    "agency": "WSA TÖNNING",
+    "longitude": 8.440408553744719,
+    "latitude": 55.01654386060568,
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "04acd7e5-3cbc-4cdd-b4a9-f452e868f4d6",
+    "number": "9530010",
+    "shortname": "EIDER-SPERRWERK AP",
+    "longname": "EIDER-SPERRWERK AP",
+    "km": 101.1,
+    "agency": "WSA TÖNNING",
+    "longitude": 8.841914809442672,
+    "latitude": 54.265951411460115,
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "c0244c0e-6ae6-40cb-a967-4039b2a0ce7c",
+    "number": "9360010",
+    "shortname": "NORDERNEY RIFFGAT",
+    "longname": "NORDERNEY RIFFGAT",
+    "km": 159.333,
+    "agency": "WSA EMS-NORDSEE",
+    "longitude": 7.157758676264964,
+    "latitude": 53.69649848699198,
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "a0c1dcb6-7812-48e6-8c01-f7edad7a2caf",
+    "number": "9390010",
+    "shortname": "LANGEOOG",
+    "longname": "LANGEOOG",
+    "km": 182.129,
+    "agency": "WSA EMS-NORDSEE",
+    "longitude": 7.501653628801439,
+    "latitude": 53.72323313797535,
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "662c4b5e-0241-456d-ac7d-9f62fd95c0d1",
+    "number": "9410010",
+    "shortname": "SPIEKEROOG",
+    "longname": "SPIEKEROOG",
+    "km": 194.374,
+    "agency": "WSA EMS-NORDSEE",
+    "longitude": 7.681934661515978,
+    "latitude": 53.74923744755749,
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "e574d0af-5c63-4306-b1d3-43b7359de06d",
+    "number": "9510010",
+    "shortname": "ZEHNERLOCH",
+    "longname": "ZEHNERLOCH",
+    "km": 732.2,
+    "agency": "WSA CUXHAVEN",
+    "longitude": 8.658229962288056,
+    "latitude": 53.9555085283345,
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "3ff99b92-4396-4fa7-af73-02b9c015dcad",
+    "number": "9510132",
+    "shortname": "MITTELGRUND",
+    "longname": "MITTELGRUND",
+    "km": 733.7,
+    "agency": "WSA CUXHAVEN",
+    "longitude": 8.636197332307725,
+    "latitude": 53.94207507306487,
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "f0197bcf-6846-4c0a-9659-0c2626a9bcf0",
+    "number": "9510060",
+    "shortname": "BAKE C - SCHARHÖRN",
+    "longname": "BAKE C - SCHARHÖRN",
+    "km": 745.0,
+    "agency": "WSA CUXHAVEN",
+    "longitude": 8.462560576653868,
+    "latitude": 53.96703949415204,
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "e8daa3e2-77d1-4cfa-9ac9-501e7b2b4b0a",
+    "number": "9510063",
+    "shortname": "BAKE A",
+    "longname": "BAKE A",
+    "km": 755.6,
+    "agency": "WSA CUXHAVEN",
+    "longitude": 8.315139865852299,
+    "latitude": 53.98442129888576,
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "104fdc24-1dc6-4cb7-b44f-10bd02e13f40",
+    "number": "9510066",
+    "shortname": "BAKE Z",
+    "longname": "BAKE Z",
+    "km": 756.2,
+    "agency": "WSA CUXHAVEN",
+    "longitude": 8.314601507551739,
+    "latitude": 54.01351911664601,
+    "water": {
+      "shortname": "NORDSEE",
+      "longname": "NORDSEE"
+    }
+  },
+  {
+    "uuid": "74134dc6-8e26-4195-9cdc-c22aa0a3558c",
+    "number": "581530",
+    "shortname": "BISCHOFSWERDER UP",
+    "longname": "BISCHOFSWERDER UP",
+    "km": 4.196,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.380954189400333,
+    "latitude": 52.89222553500098,
+    "water": {
+      "shortname": "OHW",
+      "longname": "OBERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "16a780aa-475d-41dc-a8ec-20488415b6d7",
+    "number": "581520",
+    "shortname": "BISCHOFSWERDER OP",
+    "longname": "BISCHOFSWERDER OP",
+    "km": 4.53,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.381167849265402,
+    "latitude": 52.892870089815965,
+    "water": {
+      "shortname": "OHW",
+      "longname": "OBERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "721d7dbf-c947-405c-8dba-e672a091f4c0",
+    "number": "580170",
+    "shortname": "ZEHDENICK UP",
+    "longname": "ZEHDENICK UP",
+    "km": 15.78,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.333280078975475,
+    "latitude": 52.98200669975525,
+    "water": {
+      "shortname": "OHW",
+      "longname": "OBERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "a9b8e24c-012a-48dc-a823-d48c1637cb42",
+    "number": "580160",
+    "shortname": "ZEHDENICK OP",
+    "longname": "ZEHDENICK OP",
+    "km": 16.06,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.331210383272076,
+    "latitude": 52.98345874560772,
+    "water": {
+      "shortname": "OHW",
+      "longname": "OBERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "470acd2a-f3e7-4fd2-96b0-e90344ee51bf",
+    "number": "580090",
+    "shortname": "BREDEREICHE UP",
+    "longname": "BREDEREICHE UP",
+    "km": 47.631,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.241418441289687,
+    "latitude": 53.13479777611718,
+    "water": {
+      "shortname": "OHW",
+      "longname": "OBERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "308f5979-4ab8-48ab-b618-081aa285559e",
+    "number": "580080",
+    "shortname": "BREDEREICHE OP",
+    "longname": "BREDEREICHE OP",
+    "km": 47.992,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.239349671437513,
+    "latitude": 53.138198127512204,
+    "water": {
+      "shortname": "OHW",
+      "longname": "OBERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "a5830277-af1d-4c64-be72-00591f36216c",
+    "number": "580070",
+    "shortname": "FÜRSTENBERG UP",
+    "longname": "FÜRSTENBERG UP",
+    "km": 60.661,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.146452716312501,
+    "latitude": 53.18164183257601,
+    "water": {
+      "shortname": "OHW",
+      "longname": "OBERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "2c95f83d-4669-4553-a18d-3f493176d34d",
+    "number": "580060",
+    "shortname": "FÜRSTENBERG OP",
+    "longname": "FÜRSTENBERG OP",
+    "km": 60.802,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.144578840522726,
+    "latitude": 53.18148911832933,
+    "water": {
+      "shortname": "OHW",
+      "longname": "OBERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "da3b5de9-bb1d-4545-a172-fa29301d552e",
+    "number": "580030",
+    "shortname": "WESENBERG UP",
+    "longname": "WESENBERG UP",
+    "km": 81.722,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 12.989495625819774,
+    "latitude": 53.27391359587731,
+    "water": {
+      "shortname": "OHW",
+      "longname": "OBERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "7909d3f7-ef5d-4321-b76d-712d9b0a0c68",
+    "number": "580020",
+    "shortname": "WESENBERG OP",
+    "longname": "WESENBERG OP",
+    "km": 81.797,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 12.98917275043353,
+    "latitude": 53.29239095161776,
+    "water": {
+      "shortname": "OHW",
+      "longname": "OBERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "ca3f535b-4a32-4dd7-a56b-2ac20dea4472",
+    "number": "603140",
+    "shortname": "RATZDORF",
+    "longname": "RATZDORF",
+    "km": 542.55,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 14.752950062772658,
+    "latitude": 52.07053518750326,
+    "water": {
+      "shortname": "ODER",
+      "longname": "ODER"
+    }
+  },
+  {
+    "uuid": "8675aa70-cfbc-471a-8566-dcc851f201d3",
+    "number": "603000",
+    "shortname": "EISENHÜTTENSTADT",
+    "longname": "EISENHÜTTENSTADT",
+    "km": 554.138,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 14.687797397636508,
+    "latitude": 52.153152572931255,
+    "water": {
+      "shortname": "ODER",
+      "longname": "ODER"
+    }
+  },
+  {
+    "uuid": "bffdf7f2-6200-42a2-a4bc-a8111e27e043",
+    "number": "603031",
+    "shortname": "FRANKFURT1 (ODER)",
+    "longname": "FRANKFURT1 (ODER)",
+    "km": 585.281,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 14.551715819696117,
+    "latitude": 52.35780618843963,
+    "water": {
+      "shortname": "ODER",
+      "longname": "ODER"
+    }
+  },
+  {
+    "uuid": "16258271-ec03-4542-873c-1642c8b654c9",
+    "number": "603040",
+    "shortname": "KIETZ",
+    "longname": "KIETZ",
+    "km": 614.793,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 14.630300056553716,
+    "latitude": 52.57759504433102,
+    "water": {
+      "shortname": "ODER",
+      "longname": "ODER"
+    }
+  },
+  {
+    "uuid": "6298a8f9-7c77-4605-a55a-278c61cc8f50",
+    "number": "603050",
+    "shortname": "KIENITZ",
+    "longname": "KIENITZ",
+    "km": 632.923,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 14.43323010073256,
+    "latitude": 52.679836828305575,
+    "water": {
+      "shortname": "ODER",
+      "longname": "ODER"
+    }
+  },
+  {
+    "uuid": "f7a639a4-b824-445c-b158-108ebd70cc9a",
+    "number": "603080",
+    "shortname": "HOHENSAATEN-FINOW",
+    "longname": "HOHENSAATEN-FINOW",
+    "km": 664.951,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 14.141124665027109,
+    "latitude": 52.8647370158204,
+    "water": {
+      "shortname": "ODER",
+      "longname": "ODER"
+    }
+  },
+  {
+    "uuid": "30bff0df-8333-49ec-8fd7-a2d4c0db1cb1",
+    "number": "603100",
+    "shortname": "STÜTZKOW",
+    "longname": "STÜTZKOW",
+    "km": 680.648,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 14.193352094491908,
+    "latitude": 52.983720430348214,
+    "water": {
+      "shortname": "ODER",
+      "longname": "ODER"
+    }
+  },
+  {
+    "uuid": "e28babaa-7801-49a2-9c28-58701549ce5d",
+    "number": "603130",
+    "shortname": "SCHWEDT-ODERBRÜCKE",
+    "longname": "SCHWEDT-ODERBRÜCKE",
+    "km": 690.606,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 14.3116290097497,
+    "latitude": 53.03557614439063,
+    "water": {
+      "shortname": "ODER",
+      "longname": "ODER"
+    }
+  },
+  {
+    "uuid": "8b51c505-9b1c-40d0-957f-7461473602e1",
+    "number": "580272",
+    "shortname": "OHv km 1,467 (Blaues Wunder)",
+    "longname": "OHV KM 1,467 (BLAUES WUNDER)",
+    "km": 1.467,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.24354875517293,
+    "latitude": 52.750191357654586,
+    "water": {
+      "shortname": "OHV",
+      "longname": "ORANIENBURGER HAVEL"
+    }
+  },
+  {
+    "uuid": "0a6fe221-9fc9-46e0-802f-9c367a32ed72",
+    "number": "581840",
+    "shortname": "SACHSENHAUSEN UP",
+    "longname": "SACHSENHAUSEN UP",
+    "km": 29.809,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.242842495086375,
+    "latitude": 52.77636806270695,
+    "water": {
+      "shortname": "OrK",
+      "longname": "ORANIENBURGER KANAL"
+    }
+  },
+  {
+    "uuid": "adbd3144-1774-45e8-8eb7-60f01a712426",
+    "number": "580240",
+    "shortname": "SACHSENHAUSEN OP",
+    "longname": "SACHSENHAUSEN OP",
+    "km": 29.818,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.242904058049188,
+    "latitude": 52.77644829795338,
+    "water": {
+      "shortname": "OrK",
+      "longname": "ORANIENBURGER KANAL"
+    }
+  },
+  {
+    "uuid": "f0f78cc4-1ab4-4548-abed-63c65a267a8a",
+    "number": "42840453",
+    "shortname": "DALWIGKSTHAL",
+    "longname": "DALWIGKSTHAL",
+    "km": 11.41,
+    "agency": "REGIERUNGSPRÄSIDIUM KASSEL",
+    "longitude": 8.796302499303486,
+    "latitude": 51.150027343721874,
+    "water": {
+      "shortname": "ORKE",
+      "longname": "ORKE"
+    }
+  },
+  {
+    "uuid": "cf8a3ea2-d5d2-4bf2-ba6b-cf1309d18bb1",
+    "number": "5980010",
+    "shortname": "BREMERVÖRDE",
+    "longname": "BREMERVÖRDE",
+    "km": 0.03,
+    "agency": "WSA CUXHAVEN",
+    "longitude": 9.15477959513822,
+    "latitude": 53.48412059027301,
+    "water": {
+      "shortname": "OSTE",
+      "longname": "OSTE"
+    }
+  },
+  {
+    "uuid": "e5e02890-87bd-4fab-b590-ffa557c3532e",
+    "number": "5980030",
+    "shortname": "HECHTHAUSEN",
+    "longname": "HECHTHAUSEN",
+    "km": 30.94,
+    "agency": "WSA CUXHAVEN",
+    "longitude": 9.252769624045799,
+    "latitude": 53.64052581440595,
+    "water": {
+      "shortname": "OSTE",
+      "longname": "OSTE"
+    }
+  },
+  {
+    "uuid": "86d07669-4670-48a1-8f30-7d7b26224ad6",
+    "number": "126004",
+    "shortname": "ACHTHÖFENER FLETH SIEL",
+    "longname": "ACHTHÖFENER FLETH SIEL",
+    "km": 49.1,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.163392656155676,
+    "latitude": 53.701580829948504,
+    "water": {
+      "shortname": "OSTE",
+      "longname": "OSTE"
+    }
+  },
+  {
+    "uuid": "04790e03-4353-4e80-beef-b3ed439484bc",
+    "number": "126003",
+    "shortname": "NEUENSEER SCHLEUSENFLETH SIEL",
+    "longname": "NEUENSEER SCHLEUSENFLETH SIEL",
+    "km": 58.9,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.130903597451038,
+    "latitude": 53.780686477524796,
+    "water": {
+      "shortname": "OSTE",
+      "longname": "OSTE"
+    }
+  },
+  {
+    "uuid": "f44e7220-892e-40b5-8ef4-3da129c2a6ae",
+    "number": "126002",
+    "shortname": "GEVERSDORF BRÜCKE",
+    "longname": "GEVERSDORF BRÜCKE",
+    "km": 64.45,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.08045772011446,
+    "latitude": 53.80124315024519,
+    "water": {
+      "shortname": "OSTE",
+      "longname": "OSTE"
+    }
+  },
+  {
+    "uuid": "7cb4566b-c584-4167-8736-f52ca7fd837d",
+    "number": "9000000532",
+    "shortname": "OSTE-SPERRWERK BP",
+    "longname": "OSTE-SPERRWERK BP",
+    "km": 69.575,
+    "agency": "WSA CUXHAVEN",
+    "longitude": 9.039876779241029,
+    "latitude": 53.82037399572021,
+    "water": {
+      "shortname": "OSTE",
+      "longname": "OSTE"
+    }
+  },
+  {
+    "uuid": "8c3295dc-fe73-45bc-9a7b-679d4aaad0cf",
+    "number": "9000000590",
+    "shortname": "OSTE-SPERRWERK AP",
+    "longname": "OSTE-SPERRWERK AP",
+    "km": 69.575,
+    "agency": "WSA CUXHAVEN",
+    "longitude": 9.039724945414594,
+    "latitude": 53.820383031503816,
+    "water": {
+      "shortname": "OSTE",
+      "longname": "OSTE"
+    }
+  },
+  {
+    "uuid": "9427fafc-7146-4be1-a71e-4e4658236037",
+    "number": "126019",
+    "shortname": "BELUM PEGEL",
+    "longname": "BELUM PEGEL",
+    "km": 69.89,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.03713057987013,
+    "latitude": 53.822764794448304,
+    "water": {
+      "shortname": "OSTE",
+      "longname": "OSTE"
+    }
+  },
+  {
+    "uuid": "a9e93be0-cb0e-4418-ba3c-94e7869f6199",
+    "number": "5980060",
+    "shortname": "BELUM",
+    "longname": "BELUM",
+    "km": 69.89,
+    "agency": "WSA CUXHAVEN",
+    "longitude": 9.03713057987013,
+    "latitude": 53.822764794448304,
+    "water": {
+      "shortname": "OSTE",
+      "longname": "OSTE"
+    }
+  },
+  {
+    "uuid": "b8d05bf9-2ef2-416d-ba70-b5dba74fe777",
+    "number": "9650024",
+    "shortname": "ALTHAGEN",
+    "longname": "ALTHAGEN",
+    "agency": "WSA OSTSEE",
+    "longitude": 12.41896048297562,
+    "latitude": 54.37175745952659,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "09227288-8c72-4b12-88fe-8765d1b2b400",
+    "number": "9650040",
+    "shortname": "BARHÖFT",
+    "longname": "BARHÖFT",
+    "agency": "WSA OSTSEE",
+    "longitude": 13.032221032802527,
+    "latitude": 54.434539278468485,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "220ff4c6-83da-4a1b-9c13-dfee5a2a8798",
+    "number": "9640015",
+    "shortname": "WARNEMÜNDE",
+    "longname": "WARNEMÜNDE",
+    "km": 0.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 12.103388257063223,
+    "latitude": 54.16973095319337,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "00c33ed9-6bea-45b4-8728-7edc7e43e2f3",
+    "number": "9650030",
+    "shortname": "BARTH",
+    "longname": "BARTH",
+    "km": 0.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 12.723220564867576,
+    "latitude": 54.3712205420075,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "b9163121-2747-4d2b-bcf5-ab5ff7396e56",
+    "number": "9650043",
+    "shortname": "STRALSUND",
+    "longname": "STRALSUND",
+    "km": 0.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 13.119014797980462,
+    "latitude": 54.30568214387992,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "340707f4-5d35-4898-8b34-95ea3f4206b3",
+    "number": "9650070",
+    "shortname": "STAHLBRODE",
+    "longname": "STAHLBRODE",
+    "km": 0.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 13.289714493128557,
+    "latitude": 54.234461064433,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "b327e35c-5dad-4b79-9cef-60fbd504eb37",
+    "number": "9650080",
+    "shortname": "WOLGAST",
+    "longname": "WOLGAST",
+    "km": 0.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 13.770379520779166,
+    "latitude": 54.04173732927731,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "492f85b8-e5c6-439e-8e14-08ca78f10dce",
+    "number": "9670046",
+    "shortname": "NEUENDORF HAFEN",
+    "longname": "NEUENDORF HAFEN",
+    "km": 0.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 13.093555157353734,
+    "latitude": 54.52449361393186,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "905e7328-b8aa-4b08-9c22-c864101e462b",
+    "number": "9670050",
+    "shortname": "KLOSTER",
+    "longname": "KLOSTER",
+    "km": 0.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 13.111362240678352,
+    "latitude": 54.584766408799105,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "4b348b56-b08c-4522-9042-49c1edb45d0d",
+    "number": "9670055",
+    "shortname": "WITTOWER FÄHRE",
+    "longname": "WITTOWER FÄHRE",
+    "km": 0.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 13.245134582969705,
+    "latitude": 54.55759356112303,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "91922b9b-ef7b-4aae-95a1-9d6a9e61969a",
+    "number": "9670063",
+    "shortname": "LAUTERBACH",
+    "longname": "LAUTERBACH",
+    "km": 0.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 13.499696966293504,
+    "latitude": 54.3416047141194,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "9e7b2a4d-cfe8-4524-8a1e-c196ea897e9f",
+    "number": "9670065",
+    "shortname": "SASSNITZ",
+    "longname": "SASSNITZ",
+    "km": 0.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 13.643061607137538,
+    "latitude": 54.510937403290725,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "d1c9bb3c-2929-46a8-a338-adfddf0ef524",
+    "number": "9670067",
+    "shortname": "THIESSOW",
+    "longname": "THIESSOW",
+    "km": 0.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 13.7097569727335,
+    "latitude": 54.280666554541554,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "1fa822e6-fb0c-4331-83f1-749972046dca",
+    "number": "9690077",
+    "shortname": "RUDEN",
+    "longname": "RUDEN",
+    "km": 0.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 13.7719056374206,
+    "latitude": 54.204347817762475,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "087b6386-0957-4b47-af7d-ecd62f6d63ce",
+    "number": "9690078",
+    "shortname": "GREIFSWALD OIE",
+    "longname": "GREIFSWALD OIE",
+    "km": 0.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 13.907208142774282,
+    "latitude": 54.241313302688674,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "f53bb77f-e55a-468f-b7be-b66baf7e3e5b",
+    "number": "9690085",
+    "shortname": "KARLSHAGEN",
+    "longname": "KARLSHAGEN",
+    "km": 0.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 13.807622038541579,
+    "latitude": 54.10786008932983,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "6b53ef42-5bd9-4366-ace3-442e307bec60",
+    "number": "9650073",
+    "shortname": "GREIFSWALD-WIECK",
+    "longname": "GREIFSWALD-WIECK",
+    "km": 1.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 13.457152923470629,
+    "latitude": 54.097711316905006,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "9e19c411-f728-4a43-a057-39d4155c71cc",
+    "number": "9610010",
+    "shortname": "FLENSBURG",
+    "longname": "FLENSBURG",
+    "km": 4.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 9.433017666212919,
+    "latitude": 54.795056746219686,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "5a33bf14-6bdc-4666-b2e3-ac78e3083e2a",
+    "number": "9610015",
+    "shortname": "LANGBALLIGAU",
+    "longname": "LANGBALLIGAU",
+    "km": 35.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 9.654140992315282,
+    "latitude": 54.823267257721,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "22b7dcb3-8c42-4f71-9191-49143ba3a828",
+    "number": "9610020",
+    "shortname": "LT KALKGRUND",
+    "longname": "LT KALKGRUND",
+    "km": 61.5,
+    "agency": "WSA OSTSEE",
+    "longitude": 9.888008024317406,
+    "latitude": 54.82459898726829,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "70d4f87f-4489-455a-a435-d6df9e09a87e",
+    "number": "9610025",
+    "shortname": "SCHLEIMÜNDE SP",
+    "longname": "SCHLEIMÜNDE SP",
+    "km": 78.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 10.036688584395906,
+    "latitude": 54.67273599933948,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "d22c341b-80c2-436d-98e1-8a2575bc975a",
+    "number": "9630007",
+    "shortname": "TIMMENDORF POEL",
+    "longname": "TIMMENDORF POEL",
+    "km": 100.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 11.375642142698938,
+    "latitude": 53.991996731525816,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "95a0ab45-a9ac-4f9a-93e9-b0ffa1c57b5f",
+    "number": "9630008",
+    "shortname": "WISMAR-BAUMHAUS",
+    "longname": "WISMAR-BAUMHAUS",
+    "km": 100.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 11.457917784463795,
+    "latitude": 53.898761570190004,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "06219dd9-a2c4-463c-9619-623b3c026cbc",
+    "number": "9610070",
+    "shortname": "HEILIGENHAFEN",
+    "longname": "HEILIGENHAFEN",
+    "km": 123.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 11.005664168144426,
+    "latitude": 54.37295933067423,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "3ad4013f-644b-47f5-a641-44b332bfecb2",
+    "number": "9610066",
+    "shortname": "KIEL-HOLTENAU",
+    "longname": "KIEL-HOLTENAU",
+    "km": 150.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 10.157049612180774,
+    "latitude": 54.37208664756846,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "736437d7-0f6f-41b7-bc69-5ed721da4f85",
+    "number": "9610050",
+    "shortname": "LT KIEL",
+    "longname": "LT KIEL",
+    "km": 177.75,
+    "agency": "WSA OSTSEE",
+    "longitude": 10.273267865043422,
+    "latitude": 54.49958875723429,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "3f0b6b74-80a9-4576-a3cb-ea967dfc349f",
+    "number": "9610080",
+    "shortname": "NEUSTADT",
+    "longname": "NEUSTADT",
+    "km": 263.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 10.804987829789338,
+    "latitude": 54.09652306158376,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "8effc15d-8583-4ac6-9f42-1b63c47f92b0",
+    "number": "9610075",
+    "shortname": "MARIENLEUCHTE",
+    "longname": "MARIENLEUCHTE",
+    "km": 284.7,
+    "agency": "WSA OSTSEE",
+    "longitude": 11.238874338140052,
+    "latitude": 54.4966302285817,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "b09f2243-60f0-469a-8f3b-0ea6abc83267",
+    "number": "9610035",
+    "shortname": "KAPPELN",
+    "longname": "KAPPELN",
+    "km": 507.3,
+    "agency": "WSA OSTSEE",
+    "longitude": 9.937938134263064,
+    "latitude": 54.66438387741342,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "09370c05-1041-4395-a5d4-b8db6e59c4c8",
+    "number": "9610040",
+    "shortname": "SCHLESWIG",
+    "longname": "SCHLESWIG",
+    "km": 540.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 9.569058518839194,
+    "latitude": 54.51143165937903,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "1faa9b2c-c269-4662-af70-ef11da27cc1c",
+    "number": "9610045",
+    "shortname": "ECKERNFÖRDE",
+    "longname": "ECKERNFÖRDE",
+    "km": 612.0,
+    "agency": "WSA OSTSEE",
+    "longitude": 9.83600726774434,
+    "latitude": 54.47470273574418,
+    "water": {
+      "shortname": "OSTSEE",
+      "longname": "OSTSEE"
+    }
+  },
+  {
+    "uuid": "25ca1bef-4f8e-4523-89f5-7d8593e46370",
+    "number": "502300",
+    "shortname": "PAREY EP",
+    "longname": "PAREY EP",
+    "km": 0.685,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 11.976654924884564,
+    "latitude": 52.40384693929311,
+    "water": {
+      "shortname": "PVK",
+      "longname": "PAREYER VERBINDUNGSKANAL"
+    }
+  },
+  {
+    "uuid": "bafddcbf-4108-431e-9f57-568be08fd538",
+    "number": "587530",
+    "shortname": "PAREY UP",
+    "longname": "PAREY UP",
+    "km": 0.85,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 11.979050287236685,
+    "latitude": 52.40306554478612,
+    "water": {
+      "shortname": "PVK",
+      "longname": "PAREYER VERBINDUNGSKANAL"
+    }
+  },
+  {
+    "uuid": "8ba772ed-e45b-4be8-b91d-0c6c92de59e4",
+    "number": "9660009",
+    "shortname": "AALBUDE",
+    "longname": "AALBUDE",
+    "km": 14.947,
+    "agency": "WSA OSTSEE",
+    "longitude": 12.888041935015819,
+    "latitude": 53.847926808320594,
+    "water": {
+      "shortname": "PEENE",
+      "longname": "PEENE"
+    }
+  },
+  {
+    "uuid": "b7e238e8-29ec-4522-8252-b2cae7d4f58e",
+    "number": "9660007",
+    "shortname": "DEMMIN",
+    "longname": "DEMMIN",
+    "km": 31.779,
+    "agency": "WSA OSTSEE",
+    "longitude": 13.026562956417967,
+    "latitude": 53.916354211989876,
+    "water": {
+      "shortname": "PEENE",
+      "longname": "PEENE"
+    }
+  },
+  {
+    "uuid": "a3328262-207d-4e65-96d8-202368ca0cb8",
+    "number": "9660005",
+    "shortname": "JARMEN",
+    "longname": "JARMEN",
+    "km": 61.686,
+    "agency": "WSA OSTSEE",
+    "longitude": 13.342282249314371,
+    "latitude": 53.92875181683916,
+    "water": {
+      "shortname": "PEENE",
+      "longname": "PEENE"
+    }
+  },
+  {
+    "uuid": "22fd01e0-090b-476b-80aa-f4586e259785",
+    "number": "9660001",
+    "shortname": "ANKLAM",
+    "longname": "ANKLAM",
+    "km": 89.822,
+    "agency": "WSA OSTSEE",
+    "longitude": 13.70427795181407,
+    "latitude": 53.86275452367867,
+    "water": {
+      "shortname": "PEENE",
+      "longname": "PEENE"
+    }
+  },
+  {
+    "uuid": "575da86f-d975-4837-b6f5-6f19c3a5e4b6",
+    "number": "5970016",
+    "shortname": "UETERSEN",
+    "longname": "UETERSEN",
+    "km": 9.51,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.677083802370525,
+    "latitude": 53.67819251632445,
+    "water": {
+      "shortname": "PINNAU",
+      "longname": "PINNAU"
+    }
+  },
+  {
+    "uuid": "26259e8f-7d2d-47e0-8851-0257542b63b3",
+    "number": "5970018",
+    "shortname": "PINNAU-SPERRWERK BP",
+    "longname": "PINNAU-SPERRWERK BP",
+    "km": 18.1,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.55875907937455,
+    "latitude": 53.67116721837194,
+    "water": {
+      "shortname": "PINNAU",
+      "longname": "PINNAU"
+    }
+  },
+  {
+    "uuid": "5e10e1e7-9115-4bd7-ad57-e2062f516891",
+    "number": "580412",
+    "shortname": "POTSDAM",
+    "longname": "POTSDAM",
+    "km": 26.63,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 13.07207102000197,
+    "latitude": 52.399886661642164,
+    "water": {
+      "shortname": "PHv",
+      "longname": "POTSDAMER HAVEL"
+    }
+  },
+  {
+    "uuid": "1b559a8e-02e4-4cdb-bf51-1021a0d1d954",
+    "number": "2330033",
+    "shortname": "WUK_BREISACH_2",
+    "longname": "WUK_BREISACH_2",
+    "agency": "BUNDESANSTALT FÜR GEWÄSSERKUNDE",
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "94f6eff1-4f3f-4850-82e0-a086198e9ffd",
+    "number": "2310010",
+    "shortname": "Basel-Rheinhalle",
+    "longname": "BASEL-RHEINHALLE",
+    "km": 165.9,
+    "agency": "BUNDESAMT FÜR UMWELT",
+    "longitude": 7.616666024691213,
+    "latitude": 47.559486101527995,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "06b978dd-8c4d-48ac-a0c8-2c16681ed281",
+    "number": "23300130",
+    "shortname": "RHEINWEILER",
+    "longname": "RHEINWEILER",
+    "km": 186.178,
+    "agency": "WSA OBERRHEIN",
+    "longitude": 7.52927487471016,
+    "latitude": 47.711058939467094,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "9da1ad2b-88db-4cbb-8132-eddfab07d5ba",
+    "number": "23300320",
+    "shortname": "BREISACH",
+    "longname": "BREISACH",
+    "km": 227.55,
+    "agency": "WSA OBERRHEIN",
+    "longitude": 7.572569952756944,
+    "latitude": 48.043210484541135,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "5389b878-fad5-4f37-bb87-e6cb36b7078b",
+    "number": "23300580",
+    "shortname": "RUST",
+    "longname": "RUST",
+    "km": 254.153,
+    "agency": "WSA OBERRHEIN",
+    "longitude": 7.682372588415029,
+    "latitude": 48.25746911757686,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "787e5d63-61e2-48cc-acf0-633e2bf923f2",
+    "number": "23300800",
+    "shortname": "OTTENHEIM",
+    "longname": "OTTENHEIM",
+    "km": 270.593,
+    "agency": "WSA OBERRHEIN",
+    "longitude": 7.732656673587074,
+    "latitude": 48.38464389312275,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "23af9b02-5c82-4f6e-acb8-f92a06e5e4da",
+    "number": "23300900",
+    "shortname": "KEHL-KRONENHOF",
+    "longname": "KEHL-KRONENHOF",
+    "km": 292.25,
+    "agency": "WSA OBERRHEIN",
+    "longitude": 7.8076918053124515,
+    "latitude": 48.56332017196366,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "b02be240-1364-4c97-8bb6-675d7d842332",
+    "number": "23500600",
+    "shortname": "IFFEZHEIM",
+    "longname": "IFFEZHEIM",
+    "km": 336.2,
+    "agency": "WSA OBERRHEIN",
+    "longitude": 8.116901503461627,
+    "latitude": 48.85214940730764,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "6b774802-fcb5-49ae-8ecb-ecaf1a278b1c",
+    "number": "23500700",
+    "shortname": "PLITTERSDORF",
+    "longname": "PLITTERSDORF",
+    "km": 340.215,
+    "agency": "WSA OBERRHEIN",
+    "longitude": 8.135927309547403,
+    "latitude": 48.88596738135841,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "b6c6d5c8-e2d5-4469-8dd8-fa972ef7eaea",
+    "number": "23700200",
+    "shortname": "MAXAU",
+    "longname": "MAXAU",
+    "km": 362.327,
+    "agency": "WSA OBERRHEIN",
+    "longitude": 8.30556376651173,
+    "latitude": 49.03897743979623,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "2cb8ae5b-c5c9-4fa8-bac0-bb724f2754f4",
+    "number": "23700600",
+    "shortname": "SPEYER",
+    "longname": "SPEYER",
+    "km": 400.6,
+    "agency": "WSA OBERRHEIN",
+    "longitude": 8.448704637325553,
+    "latitude": 49.32380651197393,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "57090802-c51a-4d09-8340-b4453cd0e1f5",
+    "number": "23700700",
+    "shortname": "MANNHEIM",
+    "longname": "MANNHEIM",
+    "km": 424.733,
+    "agency": "WSA OBERRHEIN",
+    "longitude": 8.45516501950902,
+    "latitude": 49.4839399720476,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "844a620f-f3b8-4b6b-8e3c-783ae2aa232a",
+    "number": "23900200",
+    "shortname": "WORMS",
+    "longname": "WORMS",
+    "km": 443.4,
+    "agency": "WSA OBERRHEIN",
+    "longitude": 8.37751894880782,
+    "latitude": 49.631836923283544,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "e020e651-e422-46d3-ae28-34887c5a4a8e",
+    "number": "3329",
+    "shortname": "KONSTANZ-RHEIN",
+    "longname": "KONSTANZ-RHEIN",
+    "km": 475.0,
+    "agency": "REGIERUNGSPRÄSIDIUM FREIBURG",
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "d28e7ed1-3317-41c5-bec6-725369ed1171",
+    "number": "23900600",
+    "shortname": "NIERSTEIN-OPPENHEIM",
+    "longname": "NIERSTEIN-OPPENHEIM",
+    "km": 480.606,
+    "agency": "WSA OBERRHEIN",
+    "longitude": 8.352376086475747,
+    "latitude": 49.864981402907794,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "a37a9aa3-45e9-4d90-9df6-109f3a28a5af",
+    "number": "25100100",
+    "shortname": "MAINZ",
+    "longname": "MAINZ",
+    "km": 498.27,
+    "agency": "WSA RHEIN",
+    "longitude": 8.27531853709192,
+    "latitude": 50.00399505526266,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "665be0fe-5e38-43f6-8b04-02a93bdbeeb4",
+    "number": "25100300",
+    "shortname": "OESTRICH",
+    "longname": "OESTRICH",
+    "km": 518.08,
+    "agency": "WSA RHEIN",
+    "longitude": 8.030047855742515,
+    "latitude": 50.00286634024613,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "0309cd61-90c9-470e-99d4-2ee4fb2c5f84",
+    "number": "25300200",
+    "shortname": "BINGEN",
+    "longname": "BINGEN",
+    "km": 528.36,
+    "agency": "WSA RHEIN",
+    "longitude": 7.899667963397107,
+    "latitude": 49.9703420958729,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "1d26e504-7f9e-480a-b52c-5932be6549ab",
+    "number": "25700100",
+    "shortname": "KAUB",
+    "longname": "KAUB",
+    "km": 546.3,
+    "agency": "WSA RHEIN",
+    "longitude": 7.764961728401985,
+    "latitude": 50.08543844622119,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "550eb7e9-172e-48e4-ae1e-d1b761b42223",
+    "number": "25700300",
+    "shortname": "SANKT GOAR",
+    "longname": "SANKT GOAR",
+    "km": 556.43,
+    "agency": "WSA RHEIN",
+    "longitude": 7.712614955322655,
+    "latitude": 50.15255698898359,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "2ff6379d-d168-4022-8da0-16846d45ef9b",
+    "number": "25700500",
+    "shortname": "BOPPARD",
+    "longname": "BOPPARD",
+    "km": 570.45,
+    "agency": "WSA RHEIN",
+    "longitude": 7.592132313690253,
+    "latitude": 50.232913717702615,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "d6dc44d1-63ac-4871-b175-60ac4040069a",
+    "number": "25700600",
+    "shortname": "BRAUBACH",
+    "longname": "BRAUBACH",
+    "km": 579.98,
+    "agency": "WSA RHEIN",
+    "longitude": 7.645667430975122,
+    "latitude": 50.27050106630473,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "4c7d796a-39f2-4f26-97a9-3aad01713e29",
+    "number": "25900700",
+    "shortname": "KOBLENZ",
+    "longname": "KOBLENZ",
+    "km": 591.49,
+    "agency": "WSA RHEIN",
+    "longitude": 7.60474054165621,
+    "latitude": 50.35863947564839,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "dc407f1e-e25f-4995-9feb-5bacc8658149",
+    "number": "27100370",
+    "shortname": "Neuwied Stadt",
+    "longname": "NEUWIED STADT",
+    "km": 608.04,
+    "agency": "DEICHINFORMATIONSZENTRUM NEUWIED",
+    "longitude": 7.457452746188491,
+    "latitude": 50.424277186208855,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "5735892a-ec65-4b29-97c5-50939aa9584e",
+    "number": "27100400",
+    "shortname": "ANDERNACH",
+    "longname": "ANDERNACH",
+    "km": 613.78,
+    "agency": "WSA RHEIN",
+    "longitude": 7.392055788752456,
+    "latitude": 50.44339015190925,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "b45359df-c020-4314-adb1-d1921db642da",
+    "number": "27100700",
+    "shortname": "OBERWINTER",
+    "longname": "OBERWINTER",
+    "km": 638.19,
+    "agency": "WSA RHEIN",
+    "longitude": 7.210222050979756,
+    "latitude": 50.613690410658755,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "593647aa-9fea-43ec-a7d6-6476a76ae868",
+    "number": "2710080",
+    "shortname": "BONN",
+    "longname": "BONN",
+    "km": 654.8,
+    "agency": "WSA RHEIN",
+    "longitude": 7.108045442593696,
+    "latitude": 50.7363979694278,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "a6ee8177-107b-47dd-bcfd-30960ccc6e9c",
+    "number": "2730010",
+    "shortname": "KÖLN",
+    "longname": "KÖLN",
+    "km": 688.0,
+    "agency": "WSA RHEIN",
+    "longitude": 6.963300159749653,
+    "latitude": 50.93694925646438,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "8f7e5f92-1153-4f93-acba-ca48670c8ca9",
+    "number": "2750010",
+    "shortname": "DÜSSELDORF",
+    "longname": "DÜSSELDORF",
+    "km": 744.2,
+    "agency": "WSA RHEIN",
+    "longitude": 6.769891254460825,
+    "latitude": 51.225498399959655,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "c0f51e35-d0e8-4318-afaf-c5fcbc29f4c1",
+    "number": "2770010",
+    "shortname": "DUISBURG-RUHRORT",
+    "longname": "DUISBURG-RUHRORT",
+    "km": 780.8,
+    "agency": "WSA RHEIN",
+    "longitude": 6.727926671815738,
+    "latitude": 51.455344914341104,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "f33c3cc9-dc4b-4b77-baa9-5a5f10704398",
+    "number": "2770040",
+    "shortname": "WESEL",
+    "longname": "WESEL",
+    "km": 814.0,
+    "agency": "WSA RHEIN",
+    "longitude": 6.606820258595952,
+    "latitude": 51.646142709344545,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "2f025389-fac8-4557-94d3-7d0428878c86",
+    "number": "2790010",
+    "shortname": "REES",
+    "longname": "REES",
+    "km": 837.4,
+    "agency": "WSA RHEIN",
+    "longitude": 6.395692160228798,
+    "latitude": 51.75695263686802,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "9598e4cb-0849-401e-bba0-689234b27644",
+    "number": "2790020",
+    "shortname": "EMMERICH",
+    "longname": "EMMERICH",
+    "km": 851.9,
+    "agency": "WSA RHEIN",
+    "longitude": 6.245594383748815,
+    "latitude": 51.82925156903814,
+    "water": {
+      "shortname": "RHEIN",
+      "longname": "RHEIN"
+    }
+  },
+  {
+    "uuid": "f18e81da-1fec-4308-a881-6defa7c6d18b",
+    "number": "27700262",
+    "shortname": "DUISBURG-MEIDERICH SCHLEUSE OW",
+    "longname": "DUISBURG-MEIDERICH SCHLEUSE OW",
+    "km": 0.869,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 6.77596181066609,
+    "latitude": 51.451717552843974,
+    "water": {
+      "shortname": "RHK",
+      "longname": "RHEIN-HERNE-KANAL"
+    }
+  },
+  {
+    "uuid": "48780245-36f2-453e-b430-5fa838851d6d",
+    "number": "27700273",
+    "shortname": "DUISBURG-MEIDERICH SCHLEUSE UW",
+    "longname": "DUISBURG-MEIDERICH SCHLEUSE UW",
+    "km": 1.1,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 6.779116363296888,
+    "latitude": 51.452370230354894,
+    "water": {
+      "shortname": "RHK",
+      "longname": "RHEIN-HERNE-KANAL"
+    }
+  },
+  {
+    "uuid": "12f63015-c66a-4e89-a69b-ddd069872d40",
+    "number": "27700251",
+    "shortname": "OBERHAUSEN SCHLEUSE UW",
+    "longname": "OBERHAUSEN SCHLEUSE UW",
+    "km": 5.189,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 6.815456818151979,
+    "latitude": 51.478972077450344,
+    "water": {
+      "shortname": "RHK",
+      "longname": "RHEIN-HERNE-KANAL"
+    }
+  },
+  {
+    "uuid": "e251f943-ce2f-4003-b208-e2797aa72202",
+    "number": "27700240",
+    "shortname": "OBERHAUSEN SCHLEUSE OW",
+    "longname": "OBERHAUSEN SCHLEUSE OW",
+    "km": 5.734,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 6.821446710191658,
+    "latitude": 51.48213666183001,
+    "water": {
+      "shortname": "RHK",
+      "longname": "RHEIN-HERNE-KANAL"
+    }
+  },
+  {
+    "uuid": "427318d0-ee8d-4d9b-89f1-e8a8685b5d8c",
+    "number": "27700230",
+    "shortname": "GELSENKIRCHEN SCHLEUSE UW",
+    "longname": "GELSENKIRCHEN SCHLEUSE UW",
+    "km": 23.069,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 7.053884636912698,
+    "latitude": 51.52979233969689,
+    "water": {
+      "shortname": "RHK",
+      "longname": "RHEIN-HERNE-KANAL"
+    }
+  },
+  {
+    "uuid": "5b9f8134-8bf0-4b51-a548-72a36303bbc2",
+    "number": "27700229",
+    "shortname": "GELSENKIRCHEN SCHLEUSE OW",
+    "longname": "GELSENKIRCHEN SCHLEUSE OW",
+    "km": 23.566,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 7.059887649239829,
+    "latitude": 51.53222779898015,
+    "water": {
+      "shortname": "RHK",
+      "longname": "RHEIN-HERNE-KANAL"
+    }
+  },
+  {
+    "uuid": "23045f8b-e7e8-4534-8162-b7dba81764db",
+    "number": "27700218",
+    "shortname": "WANNE EICKEL SCHLEUSE UW",
+    "longname": "WANNE EICKEL SCHLEUSE UW",
+    "km": 30.907,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 7.158004187559419,
+    "latitude": 51.54724841104467,
+    "water": {
+      "shortname": "RHK",
+      "longname": "RHEIN-HERNE-KANAL"
+    }
+  },
+  {
+    "uuid": "05ca0e33-5c71-4368-b824-2243fcff656c",
+    "number": "27700193",
+    "shortname": "WANNE EICKEL SCHLEUSE OW",
+    "longname": "WANNE EICKEL SCHLEUSE OW",
+    "km": 31.47,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 7.165993854149794,
+    "latitude": 51.54815974307825,
+    "water": {
+      "shortname": "RHK",
+      "longname": "RHEIN-HERNE-KANAL"
+    }
+  },
+  {
+    "uuid": "b9975ea1-5b45-4e27-abb8-4c3f7878b1f7",
+    "number": "27700160",
+    "shortname": "HERNE UW",
+    "longname": "HERNE UW",
+    "km": 36.825,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 7.306141323485447,
+    "latitude": 51.60310157968186,
+    "water": {
+      "shortname": "RHK",
+      "longname": "RHEIN-HERNE-KANAL"
+    }
+  },
+  {
+    "uuid": "ac6c4362-1fb1-4b7a-9406-016bed804804",
+    "number": "27700150",
+    "shortname": "HERNE OW",
+    "longname": "HERNE OW",
+    "km": 37.35,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 7.245823919191934,
+    "latitude": 51.564599683663246,
+    "water": {
+      "shortname": "RHK",
+      "longname": "RHEIN-HERNE-KANAL"
+    }
+  },
+  {
+    "uuid": "4d00c13e-e689-4dfc-85e6-a3fc8596ac8b",
+    "number": "589000",
+    "shortname": "WOLFSBRUCH OP",
+    "longname": "WOLFSBRUCH OP",
+    "km": 2.284,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 12.905341359658095,
+    "latitude": 53.18243330846866,
+    "water": {
+      "shortname": "RBG",
+      "longname": "RHEINSBERGER GEWÄSSER"
+    }
+  },
+  {
+    "uuid": "3d43a8d7-e599-4fc4-bf62-65eb0794685e",
+    "number": "589010",
+    "shortname": "WOLFSBRUCH UP",
+    "longname": "WOLFSBRUCH UP",
+    "km": 2.468,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 12.902643044770075,
+    "latitude": 53.18215725249415,
+    "water": {
+      "shortname": "RBG",
+      "longname": "RHEINSBERGER GEWÄSSER"
+    }
+  },
+  {
+    "uuid": "4e4fac1a-6fb4-4ce2-a041-bdc4a668d95d",
+    "number": "3101016",
+    "shortname": "SCHLEUSE ROTHENSEE UP",
+    "longname": "SCHLEUSE ROTHENSEE UP",
+    "km": 1.3,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.674396631007529,
+    "latitude": 52.22050915843653,
+    "water": {
+      "shortname": "RVK",
+      "longname": "ROTHENSEER-VERBINDUNGSKANAL"
+    }
+  },
+  {
+    "uuid": "ea3e14ca-2872-47e7-a10c-8b2e0b46bdba",
+    "number": "13101016",
+    "shortname": "MAGDEBURG-RO NWS",
+    "longname": "MAGDEBURG-RO NWS",
+    "km": 4.15,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.687266581469508,
+    "latitude": 52.19703677234943,
+    "water": {
+      "shortname": "RVK",
+      "longname": "ROTHENSEER-VERBINDUNGSKANAL"
+    }
+  },
+  {
+    "uuid": "12a3037f-cbf3-49d3-8da5-77fb38730bba",
+    "number": "27600090",
+    "shortname": "RUHRWEHR OW",
+    "longname": "RUHRWEHR OW",
+    "km": 2.961,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 6.7574367229920265,
+    "latitude": 51.445922505872595,
+    "water": {
+      "shortname": "RUHR",
+      "longname": "RUHR"
+    }
+  },
+  {
+    "uuid": "36fb2c81-5fc0-4f2c-8f37-347c822a4b59",
+    "number": "27600030",
+    "shortname": "SCHLOSSBRÜCKE MÜLHEIM",
+    "longname": "SCHLOSSBRÜCKE MÜLHEIM",
+    "km": 12.183,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 6.8759653038330795,
+    "latitude": 51.42676108172602,
+    "water": {
+      "shortname": "RUHR",
+      "longname": "RUHR"
+    }
+  },
+  {
+    "uuid": "c0594fb5-77ff-4287-9b8d-7ff326afe9ff",
+    "number": "2769510000100",
+    "shortname": "Hattingen",
+    "longname": "HATTINGEN",
+    "km": 15.3,
+    "agency": "RUHRVERBAND",
+    "longitude": 7.161034055228365,
+    "latitude": 51.399749917827165,
+    "water": {
+      "shortname": "RUHR",
+      "longname": "RUHR"
+    }
+  },
+  {
+    "uuid": "752a8c5a-5f2a-4575-af2f-d825cffc6eb3",
+    "number": "126010",
+    "shortname": "RUTHENSTROM-SPERRWERK",
+    "longname": "RUTHENSTROM-SPERRWERK",
+    "km": 3.64,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.419406799690005,
+    "latitude": 53.71995967263287,
+    "water": {
+      "shortname": "Ruthenstrom",
+      "longname": "RUTHENSTROM"
+    }
+  },
+  {
+    "uuid": "99989609-7bd8-4f91-bd55-ad31fbf55ee4",
+    "number": "586050",
+    "shortname": "WOLTERSDORF UP",
+    "longname": "WOLTERSDORF UP",
+    "km": 3.71,
+    "agency": "WSA BERLIN",
+    "longitude": 13.764181855832788,
+    "latitude": 52.4417703510018,
+    "water": {
+      "shortname": "RÜG",
+      "longname": "RÜDERSDORFER GEWÄSSER"
+    }
+  },
+  {
+    "uuid": "2ae6cc12-5491-4f59-94c5-ccdbcb7474c8",
+    "number": "586040",
+    "shortname": "WOLTERSDORF OP",
+    "longname": "WOLTERSDORF OP",
+    "km": 3.89,
+    "agency": "WSA BERLIN",
+    "longitude": 13.764873755326386,
+    "latitude": 52.44332337371182,
+    "water": {
+      "shortname": "RÜG",
+      "longname": "RÜDERSDORFER GEWÄSSER"
+    }
+  },
+  {
+    "uuid": "2203fce7-9d1e-4586-84ab-0797468863a1",
+    "number": "570950",
+    "shortname": "GROSS ROSENBURG",
+    "longname": "GROSS ROSENBURG",
+    "km": 9.64,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.87400853914681,
+    "latitude": 51.91711420240949,
+    "water": {
+      "shortname": "SAALE",
+      "longname": "SAALE"
+    }
+  },
+  {
+    "uuid": "8d1fdc5b-b63a-4745-baeb-5e266d247e99",
+    "number": "570940",
+    "shortname": "CALBE GRIZEHNE",
+    "longname": "CALBE GRIZEHNE",
+    "km": 17.43,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.812213724371462,
+    "latitude": 51.91641172581023,
+    "water": {
+      "shortname": "SAALE",
+      "longname": "SAALE"
+    }
+  },
+  {
+    "uuid": "46a3350b-f3e6-4f5d-a297-2652c43bfac8",
+    "number": "570930",
+    "shortname": "CALBE UP",
+    "longname": "CALBE UP",
+    "km": 19.67,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.788818573156826,
+    "latitude": 51.90627916421889,
+    "water": {
+      "shortname": "SAALE",
+      "longname": "SAALE"
+    }
+  },
+  {
+    "uuid": "184200bc-cdb6-4116-a7cf-ac986c2d4fb8",
+    "number": "570920",
+    "shortname": "CALBE OP",
+    "longname": "CALBE OP",
+    "km": 20.08,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.78871221282285,
+    "latitude": 51.901075225348265,
+    "water": {
+      "shortname": "SAALE",
+      "longname": "SAALE"
+    }
+  },
+  {
+    "uuid": "ace7d4b0-33e5-46db-a41d-2fa7a321f67a",
+    "number": "579100",
+    "shortname": "NIENBURG (Saale)",
+    "longname": "NIENBURG (SAALE)",
+    "km": 27.9,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.772200902082998,
+    "latitude": 51.83918327033327,
+    "water": {
+      "shortname": "SAALE",
+      "longname": "SAALE"
+    }
+  },
+  {
+    "uuid": "501aa608-ea81-4690-a491-6602114c14af",
+    "number": "570910",
+    "shortname": "BERNBURG UP",
+    "longname": "BERNBURG UP",
+    "km": 36.05,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.735423010047713,
+    "latitude": 51.79679262113111,
+    "water": {
+      "shortname": "SAALE",
+      "longname": "SAALE"
+    }
+  },
+  {
+    "uuid": "e7f52bd2-f0cb-4194-aa85-4ad76a3a0671",
+    "number": "570900",
+    "shortname": "BERNBURG OP",
+    "longname": "BERNBURG OP",
+    "km": 36.2,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.733834123733041,
+    "latitude": 51.79584533283747,
+    "water": {
+      "shortname": "SAALE",
+      "longname": "SAALE"
+    }
+  },
+  {
+    "uuid": "93ddc1e6-072c-45f6-99c0-d7d7df9d39cf",
+    "number": "570880",
+    "shortname": "ALSLEBEN UP",
+    "longname": "ALSLEBEN UP",
+    "km": 50.24,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.677368657450529,
+    "latitude": 51.70755235353753,
+    "water": {
+      "shortname": "SAALE",
+      "longname": "SAALE"
+    }
+  },
+  {
+    "uuid": "9fb9abce-e1ac-4c11-94b2-a32d63f6fb40",
+    "number": "570870",
+    "shortname": "ALSLEBEN OP",
+    "longname": "ALSLEBEN OP",
+    "km": 50.42,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.679214205831705,
+    "latitude": 51.70638000482505,
+    "water": {
+      "shortname": "SAALE",
+      "longname": "SAALE"
+    }
+  },
+  {
+    "uuid": "e70e39ec-e476-4991-a39d-7d0e009556ef",
+    "number": "570860",
+    "shortname": "ROTHENBURG UP",
+    "longname": "ROTHENBURG UP",
+    "km": 58.6,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.75127552283289,
+    "latitude": 51.6552970714032,
+    "water": {
+      "shortname": "SAALE",
+      "longname": "SAALE"
+    }
+  },
+  {
+    "uuid": "5a7e1d4a-53aa-4f9f-a59b-50e01b7260c7",
+    "number": "570850",
+    "shortname": "ROTHENBURG OP",
+    "longname": "ROTHENBURG OP",
+    "km": 58.78,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.752179249840303,
+    "latitude": 51.65386092350868,
+    "water": {
+      "shortname": "SAALE",
+      "longname": "SAALE"
+    }
+  },
+  {
+    "uuid": "af82bc24-a355-4247-9532-b305eb57e16f",
+    "number": "570840",
+    "shortname": "WETTIN UP",
+    "longname": "WETTIN UP",
+    "km": 70.3,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.792977813073664,
+    "latitude": 51.58234220035164,
+    "water": {
+      "shortname": "SAALE",
+      "longname": "SAALE"
+    }
+  },
+  {
+    "uuid": "632a133b-fcc2-467f-8f9c-1ec63144f8d6",
+    "number": "570830",
+    "shortname": "WETTIN OP",
+    "longname": "WETTIN OP",
+    "km": 70.47,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.795328187012027,
+    "latitude": 51.58260697255818,
+    "water": {
+      "shortname": "SAALE",
+      "longname": "SAALE"
+    }
+  },
+  {
+    "uuid": "33193e2b-1203-4681-a23d-f87b9fab4b60",
+    "number": "570810",
+    "shortname": "TROTHA UP",
+    "longname": "TROTHA UP",
+    "km": 89.15,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.954553184220046,
+    "latitude": 51.51425200250667,
+    "water": {
+      "shortname": "SAALE",
+      "longname": "SAALE"
+    }
+  },
+  {
+    "uuid": "ea6870dc-507e-4ec4-a38c-cd8a5e8b7025",
+    "number": "570800",
+    "shortname": "TROTHA OP",
+    "longname": "TROTHA OP",
+    "km": 89.22,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.954885063267607,
+    "latitude": 51.51368588271419,
+    "water": {
+      "shortname": "SAALE",
+      "longname": "SAALE"
+    }
+  },
+  {
+    "uuid": "4626f6bc-494b-4a51-8c10-b47a32e87790",
+    "number": "570710",
+    "shortname": "RÖPZIG",
+    "longname": "RÖPZIG",
+    "km": 101.9,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 11.9446517980664,
+    "latitude": 51.435071393968045,
+    "water": {
+      "shortname": "SAALE",
+      "longname": "SAALE"
+    }
+  },
+  {
+    "uuid": "cde0f9b6-6b13-4de9-adfe-cad1fe085e30",
+    "number": "570630",
+    "shortname": "RISCHMÜHLE UP",
+    "longname": "RISCHMÜHLE UP",
+    "km": 115.19,
+    "agency": "WSA MAGDEBURG",
+    "longitude": 12.003389052496246,
+    "latitude": 51.35059487814885,
+    "water": {
+      "shortname": "SAALE",
+      "longname": "SAALE"
+    }
+  },
+  {
+    "uuid": "31dfddc7-80a5-45ff-907b-7bf2c1d825c5",
+    "number": "570620",
+    "shortname": "RISCHMÜHLE OP",
+    "longname": "RISCHMÜHLE OP",
+    "km": 115.26,
+    "agency": "WSA DRESDEN",
+    "longitude": 12.002255078537344,
+    "latitude": 51.35019942010869,
+    "water": {
+      "shortname": "SAALE",
+      "longname": "SAALE"
+    }
+  },
+  {
+    "uuid": "fe72ee98-88e9-4d19-aba1-f97f61b7d4de",
+    "number": "26400550",
+    "shortname": "FREMERSDORF",
+    "longname": "FREMERSDORF",
+    "km": 48.5,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 6.648423933615776,
+    "latitude": 49.40893472937927,
+    "water": {
+      "shortname": "SAAR",
+      "longname": "SAAR"
+    }
+  },
+  {
+    "uuid": "1cc71bb2-99e5-4479-8ae9-8375568ed22c",
+    "number": "26400400",
+    "shortname": "LISDORF UP",
+    "longname": "LISDORF UP",
+    "km": 65.88,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "water": {
+      "shortname": "SAAR",
+      "longname": "SAAR"
+    }
+  },
+  {
+    "uuid": "a9ca43e9-ef92-4f1c-ac02-a6c8ccad7b9f",
+    "number": "26400220",
+    "shortname": "SANKT ARNUAL",
+    "longname": "SANKT ARNUAL",
+    "km": 90.8,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "longitude": 7.022664603929586,
+    "latitude": 49.214871513781404,
+    "water": {
+      "shortname": "SAAR",
+      "longname": "SAAR"
+    }
+  },
+  {
+    "uuid": "eeaba884-d4c5-4a83-88fb-adcd79adbc50",
+    "number": "26400100",
+    "shortname": "HANWEILER",
+    "longname": "HANWEILER",
+    "km": 104.6,
+    "agency": "WSA MOSEL-SAAR-LAHN",
+    "water": {
+      "shortname": "SAAR",
+      "longname": "SAAR"
+    }
+  },
+  {
+    "uuid": "aac1846d-a0ea-46f3-984d-b3938b0cb82d",
+    "number": "603110",
+    "shortname": "SCHWEDT SCHLEUSE AP",
+    "longname": "SCHWEDT SCHLEUSE AP",
+    "km": 0.466,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 14.323415812176883,
+    "latitude": 53.07016753424558,
+    "water": {
+      "shortname": "SQF",
+      "longname": "SCHWEDTER QUERFAHRT"
+    }
+  },
+  {
+    "uuid": "cc57198c-b40f-4c11-ad50-fceae4669a3e",
+    "number": "59000106",
+    "shortname": "SCHWINGE-SPERRWERK",
+    "longname": "SCHWINGE-SPERRWERK",
+    "km": 3.6,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.514315636026312,
+    "latitude": 53.6248522984709,
+    "water": {
+      "shortname": "Schwinge",
+      "longname": "SCHWINGE"
+    }
+  },
+  {
+    "uuid": "d89eb759-58c4-43f4-9fe4-e6a21af23f5c",
+    "number": "582750",
+    "shortname": "BERLIN-CHARLOTTENBURG UP",
+    "longname": "BERLIN-CHARLOTTENBURG UP",
+    "km": 6.24,
+    "agency": "WSA BERLIN",
+    "longitude": 13.282545354179138,
+    "latitude": 52.530036728491496,
+    "water": {
+      "shortname": "SOW",
+      "longname": "SPREE-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "63a222c0-bd45-4af8-b9a7-27f9443a1936",
+    "number": "582740",
+    "shortname": "BERLIN-CHARLOTTENBURG OP",
+    "longname": "BERLIN-CHARLOTTENBURG OP",
+    "km": 6.44,
+    "agency": "WSA BERLIN",
+    "longitude": 13.292223567643292,
+    "latitude": 52.53142330680511,
+    "water": {
+      "shortname": "SOW",
+      "longname": "SPREE-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "09e15cf6-f155-4b76-b92f-6c260839121c",
+    "number": "582730",
+    "shortname": "BERLIN-MÜHLENDAMM UP",
+    "longname": "BERLIN-MÜHLENDAMM UP",
+    "km": 17.7,
+    "agency": "WSA BERLIN",
+    "longitude": 13.408690239605303,
+    "latitude": 52.51489692313214,
+    "water": {
+      "shortname": "SOW",
+      "longname": "SPREE-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "6dc4e4a0-2c10-4c27-a08f-a0ca0aa13df2",
+    "number": "582720",
+    "shortname": "BERLIN-MÜHLENDAMM OP",
+    "longname": "BERLIN-MÜHLENDAMM OP",
+    "km": 17.9,
+    "agency": "WSA BERLIN",
+    "longitude": 13.41146044987869,
+    "latitude": 52.51445948590114,
+    "water": {
+      "shortname": "SOW",
+      "longname": "SPREE-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "47d3e815-c556-4e1b-93de-9fe07329fb00",
+    "number": "586290",
+    "shortname": "BERLIN-KÖPENICK",
+    "longname": "BERLIN-KÖPENICK",
+    "km": 35.02,
+    "agency": "WSA BERLIN",
+    "longitude": 13.573985900031895,
+    "latitude": 52.42968971242617,
+    "water": {
+      "shortname": "SOW",
+      "longname": "SPREE-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "1b8ac909-8377-4887-ab70-748de2dd9775",
+    "number": "585930",
+    "shortname": "WERNSDORF UP",
+    "longname": "WERNSDORF UP",
+    "km": 47.46,
+    "agency": "WSA BERLIN",
+    "longitude": 13.707553959773323,
+    "latitude": 52.37262802883052,
+    "water": {
+      "shortname": "SOW",
+      "longname": "SPREE-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "9d7cc90a-7380-4dbf-8641-3201dfcbc75d",
+    "number": "585920",
+    "shortname": "WERNSDORF OP",
+    "longname": "WERNSDORF OP",
+    "km": 47.74,
+    "agency": "WSA BERLIN",
+    "longitude": 13.711208442751907,
+    "latitude": 52.371176042641245,
+    "water": {
+      "shortname": "SOW",
+      "longname": "SPREE-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "e7440532-8033-44d6-99b4-037a05da0c54",
+    "number": "582650",
+    "shortname": "FUERSTENWALDE UP",
+    "longname": "FUERSTENWALDE UP",
+    "km": 74.65,
+    "agency": "WSA BERLIN",
+    "longitude": 14.065136843229512,
+    "latitude": 52.35413194631881,
+    "water": {
+      "shortname": "SOW",
+      "longname": "SPREE-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "53088d32-226a-49b7-962d-a5879c3aba29",
+    "number": "582640",
+    "shortname": "FUERSTENWALDE OP",
+    "longname": "FUERSTENWALDE OP",
+    "km": 74.75,
+    "agency": "WSA BERLIN",
+    "longitude": 14.066528485661564,
+    "latitude": 52.35425977962824,
+    "water": {
+      "shortname": "SOW",
+      "longname": "SPREE-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "b2204ea2-eb50-439f-a64d-98062ea1d21f",
+    "number": "585950",
+    "shortname": "KERSDORF UP",
+    "longname": "KERSDORF UP",
+    "km": 89.66,
+    "agency": "WSA BERLIN",
+    "longitude": 14.239080616624546,
+    "latitude": 52.30510664095507,
+    "water": {
+      "shortname": "SOW",
+      "longname": "SPREE-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "b577a043-b6b8-4db8-80e7-8abbb565c8c5",
+    "number": "585940",
+    "shortname": "KERSDORF OP",
+    "longname": "KERSDORF OP",
+    "km": 89.86,
+    "agency": "WSA BERLIN",
+    "longitude": 14.241757959032718,
+    "latitude": 52.304575647601936,
+    "water": {
+      "shortname": "SOW",
+      "longname": "SPREE-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "df242a51-7ed5-4205-be60-47e0e1f46fad",
+    "number": "690050",
+    "shortname": "EISENHUETTENSTADT SCHL. OP",
+    "longname": "EISENHUETTENSTADT SCHL. OP",
+    "km": 127.18,
+    "agency": "WSA BERLIN",
+    "longitude": 14.652208747570233,
+    "latitude": 52.13216690713276,
+    "water": {
+      "shortname": "SOW",
+      "longname": "SPREE-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "9c336515-b238-4a1a-947f-dabe47f4b502",
+    "number": "603020",
+    "shortname": "EISENHUETTENSTADT SCHL. UP",
+    "longname": "EISENHUETTENSTADT SCHL. UP",
+    "km": 127.55,
+    "agency": "WSA BERLIN",
+    "longitude": 14.656283445438236,
+    "latitude": 52.13213391592677,
+    "water": {
+      "shortname": "SOW",
+      "longname": "SPREE-ODER-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "2d9f473e-f2b6-4f50-bb4d-96362230a976",
+    "number": "586360",
+    "shortname": "KUMMERSDORF UP",
+    "longname": "KUMMERSDORF UP",
+    "km": 10.21,
+    "agency": "WSA BERLIN",
+    "longitude": 13.864599735155117,
+    "latitude": 52.26877550909009,
+    "water": {
+      "shortname": "SKG",
+      "longname": "STORKOWER GEWAESSER"
+    }
+  },
+  {
+    "uuid": "9e4adf71-ed15-453a-b50e-de03d2077e04",
+    "number": "586350",
+    "shortname": "KUMMERSDORF OP",
+    "longname": "KUMMERSDORF OP",
+    "km": 10.4,
+    "agency": "WSA BERLIN",
+    "longitude": 13.866129124898228,
+    "latitude": 52.26739716715828,
+    "water": {
+      "shortname": "SKG",
+      "longname": "STORKOWER GEWAESSER"
+    }
+  },
+  {
+    "uuid": "b89b68fd-0d40-4941-9ee1-e4f7a56351a0",
+    "number": "586340",
+    "shortname": "STORKOW UP",
+    "longname": "STORKOW UP",
+    "km": 15.39,
+    "agency": "WSA BERLIN",
+    "longitude": 13.931063554931628,
+    "latitude": 52.25840445102645,
+    "water": {
+      "shortname": "SKG",
+      "longname": "STORKOWER GEWAESSER"
+    }
+  },
+  {
+    "uuid": "4e6a3d17-1855-4458-b3fc-e71921a4da7b",
+    "number": "586330",
+    "shortname": "STORKOW OP",
+    "longname": "STORKOW OP",
+    "km": 15.56,
+    "agency": "WSA BERLIN",
+    "longitude": 13.93356398465315,
+    "latitude": 52.258570860419546,
+    "water": {
+      "shortname": "SKG",
+      "longname": "STORKOWER GEWAESSER"
+    }
+  },
+  {
+    "uuid": "c1d6f464-f38a-4e38-9f74-4c5d22a42c88",
+    "number": "586320",
+    "shortname": "WENDISCH RIETZ UP",
+    "longname": "WENDISCH RIETZ UP",
+    "km": 22.71,
+    "agency": "WSA BERLIN",
+    "longitude": 14.002967143121301,
+    "latitude": 52.214285822086865,
+    "water": {
+      "shortname": "SKG",
+      "longname": "STORKOWER GEWAESSER"
+    }
+  },
+  {
+    "uuid": "a9299f0c-9eb8-4369-a260-4be929e72736",
+    "number": "586310",
+    "shortname": "WENDISCH RIETZ OP",
+    "longname": "WENDISCH RIETZ OP",
+    "km": 22.77,
+    "agency": "WSA BERLIN",
+    "longitude": 14.004329993353952,
+    "latitude": 52.21418947995005,
+    "water": {
+      "shortname": "SKG",
+      "longname": "STORKOWER GEWAESSER"
+    }
+  },
+  {
+    "uuid": "15859426-834c-429e-9c41-2e097b717b1d",
+    "number": "5970037",
+    "shortname": "GRÖNHUDE",
+    "longname": "GRÖNHUDE",
+    "km": 5.1,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.690579345819973,
+    "latitude": 53.935698195873435,
+    "water": {
+      "shortname": "STÖR",
+      "longname": "STÖR"
+    }
+  },
+  {
+    "uuid": "24c6a014-864b-4d53-bd05-0b49106f5412",
+    "number": "5970038",
+    "shortname": "BREITENBERG",
+    "longname": "BREITENBERG",
+    "km": 11.9,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.632318956087092,
+    "latitude": 53.92767943205299,
+    "water": {
+      "shortname": "STÖR",
+      "longname": "STÖR"
+    }
+  },
+  {
+    "uuid": "d863cbc3-5e5e-4095-855c-026f0850dd58",
+    "number": "5970042",
+    "shortname": "ITZEHOE HAFEN",
+    "longname": "ITZEHOE HAFEN",
+    "km": 24.88,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.500604517047933,
+    "latitude": 53.9244589886425,
+    "water": {
+      "shortname": "STÖR",
+      "longname": "STÖR"
+    }
+  },
+  {
+    "uuid": "e5b8e9f3-f0cc-4ad7-8707-577ee1b25b3e",
+    "number": "5970040",
+    "shortname": "STÖR-SPERRWERK BP",
+    "longname": "STÖR-SPERRWERK BP",
+    "km": 50.2,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.401400447906958,
+    "latitude": 53.826148252925,
+    "water": {
+      "shortname": "STÖR",
+      "longname": "STÖR"
+    }
+  },
+  {
+    "uuid": "69fb4730-4866-4838-9b18-2c0ee9dce80d",
+    "number": "596930",
+    "shortname": "BANZKOW UP",
+    "longname": "BANZKOW UP",
+    "km": 10.85,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.521818558105737,
+    "latitude": 53.52283645455303,
+    "water": {
+      "shortname": "STW",
+      "longname": "STÖR-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "a9320108-ad58-41b8-b7b5-f52163a23927",
+    "number": "596920",
+    "shortname": "BANZKOW OP",
+    "longname": "BANZKOW OP",
+    "km": 11.0,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.520200870127512,
+    "latitude": 53.52375723541154,
+    "water": {
+      "shortname": "STW",
+      "longname": "STÖR-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "680d5966-273f-4254-aabe-5d4e00e12a24",
+    "number": "596900",
+    "shortname": "SCHWERIN WERDERBRÜCKE",
+    "longname": "SCHWERIN WERDERBRÜCKE",
+    "km": 27.61,
+    "agency": "WSA LAUENBURG",
+    "longitude": 11.427451938837342,
+    "latitude": 53.646381163634075,
+    "water": {
+      "shortname": "STW",
+      "longname": "STÖR-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "38414157-862e-428a-ae2c-77ff79871227",
+    "number": "587030",
+    "shortname": "KLEINMACHNOW UP",
+    "longname": "KLEINMACHNOW UP",
+    "km": 8.28,
+    "agency": "WSA BERLIN",
+    "longitude": 13.207976409937142,
+    "latitude": 52.39552927464592,
+    "water": {
+      "shortname": "TeK",
+      "longname": "TELTOWKANAL"
+    }
+  },
+  {
+    "uuid": "bb23b276-2c1c-4cde-bc9c-9d90d5a04890",
+    "number": "587020",
+    "shortname": "KLEINMACHNOW OP",
+    "longname": "KLEINMACHNOW OP",
+    "km": 8.42,
+    "agency": "WSA BERLIN",
+    "longitude": 13.209949405789361,
+    "latitude": 52.39568883903297,
+    "water": {
+      "shortname": "TeK",
+      "longname": "TELTOWKANAL"
+    }
+  },
+  {
+    "uuid": "4457a320-1f99-4352-8a43-ff24109d99ea",
+    "number": "581230",
+    "shortname": "KANNENBURG UP",
+    "longname": "KANNENBURG UP",
+    "km": 3.572,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.391285105541657,
+    "latitude": 53.074459805567166,
+    "water": {
+      "shortname": "TlG",
+      "longname": "TEMPLINER GEWÄSSER"
+    }
+  },
+  {
+    "uuid": "a869dd39-dcf7-46f2-b9bf-b210816109ac",
+    "number": "581220",
+    "shortname": "KANNENBURG OP",
+    "longname": "KANNENBURG OP",
+    "km": 3.631,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.392110994875233,
+    "latitude": 53.07462088716688,
+    "water": {
+      "shortname": "TlG",
+      "longname": "TEMPLINER GEWÄSSER"
+    }
+  },
+  {
+    "uuid": "5918b484-597f-4a1c-8262-0d0cbbb7986d",
+    "number": "581210",
+    "shortname": "TEMPLIN UP",
+    "longname": "TEMPLIN UP",
+    "km": 13.291,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.49475244715308,
+    "latitude": 53.122253182102575,
+    "water": {
+      "shortname": "TlG",
+      "longname": "TEMPLINER GEWÄSSER"
+    }
+  },
+  {
+    "uuid": "71357738-c8e2-4cb7-a41a-365659bb8d58",
+    "number": "581200",
+    "shortname": "TEMPLIN OP",
+    "longname": "TEMPLIN OP",
+    "km": 13.338,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.495313970633909,
+    "latitude": 53.12250673689759,
+    "water": {
+      "shortname": "TlG",
+      "longname": "TEMPLINER GEWÄSSER"
+    }
+  },
+  {
+    "uuid": "f4f9f7fb-eeff-46dc-9727-04d8aa56240a",
+    "number": "9620090",
+    "shortname": "LÜBECK-BAUHOF",
+    "longname": "LÜBECK-BAUHOF",
+    "km": 7.79,
+    "agency": "WSA OSTSEE",
+    "longitude": 10.703065068850526,
+    "latitude": 53.89300772042554,
+    "water": {
+      "shortname": "TRAVE",
+      "longname": "TRAVE"
+    }
+  },
+  {
+    "uuid": "c7383149-1f77-430d-8bef-c5667be3846b",
+    "number": "9620085",
+    "shortname": "TRAVEMÜNDE",
+    "longname": "TRAVEMÜNDE",
+    "km": 26.2,
+    "agency": "WSA OSTSEE",
+    "longitude": 10.872181527429802,
+    "latitude": 53.958023682263274,
+    "water": {
+      "shortname": "TRAVE",
+      "longname": "TRAVE"
+    }
+  },
+  {
+    "uuid": "795ce865-3ac4-43b8-88d5-049a34e4359e",
+    "number": "9520061",
+    "shortname": "FRIEDRICHSTADT TREENE",
+    "longname": "FRIEDRICHSTADT TREENE",
+    "km": 0.0,
+    "agency": "WSA TÖNNING",
+    "longitude": 9.083812848701692,
+    "latitude": 54.3736511770528,
+    "water": {
+      "shortname": "TREENE",
+      "longname": "TREENE"
+    }
+  },
+  {
+    "uuid": "d2d025a2-e691-4986-b9c4-923e7f1a47c3",
+    "number": "580430",
+    "shortname": "KETZIN",
+    "longname": "KETZIN",
+    "km": 34.053,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.856783971314364,
+    "latitude": 52.46315289163043,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "16d180c2-63aa-486b-8966-81a6041360bc",
+    "number": "580440",
+    "shortname": "BRANDENBURG OP",
+    "longname": "BRANDENBURG OP",
+    "km": 55.115,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.580815991357884,
+    "latitude": 52.420872280876374,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "f8806fa4-cc2c-46e8-9b87-6231da0e3ddd",
+    "number": "580450",
+    "shortname": "BRANDENBURG UP",
+    "longname": "BRANDENBURG UP",
+    "km": 56.0,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.568842775816783,
+    "latitude": 52.4236624710917,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "aa97c894-ed26-4fdd-945f-db9667979268",
+    "number": "587560",
+    "shortname": "PLAUE OP",
+    "longname": "PLAUE OP",
+    "km": 67.8,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.393021643822584,
+    "latitude": 52.40270160030484,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "9829cab0-746b-4d10-9124-79ddda0a843e",
+    "number": "580600",
+    "shortname": "PLAUE UP",
+    "longname": "PLAUE UP",
+    "km": 68.0,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.394772455274657,
+    "latitude": 52.40296536913737,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "2d1fa45a-8928-4ad0-b564-e74f7189681c",
+    "number": "580601",
+    "shortname": "TIECKOW",
+    "longname": "TIECKOW",
+    "km": 76.33,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.44750345418973,
+    "latitude": 52.47272937492226,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "6c76e98e-44ca-4d25-91e7-b07c68577c5e",
+    "number": "580620",
+    "shortname": "BAHNITZ OP",
+    "longname": "BAHNITZ OP",
+    "km": 81.793,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.41871181181939,
+    "latitude": 52.50135556362991,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "1ebd0f94-cc06-445c-8e73-43fe2b8c72dc",
+    "number": "580630",
+    "shortname": "BAHNITZ UP",
+    "longname": "BAHNITZ UP",
+    "km": 82.11,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.415237248227585,
+    "latitude": 52.50076040293713,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "43ca90f5-3b4c-4b35-86ac-cab0fe1c2ce5",
+    "number": "580640",
+    "shortname": "RATHENOW OP",
+    "longname": "RATHENOW OP",
+    "km": 102.86,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.313836584625664,
+    "latitude": 52.60049032623287,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "4de8a51c-4c6a-4334-92dd-0b1cbb8e0573",
+    "number": "580650",
+    "shortname": "RATHENOW UP",
+    "longname": "RATHENOW UP",
+    "km": 103.94,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.321016014173523,
+    "latitude": 52.60744455099087,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "3af7d65c-c732-49e9-be05-fe3b5f88657c",
+    "number": "580520",
+    "shortname": "ALBERTSHEIM",
+    "longname": "ALBERTSHEIM",
+    "km": 109.83,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.333710535124785,
+    "latitude": 52.655944940952594,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "5553e209-1b44-47f5-917d-2c6951ecc044",
+    "number": "580700",
+    "shortname": "GRÜTZ OP",
+    "longname": "GRÜTZ OP",
+    "km": 116.772,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.259671114013504,
+    "latitude": 52.667154560583455,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "c62aa674-db07-4251-a50b-1676c11a9a25",
+    "number": "580710",
+    "shortname": "GRÜTZ UP",
+    "longname": "GRÜTZ UP",
+    "km": 117.238,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.254617518803094,
+    "latitude": 52.6665475369242,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "fbb1c6c1-9fa9-4315-8e31-3499bf00bfef",
+    "number": "588321",
+    "shortname": "WARNAU POLDER",
+    "longname": "WARNAU POLDER",
+    "km": 127.5,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.204582290982167,
+    "latitude": 52.74011859550903,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "f112a50a-d94a-49d3-a140-0a0402baf0d3",
+    "number": "580747",
+    "shortname": "GÜLPE OP",
+    "longname": "GÜLPE OP",
+    "km": 127.644,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.221626379457208,
+    "latitude": 52.738530749126895,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "4c8282c1-c9c5-40c2-b379-95495ce0deee",
+    "number": "580750",
+    "shortname": "GARZ OP",
+    "longname": "GARZ OP",
+    "km": 128.845,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.214896695499364,
+    "latitude": 52.74593877363236,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "914ce0a4-d900-4bf9-bace-47a6f73e7bed",
+    "number": "580760",
+    "shortname": "GARZ UP",
+    "longname": "GARZ UP",
+    "km": 129.18,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.212688506558264,
+    "latitude": 52.74861165187199,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "ddb249c5-360b-4c4f-a7f6-1f6822d236c8",
+    "number": "580795",
+    "shortname": "TRUEBENGRABEN POLDER",
+    "longname": "TRUEBENGRABEN POLDER",
+    "km": 141.0,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.097664449046205,
+    "latitude": 52.81757399701223,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "c203d5fb-96d7-4643-b2ef-b13b1d88c75b",
+    "number": "580790",
+    "shortname": "HAVELBERG STADT",
+    "longname": "HAVELBERG STADT",
+    "km": 145.261,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.076562420207578,
+    "latitude": 52.823200656190885,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "ce086a21-29c2-444c-b53d-f3b70b086b2f",
+    "number": "580800",
+    "shortname": "HAVELBERG UP",
+    "longname": "HAVELBERG UP",
+    "km": 146.89,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.057095253478064,
+    "latitude": 52.830993541010926,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "bb6fd2f0-458a-4ea5-aa58-e1c1a2fbd56d",
+    "number": "502475",
+    "shortname": "HAVELBERG EP",
+    "longname": "HAVELBERG EP",
+    "km": 147.305,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.053033291476808,
+    "latitude": 52.83374515518998,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "863359dd-3171-4641-97bb-b21f06859072",
+    "number": "580820",
+    "shortname": "QUITZÖBEL OP",
+    "longname": "QUITZÖBEL OP",
+    "km": 156.105,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.005424529549988,
+    "latitude": 52.88086151975453,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "2d93f2be-6d57-4716-a775-92fb5a63f88f",
+    "number": "580830",
+    "shortname": "QUITZÖBEL UP",
+    "longname": "QUITZÖBEL UP",
+    "km": 156.19,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.004057959474165,
+    "latitude": 52.88077171503365,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "c13fc7d0-beb1-42a3-b831-4816d7649059",
+    "number": "502470",
+    "shortname": "NEUWERBEN EP",
+    "longname": "NEUWERBEN EP",
+    "km": 156.21,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 12.008008464982804,
+    "latitude": 52.87735684452029,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "ab53a592-0f5a-43e2-9133-bf3169b0f274",
+    "number": "580840",
+    "shortname": "GNEVSDORF OP",
+    "longname": "GNEVSDORF OP",
+    "km": 165.45,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 11.887245452450394,
+    "latitude": 52.907606334741466,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "3079c709-9d83-4c59-bf91-6bed2d5ea372",
+    "number": "503010",
+    "shortname": "GNEVSDORF EP",
+    "longname": "GNEVSDORF EP",
+    "km": 165.48,
+    "agency": "WSA BRANDENBURG",
+    "longitude": 11.88596992780831,
+    "latitude": 52.907993040390394,
+    "water": {
+      "shortname": "UHW",
+      "longname": "UNTERE HAVEL-WASSERSTRASSE"
+    }
+  },
+  {
+    "uuid": "e0d0cc73-d3ef-41ff-a158-4692b62ed3f9",
+    "number": "603090",
+    "shortname": "HOHENSAATEN OST AP",
+    "longname": "HOHENSAATEN OST AP",
+    "km": 92.9,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 14.150973236301567,
+    "latitude": 52.8744321175411,
+    "water": {
+      "shortname": "VKH",
+      "longname": "VERBINDUNGSKANAL HOHENSAATEN"
+    }
+  },
+  {
+    "uuid": "ca0e4a68-bd50-494c-bd45-abb33c5e1b0a",
+    "number": "9640002",
+    "shortname": "ROSTOCK MÜHLENDAMM OW",
+    "longname": "ROSTOCK MÜHLENDAMM OW",
+    "km": 141.508,
+    "agency": "WSA OSTSEE",
+    "longitude": 12.154273180293071,
+    "latitude": 54.08243775768849,
+    "water": {
+      "shortname": "WARNOW",
+      "longname": "WARNOW"
+    }
+  },
+  {
+    "uuid": "4a0061f0-7355-4a95-9c70-f05c8920d790",
+    "number": "9640018",
+    "shortname": "ROSTOCK MÜHLENDAMM UW",
+    "longname": "ROSTOCK MÜHLENDAMM UW",
+    "km": 141.596,
+    "agency": "WSA OSTSEE",
+    "longitude": 12.155108960721455,
+    "latitude": 54.08306426722394,
+    "water": {
+      "shortname": "WARNOW",
+      "longname": "WARNOW"
+    }
+  },
+  {
+    "uuid": "23636a08-775b-4101-a1af-1b57fb466d81",
+    "number": "581400",
+    "shortname": "MARIENTHAL UP",
+    "longname": "MARIENTHAL UP",
+    "km": 0.085,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.293599159940442,
+    "latitude": 53.05125394001951,
+    "water": {
+      "shortname": "WtG",
+      "longname": "WENTOW-GEWÄSSER"
+    }
+  },
+  {
+    "uuid": "60b6ecb0-4ed5-4b8a-b875-07ae33a92b07",
+    "number": "581390",
+    "shortname": "MARIENTHAL OP",
+    "longname": "MARIENTHAL OP",
+    "km": 0.143,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.292737415762769,
+    "latitude": 53.05136215770028,
+    "water": {
+      "shortname": "WtG",
+      "longname": "WENTOW-GEWÄSSER"
+    }
+  },
+  {
+    "uuid": "42805eb1-aca9-4f32-a373-24a9cf839aed",
+    "number": "693320",
+    "shortname": "EICHHORST OP",
+    "longname": "EICHHORST OP",
+    "km": 8.7,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.639019060487044,
+    "latitude": 52.89113754341671,
+    "water": {
+      "shortname": "WbG",
+      "longname": "WERBELLINER GEWÄSSER"
+    }
+  },
+  {
+    "uuid": "5c4c2d52-6c0d-4aa2-beed-6ce47e3e2bd7",
+    "number": "693330",
+    "shortname": "EICHHORST UP",
+    "longname": "EICHHORST UP",
+    "km": 8.7,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 13.638876374896926,
+    "latitude": 52.89142348093641,
+    "water": {
+      "shortname": "WbG",
+      "longname": "WERBELLINER GEWÄSSER"
+    }
+  },
+  {
+    "uuid": "59219312-9e87-4b8c-8dde-325af733d282",
+    "number": "41900206",
+    "shortname": "LETZTER HELLER",
+    "longname": "LETZTER HELLER",
+    "km": 2.32,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 9.67808149274157,
+    "latitude": 51.41565074708677,
+    "water": {
+      "shortname": "WERRA",
+      "longname": "WERRA"
+    }
+  },
+  {
+    "uuid": "5b58af00-6817-4214-b151-34830ac563cc",
+    "number": "41900104",
+    "shortname": "ALLENDORF",
+    "longname": "ALLENDORF",
+    "km": 40.79,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 9.966470842701384,
+    "latitude": 51.276766660357175,
+    "water": {
+      "shortname": "WERRA",
+      "longname": "WERRA"
+    }
+  },
+  {
+    "uuid": "5c735fa8-270e-42c3-b22f-b27418db10cf",
+    "number": "41700105",
+    "shortname": "HELDRA",
+    "longname": "HELDRA",
+    "km": 77.32,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 10.196998244947785,
+    "latitude": 51.125008453132246,
+    "water": {
+      "shortname": "WERRA",
+      "longname": "WERRA"
+    }
+  },
+  {
+    "uuid": "a98b4a84-e51f-4d03-86d9-3b8bdac10e69",
+    "number": "27800234",
+    "shortname": "FRIEDRICHSFELD SCHLEUSE UW",
+    "longname": "FRIEDRICHSFELD SCHLEUSE UW",
+    "km": 1.628,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 6.613936099614115,
+    "latitude": 51.62901680333525,
+    "water": {
+      "shortname": "WDK",
+      "longname": "WESEL-DATTELN-KANAL"
+    }
+  },
+  {
+    "uuid": "e3409c98-72d7-425b-9e2d-da54f75b3be8",
+    "number": "27800223",
+    "shortname": "FRIEDRICHSFELD SCHLEUSE OW",
+    "longname": "FRIEDRICHSFELD SCHLEUSE OW",
+    "km": 2.295,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 6.623104637536298,
+    "latitude": 51.62723083066225,
+    "water": {
+      "shortname": "WDK",
+      "longname": "WESEL-DATTELN-KANAL"
+    }
+  },
+  {
+    "uuid": "14699a51-aaa5-4ae4-98a6-d35aa9a80ec3",
+    "number": "27800212",
+    "shortname": "HÜNXE SCHLEUSE UW",
+    "longname": "HÜNXE SCHLEUSE UW",
+    "km": 12.875,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 6.769073944617867,
+    "latitude": 51.648298675964796,
+    "water": {
+      "shortname": "WDK",
+      "longname": "WESEL-DATTELN-KANAL"
+    }
+  },
+  {
+    "uuid": "5c1b6183-eaaf-436c-b863-8a191d9e1f5a",
+    "number": "27800198",
+    "shortname": "HÜNXE SCHLEUSE OW",
+    "longname": "HÜNXE SCHLEUSE OW",
+    "km": 13.664,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 6.780465175416767,
+    "latitude": 51.64856876585283,
+    "water": {
+      "shortname": "WDK",
+      "longname": "WESEL-DATTELN-KANAL"
+    }
+  },
+  {
+    "uuid": "5db8ab4b-315b-466e-b9d5-5ba5a19f5f08",
+    "number": "27800187",
+    "shortname": "DORSTEN SCHLEUSE UW",
+    "longname": "DORSTEN SCHLEUSE UW",
+    "km": 30.016,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 6.998495058397992,
+    "latitude": 51.66300127041309,
+    "water": {
+      "shortname": "WDK",
+      "longname": "WESEL-DATTELN-KANAL"
+    }
+  },
+  {
+    "uuid": "6610cf2e-7bfd-4686-b9ac-b105f492d708",
+    "number": "27800176",
+    "shortname": "DORSTEN SCHLEUSE OW",
+    "longname": "DORSTEN SCHLEUSE OW",
+    "km": 30.863,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 7.0107317437101315,
+    "latitude": 51.66280340126995,
+    "water": {
+      "shortname": "WDK",
+      "longname": "WESEL-DATTELN-KANAL"
+    }
+  },
+  {
+    "uuid": "a7ffcc9e-fecd-431c-8044-e004682d023f",
+    "number": "27800165",
+    "shortname": "FLAESHEIM SCHLEUSE UW",
+    "longname": "FLAESHEIM SCHLEUSE UW",
+    "km": 48.99,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 7.238068733431324,
+    "latitude": 51.72038172511063,
+    "water": {
+      "shortname": "WDK",
+      "longname": "WESEL-DATTELN-KANAL"
+    }
+  },
+  {
+    "uuid": "f833a494-961b-42d3-9843-e4e61607b5be",
+    "number": "27800154",
+    "shortname": "FLAESHEIM SCHLEUSE OW",
+    "longname": "FLAESHEIM SCHLEUSE OW",
+    "km": 49.73,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 7.246876437752156,
+    "latitude": 51.71662005383251,
+    "water": {
+      "shortname": "WDK",
+      "longname": "WESEL-DATTELN-KANAL"
+    }
+  },
+  {
+    "uuid": "7703d54d-ca33-44b9-b519-c618bae5bcc7",
+    "number": "27800143",
+    "shortname": "AHSEN SCHLEUSE UW",
+    "longname": "AHSEN SCHLEUSE UW",
+    "km": 55.924,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 7.321516930092939,
+    "latitude": 51.68901483082129,
+    "water": {
+      "shortname": "WDK",
+      "longname": "WESEL-DATTELN-KANAL"
+    }
+  },
+  {
+    "uuid": "2813f196-3404-4ac2-92be-e288fe1607af",
+    "number": "27800132",
+    "shortname": "AHSEN SCHLEUSE OW",
+    "longname": "AHSEN SCHLEUSE OW",
+    "km": 56.278,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 7.325448955559613,
+    "latitude": 51.68697872241,
+    "water": {
+      "shortname": "WDK",
+      "longname": "WESEL-DATTELN-KANAL"
+    }
+  },
+  {
+    "uuid": "06c498e3-786a-48be-83be-6a6293ea3b8c",
+    "number": "27800121",
+    "shortname": "DATTELN SCHLEUSE UW",
+    "longname": "DATTELN SCHLEUSE UW",
+    "km": 58.89,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 7.35366241265323,
+    "latitude": 51.67137827137802,
+    "water": {
+      "shortname": "WDK",
+      "longname": "WESEL-DATTELN-KANAL"
+    }
+  },
+  {
+    "uuid": "4dd743e9-3040-4f11-8c7c-d5c5789d80b4",
+    "number": "27800110",
+    "shortname": "DATTELN SCHLEUSE OW",
+    "longname": "DATTELN SCHLEUSE OW",
+    "km": 60.11,
+    "agency": "WSA DUISBURG-MEIDERICH",
+    "longitude": 7.364979258746804,
+    "latitude": 51.66298760815798,
+    "water": {
+      "shortname": "WDK",
+      "longname": "WESEL-DATTELN-KANAL"
+    }
+  },
+  {
+    "uuid": "e0d7d4b2-7a72-429f-a858-f1e6f5ff40ae",
+    "number": "9460041",
+    "shortname": "LT ALTE WESER (RADAR)",
+    "longname": "LT ALTE WESER (RADAR)",
+    "km": 0.0,
+    "agency": "WSA BREMERHAVEN",
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "b26bfc88-eb8a-45b9-9dd0-0e41949a2648",
+    "number": "4910050",
+    "shortname": "GROSSE WESERBRÜCKE",
+    "longname": "GROSSE WESERBRÜCKE",
+    "km": 0.04,
+    "agency": "WSA BREMEN",
+    "longitude": 8.803635790999683,
+    "latitude": 53.0730971373515,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "227e53ca-4dd9-482b-be62-52fdc62a4b4e",
+    "number": "43100109",
+    "shortname": "HANN.MUENDEN",
+    "longname": "HANN.MUENDEN",
+    "km": 0.65,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 9.640916558380352,
+    "latitude": 51.42578852661202,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "7e530482-0a13-4728-99db-a376304398b8",
+    "number": "4970035",
+    "shortname": "STROHAUSER PLATE OST",
+    "longname": "STROHAUSER PLATE OST",
+    "km": 1.0,
+    "agency": "WSA BREMERHAVEN",
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "c1f059dd-5063-468a-9dfa-0360fe0b030d",
+    "number": "4910060",
+    "shortname": "OSLEBSHAUSEN",
+    "longname": "OSLEBSHAUSEN",
+    "km": 8.367,
+    "agency": "WSA BREMEN",
+    "longitude": 8.712215483777378,
+    "latitude": 53.11979682274229,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "b8b8c069-0993-4a45-a226-a6c8c18185ab",
+    "number": "211431",
+    "shortname": "LEMWERDER UNTERFEUER",
+    "longname": "LEMWERDER UNTERFEUER",
+    "km": 17.5,
+    "agency": "WSA BREMEN",
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "3f3b4445-9a6a-44c3-8575-d86ce30e2de0",
+    "number": "4950010",
+    "shortname": "VEGESACK",
+    "longname": "VEGESACK",
+    "km": 17.843,
+    "agency": "WSA BREMEN",
+    "longitude": 8.619533310970207,
+    "latitude": 53.16940608661914,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "cca92e6d-e2c3-4c5f-be56-5b8682b353eb",
+    "number": "4950020",
+    "shortname": "FARGE",
+    "longname": "FARGE",
+    "km": 26.261,
+    "agency": "WSA BREMEN",
+    "longitude": 8.510192905492154,
+    "latitude": 53.20470884821241,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "eba772d4-509e-4fe7-ba51-d9a29b190432",
+    "number": "4970010",
+    "shortname": "ELSFLETH",
+    "longname": "ELSFLETH",
+    "km": 33.325,
+    "agency": "WSA BREMEN",
+    "longitude": 8.481417298527582,
+    "latitude": 53.26394602512631,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "314ef522-a060-4033-ba14-8169dd26bb8d",
+    "number": "43900105",
+    "shortname": "WAHMBECK",
+    "longname": "WAHMBECK",
+    "km": 35.97,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 9.519727677989398,
+    "latitude": 51.62561553063818,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "7febef93-09ce-49e9-9643-ecb3076ce9a7",
+    "number": "4970020",
+    "shortname": "BRAKE",
+    "longname": "BRAKE",
+    "km": 39.184,
+    "agency": "WSA BREMEN",
+    "longitude": 8.486684858411463,
+    "latitude": 53.315994540480546,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "1e51195c-f9d7-4cff-9db1-d92bb855005c",
+    "number": "45100100",
+    "shortname": "KARLSHAFEN",
+    "longname": "KARLSHAFEN",
+    "km": 45.52,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 9.438681427807628,
+    "latitude": 51.64798615737881,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "116572da-c036-4486-ac18-a92932424e30",
+    "number": "4970030",
+    "shortname": "RECHTENFLETH",
+    "longname": "RECHTENFLETH",
+    "km": 46.464,
+    "agency": "WSA BREMERHAVEN",
+    "longitude": 8.50055387349454,
+    "latitude": 53.38116187700329,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "06e6b715-eb03-46ce-adf4-6cafca6368eb",
+    "number": "4970040",
+    "shortname": "NORDENHAM",
+    "longname": "NORDENHAM",
+    "km": 55.811,
+    "agency": "WSA BREMERHAVEN",
+    "longitude": 8.4880524159755,
+    "latitude": 53.46449682647606,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "99dd338d-ef7d-43fd-a4e0-a9103406f0ad",
+    "number": "4970090",
+    "shortname": "BLEXEN ABZ",
+    "longname": "BLEXEN ABZ",
+    "km": 62.46,
+    "agency": "WSA BREMERHAVEN",
+    "longitude": 8.537411727150166,
+    "latitude": 53.51758034795676,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "d3f822a0-e201-4a61-8913-589c74818ae0",
+    "number": "4990010",
+    "shortname": "BHV ALTER LEUCHTTURM",
+    "longname": "BHV ALTER LEUCHTTURM",
+    "km": 66.638,
+    "agency": "WSA BREMERHAVEN",
+    "longitude": 8.568175032948227,
+    "latitude": 53.54495606650457,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "763633e7-3b4b-470a-978e-f9e456e4df7c",
+    "number": "45300109",
+    "shortname": "HÖXTER",
+    "longname": "HÖXTER",
+    "km": 69.62,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 9.400469961343804,
+    "latitude": 51.775800716750204,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "78029185-9dfc-4b1b-8695-45ebc2a09cf4",
+    "number": "9460010",
+    "shortname": "ROBBENSÜDSTEERT",
+    "longname": "ROBBENSÜDSTEERT",
+    "km": 79.942,
+    "agency": "WSA BREMERHAVEN",
+    "longitude": 8.445201625436724,
+    "latitude": 53.639223945927455,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "ad3b53f8-8c1b-439f-a0df-9f24827026d5",
+    "number": "9460020",
+    "shortname": "DWARSGAT",
+    "longname": "DWARSGAT",
+    "km": 92.656,
+    "agency": "WSA BREMERHAVEN",
+    "longitude": 8.307615531476777,
+    "latitude": 53.7186362869283,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "5310aed3-784c-4290-bfff-806c75b831d9",
+    "number": "45300200",
+    "shortname": "BODENWERDER",
+    "longname": "BODENWERDER",
+    "km": 110.72,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 9.515736239582566,
+    "latitude": 51.973727448144004,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "c6772c3c-a6bb-4728-9250-a408ab3856bd",
+    "number": "9460040",
+    "shortname": "LEUCHTTURM ALTE WESER",
+    "longname": "LEUCHTTURM ALTE WESER",
+    "km": 115.0,
+    "agency": "WSA BREMERHAVEN",
+    "longitude": 8.127571724139592,
+    "latitude": 53.863269435786876,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "fa886080-4271-4684-9999-1b6862a20ac1",
+    "number": "45700207",
+    "shortname": "HAMELN WEHRBERGEN",
+    "longname": "HAMELN WEHRBERGEN",
+    "km": 139.68,
+    "agency": "WSA HANNOVERSCH MÜNDEN",
+    "longitude": 9.306543742480654,
+    "latitude": 52.123730574492,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "005dfdae-efcc-410a-bf1c-24096e0c2866",
+    "number": "45900109",
+    "shortname": "RINTELN",
+    "longname": "RINTELN",
+    "km": 163.24,
+    "agency": "WSA MINDEN",
+    "longitude": 9.081704939644029,
+    "latitude": 52.18974744357511,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "2f56e265-cd67-4ea1-8529-549b6ccf273a",
+    "number": "45900208",
+    "shortname": "VLOTHO",
+    "longname": "VLOTHO",
+    "km": 184.01,
+    "agency": "WSA MINDEN",
+    "longitude": 8.862406875856845,
+    "latitude": 52.17639580614144,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "6b1b5c70-a23f-46de-954d-02bdc5bf2ecc",
+    "number": "47100100",
+    "shortname": "PORTA",
+    "longname": "PORTA",
+    "km": 198.36,
+    "agency": "WSA MINDEN",
+    "longitude": 8.922040753864895,
+    "latitude": 52.24870941928099,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "9aae4921-bda4-4081-b67b-2e0c5ab8bc54",
+    "number": "47300100",
+    "shortname": "PETERSHAGEN",
+    "longname": "PETERSHAGEN",
+    "km": 215.77,
+    "agency": "WSA VERDEN",
+    "longitude": 8.970777603262103,
+    "latitude": 52.38233838182189,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "edfa125a-1e46-4c7e-9f3a-568ae013a4df",
+    "number": "47500110",
+    "shortname": "STOLZENAU",
+    "longname": "STOLZENAU",
+    "km": 243.39,
+    "agency": "WSA VERDEN",
+    "longitude": 9.077734771251485,
+    "latitude": 52.51825035526719,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "3a24863b-fdec-455c-82da-ea8c7ae6f97a",
+    "number": "47500200",
+    "shortname": "LIEBENAU",
+    "longname": "LIEBENAU",
+    "km": 256.15,
+    "agency": "WSA VERDEN",
+    "longitude": 9.112771601163029,
+    "latitude": 52.59420627843106,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "38497786-6c29-47f4-93de-d96001629496",
+    "number": "47900118",
+    "shortname": "NIENBURG",
+    "longname": "NIENBURG",
+    "km": 268.18,
+    "agency": "WSA VERDEN",
+    "longitude": 9.204659197983005,
+    "latitude": 52.644153241028114,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "5b83cad2-ed64-42cf-87dd-98e27988c31a",
+    "number": "47900107",
+    "shortname": "DRAKENBURG",
+    "longname": "DRAKENBURG",
+    "km": 278.88,
+    "agency": "WSA VERDEN",
+    "longitude": 9.22558143834787,
+    "latitude": 52.693098974264636,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "86f66699-29b6-4b94-85cb-d241e832230a",
+    "number": "47900129",
+    "shortname": "HOYA",
+    "longname": "HOYA",
+    "km": 298.4,
+    "agency": "WSA VERDEN",
+    "longitude": 9.146923933365562,
+    "latitude": 52.8009841983805,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "e7c7cbaa-9a85-4033-be0f-b5bebcce0760",
+    "number": "47900209",
+    "shortname": "DÖRVERDEN",
+    "longname": "DÖRVERDEN",
+    "km": 308.95,
+    "agency": "WSA VERDEN",
+    "longitude": 9.210322075265587,
+    "latitude": 52.85227239521132,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "78d69798-f956-4222-8d2b-f9f630fb9e36",
+    "number": "49100101",
+    "shortname": "INTSCHEDE",
+    "longname": "INTSCHEDE",
+    "km": 331.28,
+    "agency": "WSA VERDEN",
+    "longitude": 9.125798805415808,
+    "latitude": 52.96416865044946,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "cbfdddd1-9e32-4de2-adca-7b32241c265d",
+    "number": "4910020",
+    "shortname": "DREYE",
+    "longname": "DREYE",
+    "km": 355.8,
+    "agency": "WSA BREMEN",
+    "longitude": 8.891252055365559,
+    "latitude": 53.01435881370665,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "c42ff4c7-f4c6-4568-8b5c-0b556bd55926",
+    "number": "4910030",
+    "shortname": "WESERWEHR OW",
+    "longname": "WESERWEHR OW",
+    "km": 361.8,
+    "agency": "WSA BREMEN",
+    "longitude": 8.869126735013456,
+    "latitude": 53.058582660435356,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "aeb9ed1c-6c01-4829-94e4-e530dbf79821",
+    "number": "4910040",
+    "shortname": "WESERWEHR UW",
+    "longname": "WESERWEHR UW",
+    "km": 362.79,
+    "agency": "WSA BREMEN",
+    "longitude": 8.854802691563382,
+    "latitude": 53.060246456258184,
+    "water": {
+      "shortname": "WESER",
+      "longname": "WESER"
+    }
+  },
+  {
+    "uuid": "44bb934c-4250-4e1b-ad70-0fbd8bb3eadd",
+    "number": "603510",
+    "shortname": "GARTZ",
+    "longname": "GARTZ",
+    "km": 8.038,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 14.394264747931327,
+    "latitude": 53.206332490898966,
+    "water": {
+      "shortname": "WOD",
+      "longname": "WESTODER"
+    }
+  },
+  {
+    "uuid": "46e61953-4bdd-4045-a14e-a83948514c8a",
+    "number": "603520",
+    "shortname": "MESCHERIN",
+    "longname": "MESCHERIN",
+    "km": 14.102,
+    "agency": "WSA EBERSWALDE",
+    "longitude": 14.436439298629791,
+    "latitude": 53.25088316889866,
+    "water": {
+      "shortname": "WOD",
+      "longname": "WESTODER"
+    }
+  },
+  {
+    "uuid": "5b94e4b9-cc96-433f-abf7-08287137ec54",
+    "number": "126009",
+    "shortname": "DORNBUSCH BRÜCKE",
+    "longname": "DORNBUSCH BRÜCKE",
+    "km": 3.7,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.348016526795693,
+    "latitude": 53.73777573872999,
+    "water": {
+      "shortname": "Wischhafener Süderelbe",
+      "longname": "WISCHHAFENER SÜDERELBE"
+    }
+  },
+  {
+    "uuid": "e0747660-6d75-476a-be0f-73865bf47363",
+    "number": "59000107",
+    "shortname": "WISCHHAFEN SPERRWERK",
+    "longname": "WISCHHAFEN SPERRWERK",
+    "km": 10.0,
+    "agency": "WSA HAMBURG",
+    "longitude": 9.340786122111078,
+    "latitude": 53.78517818926822,
+    "water": {
+      "shortname": "Wischhafener Süderelbe",
+      "longname": "WISCHHAFENER SÜDERELBE"
+    }
+  },
+  {
+    "uuid": "aac49cf2-5d3f-4c69-9847-027fecaeef30",
+    "number": "4940010",
+    "shortname": "BORGFELD",
+    "longname": "BORGFELD",
+    "km": 0.265,
+    "agency": "WSA BREMEN",
+    "longitude": 8.89440346181682,
+    "latitude": 53.1339706601111,
+    "water": {
+      "shortname": "WÜMME",
+      "longname": "WÜMME"
+    }
+  },
+  {
+    "uuid": "36e85829-2fb3-41a0-8a1b-aa9e76431b47",
+    "number": "4940020",
+    "shortname": "NIEDERBLOCKLAND",
+    "longname": "NIEDERBLOCKLAND",
+    "km": 7.992,
+    "agency": "WSA BREMEN",
+    "longitude": 8.826504838107983,
+    "latitude": 53.161504277715444,
+    "water": {
+      "shortname": "WÜMME",
+      "longname": "WÜMME"
+    }
+  }
+]
\ No newline at end of file
index 026c4569ac08f616821fe1fb5014cf579fc753fa..b0c818cc8440c38a3a9cbeedb15463a4e1e22485 100644 (file)
     <module>org.openhab.binding.orvibo</module>
     <module>org.openhab.binding.panasonicbdp</module>
     <module>org.openhab.binding.paradoxalarm</module>
+    <module>org.openhab.binding.pegelonline</module>
     <module>org.openhab.binding.pentair</module>
     <module>org.openhab.binding.phc</module>
     <module>org.openhab.binding.pilight</module>