Boundaries Map 4.2

 

Die Boundaries Map bietet eine komfortable Übersicht über die in OSM erfassten Administrativen Grenzen, verbunden mit umfangreichen Download-Möglichkeiten.

  • Überblick über die Baumstruktur der Administrativen Grenzen eines Landes zwecks Qualitätskontrolle
  • Export von Grenzen in verschiedenen Export-Formaten

Url: https://wambachers-osm.website/boundaries

Die neueste Version ist die 4.2 vom Juli 2017. Alle Änderungen/Erweiterungen zur 4.1 sind hier im Text rot gekennzeichnet.

Überblick:

bm 41

Die Boundary Maps gliedert sich in 5 Bereiche, die folgende Aufgaben haben:

  • Kopfleiste
    Hier werden die Version der Software und der Timestamp der aktuellen Daten angezeigt. Weiterhin das Suchfeld, einen Button für den Sidebar (rechter Rand) und der OAUTH-Button.
  • Fußleiste
    Hier befinden sich die Options-Felder für Export-Format, Buffer, Union, das Export-Layout, die Export Areas, der API-Switch und der Export-Button.
  • Linke Seite
    Auf der linken Seite wird der Verschachtelungsbaum (Tree) der Grenzen angezeigt.
  • Rechte Seite
    Der rechte Rand (Sidebar) kann bei Bedarf ausgeklappt werden. Dort befinden sich - knappe - Infos, ein Link zu einer TODO-Liste, zwei Spenden-Button und das Impressum.
  • Zentrum
    Klar, hier erscheint die Karte. Oben rechts (+) lässt sich die Hintergrundkarte auswählen; ich halte die Schwarz/Weiss-Darstellung für sinnvoll.

Verwendung:

Die  Boundaries Map wurde als QS-Werkzeug entwickelt um die Verschachtelung der Grenzen eines Gebietes einfach und übersichtlich darzustellen. Dazu werden die gewünschten  Grenzen durch Anklicken im linken Baum ausgewählt und auf der Karte angezeigt. So lassen sich relativ einfach Unstimmigkeiten oder Lücken erkennen.

bm overview1

Hier ist Hamburg leider noch nicht ganz korrekt. Der Stadteil Hamburg-Mitte war nicht sauber erfasst. Ist natürlich erledigt.

Context Menü:

bm contect menu

Im Context Menu (Cursor auf gewünschten Namen platzieren, dann rechte Maustaste) lassen sich bestimmte Aktionen auslösen:

  • Select children (S):
    Es werden alle Grenzen der nächsten Ebene ausgewählt.
  • Deselect children (D):
    Es werden alle Grenzen der nächsten Ebene "abgewählt".
  • Deselect all children (A):
    Es werden alle Unterebenen "abgewählt".
  • Select next admin level (N):
    Es werden alle Grenzen mit dem nächsthöheren admin_level ausgewählt. Dies ist manchmal sinnvoll, wenn sich auf einer Ebene mehrere admin_level befinden, was leider immer mal vorkommt.
  • Export full subtree (json & shp only) (X):
    Diese Funktion soll derzeit einen einfachen - und meinen Server schonenden - Export eines ganzen Landes oder eines Landesteiles ermöglichen. Hier wird (noch) der Export direkt angeworfen.
  • Edit (JOSM & Merkaartor only) (E):
    Es wird der Remote-Edit dieser beiden Editoren verwendet. Die Relation der Grenze erscheint dann im Editor.

Suchen:

Im Suchfeld kann nach Grenzen gesucht werden. Klein- und Großschreibung ist normalerweise nicht relevant. Das Prozentzeichen "%" dient als Wildcard. Dieses ist bei PostgreSQL Standard.

Es kann auch nach Relationen und nach Ländern gesucht werden. Für Relationen bitte die OSM-ID numerisch eingeben, für Länder den groß geschriebenen dreistelligen ISO-3 Code. (Z.B. DEU für Deutschland oder ALB für Albanien).

Achtung: Eine Suche mit einem Search-Pattern, das mit "%" anfängt, ist im Vergleich zu den anderen Suchen am langsamsten, da der Suchindex nicht verwendet werden kann.

Nach der Suche werden die ersten 20 Treffer angezeigt. Es fehlt aber noch eine Lösung für den Fall, dass das Ergebnis darin nicht angezeigt wird, da es nicht in den ersten 20 Treffern enthalten ist. Hier muss man die Suche zur Zeit halt genauer machen.

bm contect menu

Im Suchfeld kann auch direkt die OSM-ID einer Relation eingegeben werden. Eine Suche mit Wildcard erscheint mir hier nicht sinnvoll. Oder? Schau'n 'mer mal.

bm contect menu

Export:

Die für den Export wichtigen Parameter werden in der Fußzeile eingestellt.

bm footer menu

Da die Export-Funktion mit der Version 4.1 der Boundaries Map total überarbeitet wurde, möchte ich mich hier kurz fassen.

  • Das gewünsche Export-Format auswählen.
    • shp - Shape File Format
    • json - GeoJSON-Format
    • svg - SVG Grafik
    • poly - OSM Polygon File
    • bpoly - OSM Polygon File mit einem erweiteren Rand (Buffer). Dies ist manchmal günstig beim Clippen.
  • Falls bpoly ausgewählt wurde, kann man hier die Größe des Buffers in Kilometern eingeben.
  • Ist Union aktiviert, werden alle Grenzen zusammengelegt und eine einziges Polygon mit dem Umfang (PostGIS: St_Union()) aller Grenzen generiert.
  • Das gewünschte Export-Layout passend zur geplanten Weiterverarbeitung auswählen.
    • single - alle Polygone in einem einzigen Block.
    • split - jedes Polygon ein separates Datenfile.
    • levels - alle Polygone einer Admin-Ebene werden in einem Datenfile zusammengefasst.
  • Die gewünsche Export-Area auswählen.
    • water - Es werden die Grenzen incl. der ozeanischen Flächen (i.d.R. die 12-Meilen Zone) exportiert.
    • land - Es wird an den Küstenlinien und an den grösseren Seen geclippt.
  • Die API-Funktion aktivieren/deaktivieren.
    • aus: Der Export wird wie vorher durchgeführt.
    • an: Es erscheint ein Popup, der die Befehlszeile anzeigt, die für die Benutzung des API notwendig sind.

Sonstiges:

Es ist eine Authentifizierung per OAuth notwendig. Hintergrund ist die Tatsache, dass viele  externe "Kunden" die Boundaries Map nicht für die QA nutzen - dafür wurde sie anfangs eigentlich entwickelt - sondern als Quelle von Grenzen zum Herunterladen. Leider auch durch Auswählen von gleichzeitig hunderten von Grenzen, was meinen Server permanent zum Absturz brachte. Erst der Zwang zur Authorisierung hat da eine gewisse Ruhe reingebracht, da ich jetzt weiss, wer da sowas macht und diesen dann direkt per OSM-Mail ansprechen kann kann. Z.B. indem ich auf "Export Full Subtree" oder das API hinweise.

Aus ähnlichen Gründen ist eine Begrenzung der maximal aktivierten Grenzen aktiv. Der Maximalwert steht derzeit bei 50.

Achtung: Wenn man die "Landgrenzen" verwendet, wird man einen erheblichen Performanceverlust in Kauf nehmen müssen. Die Landgrenzen sind wesentlich komplexer als die maritimen Grenzen, da die zerklüftete Küstenline mit enthalten ist.

API:

Ab hier beschreibe ich das neue API. Auf Kennzeichnung in Rot verzichte ich, da das ganze Kapitel neu ist.

Das API ist letztendlich ein erweiterter URL, der auf Kommandoebene mit einem Programm der Wahl (ich empfehle curl) verwendet wird.

Dadurch soll der Export von Grenzen von dem Boundaries Map-GUI entkoppelt werden. Das GUI hat erhebliche Schwächen, die gerade beim Afrufen größerer Exporte viele Probleme machen. Das hat mitunter sogar zu Serverabstürzen geführt. Zudem ist das "Zusammenklicken" von dutzenden Grenzen für einen Export wirklich mühsam.

  • selected

    Hier wird der Nummer der Relation angegeben, mit der der Export beginnen soll.

  • to_AL [default: to_AL=4]

    Hier wird das Adminlevel angegeben, bis zu dem exportiert werden soll.

  • from_AL [default: from_AL=2]

    Hier wird das Adminlevel angegeben, ab dem exportiert werden soll.

  • union [default: union=false]

    • true - Es werden alle Grenzen zusammengelegt und eine einziges Polygon mit dem Umfang (PostGIS: ST_Union()) aller Grenzen generiert.
    • false - Die Grenzen werden nicht zusammengelegt.

  • exportAreas [default: exportAreas=water]

    • water - Es werden die Grenzen incl. der ozeanischen Flächen (i.d.R. die 12-Meilen Zone) exportiert.
    • land - Es wird an den Küstenlinien und an den grösseren Seen geclippt.

  • exportLayout [default: exportLayout=levels]

    • single - alle Polygone in einem einzigen Block.
    • split - jedes Polygon ein separates Datenfile.
    • levels - alle Polygone einer Admin-Ebene werden in einem Datenfile zusammengefasst.

  • exportFormat [default: exportFormat=shp]

    • shp - Shape File Format
    • json - GeoJSON-Format
    • svg - SVG Grafik

  • apiKey

    Das ist ein benutzerspezifischer String im Format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

  • apiVersion [default: api=1.0]

    Definiert die zu benutzenden Version des API. Derzeit ist das die Version 1.0

  • URL

    Das API wird mit folgendem URL aufgerufen: https://wambachers-osm.website/exportBoundaries gefolgt von einigen Parametern.

  • Beispiele:

    • Export aller administrativen Grenzen von Deutschland bis admin_level=8 (Langversion)

      curl -f -o germany.zip --url 'https://wambachers-osm.website/boundaries/exportBoundaries?apiversion=1.0
      &apikey=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&exportFormat=shp&exportLayout=levels
      &exportAreas=land&from_al=2&to_al=8&union=false&selected=51477'

      Bemerkungen:

      • es wird wie empfohlen curl verwendet, da curl im Gegensatz zu wget ein einigermaßen vernünftiges Fehlerhandling hat. Dies wird mit der Curl-Option "-f" aktiviert.

      • Der URL beginnt mit https; http ist nicht aktiviert.

      • Eine Verwendung des URL im URL-Feld eines Browsers ist nicht vorgesehen - das funzt nicht!

      • Weiterhin ist zu beachten, dass der URL immer in ' eingefasst werden muß, da ansonsten der Kommandozeilenprozessor des jeweiligen Betriebssystemes damit Probleme bekommt. Linux klappt mit ', wie das in Windows genau aussieht, muss ich noch testen.

      • Zudem sind hier im Beispiel alle Optionen des API verwendet, auch wenn manche davon durchaus fehlen dürfen.
      • Man erfährt seinen API-Key, indem man 1x in dem GUI einen Export anstösst und dabei die API-Option aktiviert hat. Dafür muss man natürlich authentifiziert sein. Dann gibt das GUI alle Daten in einem Popup aus:

        api popup blurred

















    • Export aller administrativen Grenzen von Deutschland bis admin_level=8. (Kurzversion)

      curl -f -o germany.zip --url 'https://wambachers-osm.website/boundaries/exportBoundaries?apiversion=1.0&apikey=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&selected=51477'
    • Export der Staaten (AL=4) der USA

      curl -f -o usa_states.zip --url 'https://wambachers-osm.website/boundaries/exportBoundaries?apiversion=1.0&apikey=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&from_AL=4&to_AL=4&exportFormat=json&exportLayout=split&exportAreas=land&selected=148838'

      Hierbei wird pro Staat ein eigenes (exportLayout=split) JSON-File (exportFormat=json) angelegt. Dabei werden die Küstenlinen verwendet. (exportAreas=land)

    • SVG aller Länder der Welt (nur AL2!)

      curl -f -o world.zip --url 'https://wambachers-osm.website/boundaries/exportBoundaries?apiversion=1.0&apikey=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&exportLayout=svg&exportLayout=single&selected=0'

      Hierbei wird eine einzige (exportLayout=single) SVG-Grafik (exportFormat=svg) erzeugt, die alle Ländergrenzen der Erde enthält. (selected=0)

      Weitere Adminlevel sind hier nicht vorgesehen, da das den Server zu stark beanspruchen würde.

  • Folgendermaßen sieht die Ausgabe und die weitere Verarbeitung unter Linux aus:

    #curl -f -o germany.zip --url 'https://wambachers-osm.website/boundaries/exportBoundaries?apiversion=1.0&apikey=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&selected=51477'
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  114M  100  114M    0     0   590k      0  0:03:18  0:03:18 --:--:-- 3951k
    #ls
    germany.zip GER.zip get.sh World_AL2.GeoJson World_AL4.GeoJson
    #unzip germany.zip
    Archive: germany.zip
    (C) OpenStreetMap contributors
    inflating: Germany_AL2.dbf 
    inflating: Germany_AL2.prj 
    inflating: Germany_AL2.shp 
    inflating: Germany_AL2.shx 
    inflating: Germany_AL4.dbf 
    inflating: Germany_AL4.prj 
    inflating: Germany_AL4.shp 
    inflating: Germany_AL4.shx 
    inflating: Germany_AL5.dbf 
    inflating: Germany_AL5.prj 
    inflating: Germany_AL5.shp 
    inflating: Germany_AL5.shx 
    inflating: Germany_AL6.dbf 
    inflating: Germany_AL6.prj 
    inflating: Germany_AL6.shp 
    inflating: Germany_AL6.shx 
    inflating: Germany_AL7.dbf 
    inflating: Germany_AL7.prj 
    inflating: Germany_AL7.shp 
    inflating: Germany_AL7.shx 
    inflating: Germany_AL8.dbf 
    inflating: Germany_AL8.prj 
    inflating: Germany_AL8.shp 
    inflating: Germany_AL8.shx
    

    Die Zeit für das Erzeugen eines neuen Exportes kann durchaus mehrere Minuten betragen. Maximal aber 10 Minuten, da der Jos danach automatisch abgebrochen wird. Sollte das öfters vorkommen, bitte bei mir melden,

    Das Resultat ist ein ZIP-File mit allen administrativen Grenzen von Deutschland, jeweils ein Adminlevel als separates Shape.

  • Interner Cache und dessen Auswirkungen:

    Alle Exporte und Grafiken eines Auswertungszeitraumes werden in einem Servercache zwischengespeichert. D.h. sie werden auf dem Server abgespeichert und in bestimmten Fällen direkt aus dem Cache beantwortet. Das bedeutet erheblich schnellere Antworten auf öfters vorkommende Abfragen. Da können aus Minuten Sekunden werden :).

    Alle Abfragen mit den absolut gleichen Parametern (exportFormat, exportLayout, exportArea, from_AL, to_AL und seleced) werden aus dem Cache beantwortet, wenn das Ergebnis dort bereits enthalten ist.

    Der Cache wird mit jeder nächtlichen Auswertung der Rohdaten zurückgesetzt. Dies erfolgt in der Regel mitten in der Nacht, manchmal aber auch ein wenig später, je nachdem wie lange die Auswertung der Rohdaten brauchte.

    Ich kann die "beliebtesten" Exporte abfragen und werde diese dann früh morgens automatisch anstossen, damit der sonst leere Cache bereits etwas gefüllt ist.

  • Finanzierung des Servers:

    Der Server wird von mir privat @home betrieben und verursacht als solches nicht unerhebliche Strom- und Kommunikationskosten. Derzeit ist das ein 16-Core Rechner mit Intel Xeon, 64GB Memory und 2 TB Disk - dazu 2x960 GB SSD.

  • Ich möchte es nicht soweit kommen lassen müssen, dass Downloads von kommerziellen Anwendern kostenpflichtig werden. Oder gar den Dienst völlig einzustellen.