52
Pipelinebasierte Erzeugung von Karten Thomas Skowron

Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Pipelinebasierte Erzeugung von Karten

Thomas Skowron

Page 2: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Previously „Überblick über Rendering-

Techniken und Software“ FOSSGIS-Konferenz 2017

Page 3: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Status Quo

Page 4: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

OSM Planet

PostgreSQL

Renderer

Flaschenhals

Flaschenhals

Operativer Aufwand

Page 5: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

PostgreSQL

Brauchen wir das Alles?

+ SQL + ACID, MVCC & Transaktionen + Indizes + Rollenmanagement + skriptbar + failover + …

- Performance (PostGIS) - operativer Aufwand - Speicherbedarf

Page 6: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Gegenvorschlag: |

Page 7: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Gegenvorschlag: parse | map-reduce | render

Page 8: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Schritt 1

OSM Daten in Geodaten wandeln

Page 9: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Schritt 2

Filtern

Page 10: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Schritt 3

Daten mappen

Page 11: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Schritt 4

Ins Zielformat konvertieren

Page 12: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Aber wie?

Page 13: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Mit Tools, die jeweils genau eine Sache tun

Page 14: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

und einem portablen Datenformat

Page 15: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Wie wärs mit Shapefiles?

Page 16: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Wie wärs mit Shapefiles?

Page 17: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Was bräuchte ein geeignetes Format?

Page 18: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Performance lineares Schreiben, paralleles Lesen

Page 19: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Skalierbar kleine bis riesige Datensätze

Page 20: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Tagstruktur Attributtabellen, nein Danke!

Page 21: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Zukunftskompatibel gerüstet für Änderungen

Page 22: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Shapefile

Performance mäßig

Skalierbar nein, 2 GB Limit

Tagstruktur nein

Zukunftskompatibel nein

Page 23: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

GeoJSON

Performance mäßig

Skalierbar mäßig, singlethreaded

Tagstruktur ja

Zukunftskompatibel begrenzt

Page 24: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

GeoPackage

Performance schlecht (SQLite)

Skalierbar mäßig

Tagstruktur ja

Zukunftskompatibel ja

Page 25: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Performance

Flexibilität

Page 26: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Wir brauchen Mut zu Neuem. Ohne Änderung kein Fortschritt.

Page 27: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Wie müsste ein neues Format aussehen?

• binär • Blöcke, streambar • einzelner Stream, nicht mehrere Dateien • nicht SQLite • nicht obskur • offen und erweiterbar

Page 28: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Vorschlag

Page 29: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f
Page 30: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Basierend auf Protocol Buffers und WKB

Page 31: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Offene Spezifikation unter https://thomas.skowron.eu/spaten/

Page 32: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Referenzimplementierung in Go github.com/thomersch/grandine/lib/spaten

Page 33: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Etwa 50% kleiner als GeoJSON*

* YMMV

Page 34: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Version 0

Page 35: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Feedback & Input erwünscht

Page 36: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Ziel?

Page 37: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

grandine-spatialize -in planet.osm.pbf -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14

Page 38: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

osmium export -f spaten planet.osm.pbf | gradine-converter -mapping roads.yml |

grandine-tiler -out tiles/roads/ -zoom 14

(noch nicht)

Page 39: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

osmium export -f spaten planet.osm.pbf | your-tool-here -fancify |

magic-renderer

(noch nicht)

Page 40: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Austauschbarkeit von Tools

Page 41: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Was fehlt?

Page 42: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Ein Markup, das Normalisierung und

Umwandlung von Daten vereinfacht

Page 43: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Beispiel

LineString(10 20, 10 21, …)

highway=primary max_height=11“2’

LineString(10 20, 10 21, …)

@layer=transportation class=primary max_height=3.4

Page 44: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

„Simple things should be simple, complex things

should be possible.“Alan Kay

Page 45: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

- src: key: railway value: "*" dest: - {key: "@layer", value: "transportation"} - {key: "class", value: "railway"} - {key: "maxspeed", value: "$maxspeed", type: int}

Filterkriterium

Ausgabe

TypenumwandlungÜbernahme des Wertes

Page 46: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Da geht noch was! HELP NEEDED

Page 47: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Zukunft

Page 48: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Größere Flexibilität mit weniger Programmieraufwand

Page 49: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Schnelleres Verarbeiten von Daten mit weniger Hardware

Page 50: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Weniger „Points of Failure“

Page 51: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Es ist noch viel zu tun Datenformat, Tools, Markup, …

Page 52: Pipelinebasierte Erzeugung von Karten basierte Verarbeitung von... · gradine-converter -mapping roads.yml | grandine-tiler -out tiles/roads/ -zoom 14 (noch nicht) osmium export -f

Lasst uns die Zukunft gemeinsam bauen!