Aktualisierte Fassung zur Erstellung von Printkarten mit dem deutschen Stil
Marvin Gülker · 01.01.2020
Der Artikel stellt eine aktualisierte Version eines früheren Artikels zur Erstellung von Printkarten mit dem deutschen OpenStreetMap-Stil dar.
Kategorien: OpenStreetMap, Software
Einleitung
Zuletzt erschien auf diesem Blog 2016 ein Artikel zu OpenStreetMap. Damals ging es um die Erstellung von Printkarten (also solchen zum Ausdrucken) mit dem deutschen OpenStreetMap-Stil. Seitdem haben sich einige Änderungen ergeben, weshalb dieser Beitrag sich erneut mit dem Thema beschäftigt. Er steht auch unter anderen Vorzeichen, denn seitdem hat der Verfasser die Linux-Distribution von Gentoo auf Debian gewechselt. Anders als in den vorigen Beiträgen zum Thema sind daher die Erklärungen auf Debian 10 zugeschnitten.
Zu diesem Beitrag wird in Kürze noch eine Ergänzung als eigener Beitrag veröffentlicht, der die graphische Darstellung von GPS-Spuren erklären wird.
Kartenmaterial
Man lege wie üblich ein Verzeichnis an, mit dem man experimentieren kann.
$ mkdir ~/osmtest $ cd ~/osmtest
Weiterhin wird ein Auszug aus der OpenStreetMap-Geodatenbank benötigt.
Wie bisher lassen sich derartige Auszüge von der Geofabrik GmbH
beziehen. Diese
sind recht groß, daher sollte der Download frühzeitig angestoßen werden
– je nach ausgewählter Region sind hunderte Megabyte herunterzuladen.
Dieser Beitrag nutzt den aktuellen Auszug für das Land
Nordrhein-Westfalen. Bei der Formatwahl sollte man sich für die
platzsparende Variante .osm.pbf
entscheiden, sofern keine zwingenden
Gründe dagegen sprechen.
$ wget http://download.geofabrik.de/europe/germany/nordrhein-westfalen-latest.osm.pbf
Software aus den Repositorien
Erfreulicherweise befinden sich unter Debian fast alle für die Zwecke
dieses Beitrags erforderlichen Programme in den Standard-Repositorien.
Die einzige Ausnahme (carto
) wird unten behandelt. Es genügt daher die
Installation der folgenden Pakete mithife von APT:
# apt install postgresql mapnik-utils postgis nik4 osm2pgsql \ postgresql-11-postgis-2.5 libmapnik-dev nodejs npm fonts-noto
OpenStreetMaps Datenbank basiert auf
PostgreSQL mit der GIS-Erweiterung
PostGIS, was deren Installation erforderlich
macht. Mapnik ist die Rendering-Software des
OpenStreetMap-Projekts und kümmert sich um die graphische Darstellung
der Daten (sog. Rendering). Der hier eingesetzte deutsche
OpenStreetMap-Stil greift auf die Noto-Schriftenfamilie zurück, welche
daher ebenfalls nötig ist. osm2pgsql
ist ein Importwerkzeug u.a. für
das PBF-Format und Nodejs und NPM sind (leider) für das Hilfsprogramm
carto
nötig, das unten unter IV. noch angesprochen wird.
Anders als es 2016 bei Gentoo der Fall war, sind bei der Debian-Version
von PostgreSQL und PostGIS keine Inkompatibilitäten festzustellen. Etwas
irritierend ist einzig, daß das Paket postgresql-11-postgis-2.5
nicht
automatisch als Abhängigkeit von postgis
mitinstalliert wird und
deshalb gesondert an APT übergeben werden muß.
carto
Der internationale wie der deutsche OpenStreetMap-Stil werden seit
Jahren nicht mehr direkt im Eingabeformat von Mapnik (welches auf XML
basiert) beschrieben, sondern in einer an CSS orientierten Sprache
namens CartoCSS. Die U.S.-Firma MapBox, Inc. bietet hierfür ein
(quelloffenes) Produkt namens carto
an, welches CartoCSS in das von
Mapnik benötigte XML-Format übersetzt und selbst in NodeJS geschrieben
ist. NodeJS/NPM ist mit den Paketierungsmodellen stabiler
Betriebssysteme inkompatibel und
verursacht
daher Paketierern erhebliche Probleme. carto
ist wohl auch deshalb
nicht in den Repositorien von Debian 10 enthalten und muß manuell
installiert werden. Damit ist carto
die einzige Abhängigkeit, die man
nicht aus den Repositorien installieren kann. Dies führt leider dazu,
daß sich der Prozeß der Kartenerstellung letztlich als eine Art
bewegliches Ziel darstellt. Derzeit ist es es möglich, carto
mit dem
in Debian 10 enthaltenen Nodejs zu verwenden. Daß dies so bleibt, ist
nicht nur nicht gewährleistet, sondern nachgerade unwahrscheinlich.
Die folgenden Kommandos installieren carto
in der mit Debian 10
kompatiblen Version 1.2.0:
$ git clone https://github.com/mapbox/carto.git [...] $ cd carto $ git checkout v1.2.0 Note: checking out 'v1.2.0' [...] $ npm install npm WARN npm npm does not support Node.js v10.15.2 npm WARN npm You should probably upgrade to a newer version of node as we npm WARN npm can't make any promises that npm will work with this version. npm WARN npm Supported releases of Node.js are the latest release of 4, 6, 7, 8, 9. npm WARN npm You can find the latest version at https://nodejs.org/ [...] added 282 packages from 772 contributors in 2.518s
Nach Abschluß des NPM-Durchlaufs steht carto
in bin/carto
zur
Verfügung, was dem Suchpfad für ausführbare Programme hinzuzufügen ist:
$ export PATH="$PWD/bin:$PATH" $ cd ..
In einem
früheren
Beitrag hat der Verfasser die Frage aufgeworfen, ob magnacarto
einen
Ersatz für carto
darstellen könnte. Konnte zu diesem Zeitpunkt
magnacarto
den Stil immerhin noch übersetzen (wenngleich mit
Warnungen), scheitert dies nun mit Fehlermeldungen. Es bleibt dennoch zu
hoffen, daß magnacarto
sich zu einer ernsthaften Alternative zu
carto
entwickelt, um dem NodeJS-Problem zu entkommen.
Kartenstil
Ziel der Übung ist, Printkarten mit dem
deutschen OSM-Stil
zu erstellen, der etwa auf
openstreetmap.de zum
Einsatz kommt und gegenüber dem internationalen Stil auf deutsche
Besonderheiten abgestimmt ist. Hierfür ist selbiger mithilfe von Git
herunterzuladen. Um Probleme mit Entwicklerversionen zu vermeiden,
sollte man außerdem auf eine getaggte Version zurückgreifen. Anders als
früher11
Der deutsche Stil ist eine kontinuierlich aktualisierte
Abspaltung (Fork) des internationalen Stils und erbt daher alle
Git-Tags des internationalen Stils. Früher waren dies die
einzigen Tags, was eine gewisse Verwirrung verursachte, weil bei
der Auswahl eines Tags entgegen der Erwartung dann doch der
internationale und nicht der deutsche Stil geladen wurde.
gibt es nämlich mittlerweile spezielle Tags des deutschen
Stils. Hier wird mit dem Tag v4.24.0-de1
gearbeitet.
$ git clone https://github.com/giggls/openstreetmap-carto-de $ git checkout v4.24.0-de1
Der deutsche Kartenstil hat eigentlich eine Abhängigkeit von einer
Software namens mapnik-german-l10n
. Dabei handelt es sich um eine
PostgreSQL-Erweiterung zur Transliteration von nicht-westlichen
Schriften in lateinische Buchstaben. Deren Abhängigkeiten ziehen aber
unter Debian 10 eine vollständige (!) LLVM-Installation nach sich. Wer
nur Karten mit Gebieten erstellt, die lateinische Schriftzeichen (auch
mit Akzenten) verwenden, kann darauf verzichten — für Gegenden
innerhalb Deutschlands dürften also kaum jemals Probleme auftreten. Die
Installationsdokumentation
erwähnt allerdings zwar die Möglichkeit des Verzichts, läßt eine
genauere Erklärung aber vermissen. Der Entwickler des deutschen
OpenStreetMap-Stils, Geggus, erklärte die Angelegenheit
auf
Nachfrage. Seine Ausführungen liegen dem im Anhang dargestellten Patch
gegen Version v4.24.0-de1 zugrunde, welcher die Abhängigkeit von
mapnik-german-l10n
entfernt und außerdem noch ein Problem mit dem
Download der Shapefiles behebt, auf das sogleich eingegangen wird. Der
Patch ist als fix.patch
abzuspeichern und wie folgt anzuwenden:
$ cd openstreetmap-carto-de $ patch -p1 < ../fix.patch
Nun zu den erwähnten Shapefiles. Der deutsche (wie auch der
internationale) Stil benötigen zur Darstellung sog. Shapefiles, das
sind Geometriedateien, die große Objekte abbilden, z.B. die weltweiten
Küstenlinien. Diese Shapefiles lädt das Skript
openstreetmap-carto-de/scripts/get-shapefiles.py
automatisiert
herunter, oder sollte es jedenfalls. Tatsächlich schlägt die Ausführung
des Skripts auch nicht fehl, sondern gibt vor, alles relevante
herunterzuladen:
$ ./scripts/get-shapefiles.py Starting get-shapefiles.py... 1-1. Downloading 'world_boundaries'... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 50.4M 100 50.4M 0 0 10.3M 0 0:00:04 0:00:04 --:--:-- 10.3M 1-2. Expanding 'world_boundaries'... Done. 1-3-2. Indexing 'data/world_boundaries/places.shp'... max tree depth:8 split ratio:0.55 processing data/world_boundaries/places.shp 9994 length=1054 version=1000 type=1 extent:box2d(-175.2365875244140625,-41.2103958129882812,179.2218933105468750,66.1441192626953125) number shapes=251 number nodes=406 done! 2-1. Downloading 'simplified-water-polygons-split-3857'... [...] ...script completed in 81.6 seconds.
Allein, die heruntergeladen Daten sind unvollständig. Es fehlen die
Shapefiles der Gruppen rivers-z
, lakes-z
und ocean-z
, was beim
späteren Rendering (unten VII.) einen Fehler auslöst. Ein Blick in das
Skript get-shapefiles.py
zeigt, daß die entsprechenden Befehle
auskommentiert sind. Der Grund dafür findet sich bei der Quelle der
Daten. Diese wurde vor einiger Zeit
ausgetauscht,
weil die alte Quelle den Dienst
eingestellt hat. Die neue Quelle
bietet aber die im Skript mit 7, 8 und 9 angegebenen Shapefiles mit den
erwähnten Namen
nicht
an. Wer diese Shapefiles also nicht rechtzeitig heruntergeladen hat,
steckt hier fest. Der oben vorgestellte Patch löst das Problem durch
Entfernung der entsprechenden Stilangaben aus dem Stil. Das führt
potentiell zu einer schlechteren Gesamtdarstellung, jedoch steht eine
andere Möglichkeit derzeit nicht zur Verfügung.
Der Stil kann jetzt kompiliert, d.h. in das Mapnik-XML-Format übersetzt
werden. Dafür genügt ein einfacher Aufruf von make
.
$ make carto -a 3.0.22 project.mml > /tmp/tmp.6Joq2bpP3H Warning: landcover.mss:618:4 line-offset is unstable. It may change in the future. Warning: landcover.mss:621:6 line-offset is unstable. It may change in the future. Warning: Layer builtup has no styles associated with it. Warning: Layer rivers-z1 has no styles associated with it. Warning: water-features.mss:112:6 line-offset is unstable. It may change in the future. Warning: water-features.mss:114:6 line-offset is unstable. It may change in the future. Warning: water-features.mss:99:4 line-offset is unstable. It may change in the future. Warning: water-features.mss:105:4 line-offset is unstable. It may change in the future. Warning: roads.mss:621:10 line-offset is unstable. It may change in the future. Warning: roads.mss:623:10 line-offset is unstable. It may change in the future. Warning: roads.mss:615:10 line-offset is unstable. It may change in the future. [...] Warning: amenity-points.mss:1632:4 Styles do not match layer selector #text-poly-low-zoom. Warning: admin.mss:115:6 Styles do not match layer selector #admin-low-zoom. mv /tmp/tmp.6Joq2bpP3H osm-hrb.xml
Der Befehl läuft recht lange und generiert dabei ziemlich viele
Warnungen. Allerdings scheinen die Warnungen zu keinen Problemen zu
führen. Der fertige Stil befindet sich dann in der Datei osm-de.xml
,
nebst einer hier nicht weiter relevanten Variante osm-hrb.xml
.
PostgreSQL
PostgreSQL sollte für den Umgang mit den erheblichen Datenmengen noch
etwas justiert werden, indem möglichst große Werte für work_mem
und
maintenance_work_mem
in /etc/postgresql/11/main/postgresql.conf
vorgesehen werden. Folgende Werte haben sich als angemessen
herausgestellt:
work_mem = 1024MB maintenance_work_mem = 2048 MB
Dabei ist natürlich die Größe des eigenen Arbeitsspeichers zu beachten. Mehr als vorhanden kann hier nicht vergeben werden.
In diesem Zusammenhang sollte man auch noch das Memory Overcommitting zulassen (diese Änderung ist nicht persistent und muß nach jedem Neustart neu gesetzt werden). Anschließend ist PostgreSQL neu zu starten.
# sysctl -w vm/overcommit_memory=1 # rc-service postgresql restart # Oder bei systemd mit systemctl
Nun sind die OpenStreetMap-Daten, die im ersten Schritt oben
heruntergeladen wurden, in eine PostgreSQL-Datenbank einzupflegen. Dazu
wechselt man zum Benutzer postgres
und legt zunächst überhaupt erst
einmal eine Datenbank an.
# su - postgres $ psql
CREATE USER quintus WITH PASSWORD 'geheimespasswort'; CREATE DATABASE osm WITH OWNER quintus; \q
Der Datenbankname osm
ist zwingend. Er wird vom deutschen
OpenStreetMap-Stil an verschiedenen Stellen referenziert und müßte sonst
überall dort geändert werden.
Nun sind noch zwei Erweiterungen in die neue Datenbank zu laden:
$ psql osm
CREATE EXTENSION hstore; CREATE EXTENSION postgis; \q
$ exit # Verlasse Benutzer postgres
Die anderen in den früheren Beiträgen erwähnten Erweiterungen sind nicht
nötig, weil in diesem Beitrag wie beschrieben auf mapnik-german-l10n
verzichtet wird.
Der eigentliche Datenimport von PBF in die PostgreSQL-Datenbank erfolgt dann mit folgendem Kommando:
$ osm2pgsql -d osm -G -S hstore-only.style \ -k -C 1000 --slim --number-processes `nproc` \ --tag-transform-script openstreetmap-carto.lua \ -p planet_osm_hstore \ ../nordrhein-westfalen-latest.osm.pbf
Die Bedeutung der einzelnen Optionen kann in der Benutzerhandbuchseite
zu osm2pgsql(1) nachgelesen werden. In der Gesamtgestaltung folgen diese
Optionen aus der Datei
INSTALL-de.md
mit minimaler Modifikation (--slim
für nicht ganz so leistungsfähige
Rechner; die Koppelung mit nproc(1) nutzt alle Prozessorkerne aus).
Dieses Kommando läuft recht lange (ca. vierzig Minuten).
Der deutsche OpenStreetMap-Stil nutzt die Daten nicht direkt, sondern
nur über SQL-Views, die erst noch angelegt werden müssen. Der oben
vorgestellte Patch verändert diese SQL-Views so, daß die
Transliterationen mithilfe von mapnik-german-l10n
entfallen. Sie
können einfach wie folgt angelegt werden (folgt ebenfalls aus
INSTALL-de.md):
$ psql -d osm -f osm_tag2num.sql $ psql -d osm -f views_osmde/view-line.sql $ psql -d osm -f views_osmde/view-point.sql $ psql -d osm -f views_osmde/view-polygon.sql $ psql -d osm -f views_osmde/view-roads.sql
Karte erstellen
Damit sind die Vorarbeiten abgeschlossen. Mit dem Programm nik4
kann
man jetzt eine Karte erzeugen. Beispielhaft hier für die Gegend rund um
das Landtagsgebäude in Düsseldorf im Maßstab 1:5000 bei 600 DPI auf A4:
$ nik4 -s 5000 --ppi 600 -a 4 -c 6.76409 51.21815 \ --margin 10 osm-de.xml /tmp/landtag.png Mapnik LOG> 2019-12-25 21:20:53: warning: unable to find face-name 'Noto Sans CJK JP Regular' in FontSet 'fontset-0' Mapnik LOG> 2019-12-25 21:20:53: warning: unable to find face-name 'Noto Sans Balinese Regular' in FontSet 'fontset-0' [...] Mapnik LOG> 2019-12-25 21:20:53: warning: unable to find face-name 'unifont Medium' in FontSet 'fontset-2' Mapnik LOG> 2019-12-25 21:20:53: warning: unable to find face-name 'Unifont Upper Medium' in FontSet 'fontset-2'
Soweit ersichtlich, können die Warnungen über nicht vorgefundene
Schriftarten ignoriert werden. Sie betreffen vornehmlich Gegenden, in
welchen andere als lateinische Zeichen genutzt werden. Bei der Suche
nach den korrekten Koordinaten für die Option -c
erweist sich die
OpenStreetMap-Webseite als recht
praktisch – man kann sie nach Zentrierung der Karte auf dem gewünschten
Ort einfach aus der URL ablesen.
Bricht Mapnik dagegen mit dieser Fehlermeldung ab:
Mapnik LOG> 2019-12-25 22:37:56: warning: unable to find face-name 'unifont Medium' in FontSet 'fontset-2' Mapnik LOG> 2019-12-25 22:37:56: warning: unable to find face-name 'Unifont Upper Medium' in FontSet 'fontset-2' Traceback (most recent call last): File "/usr/bin/nik4", line 323, in <module> mapnik.load_map_from_string(m, style_xml, False, style_path) RuntimeError: Shape Plugin: shapefile 'data/river-polygons-reduced-3857/river_reduced_z0.shp' does not exist encountered during parsing of layer 'rivers-z0' in Layer at line 8977
Dann liegt das oben unter V. angesprochene Problem mit den nicht existenten Shapefiles vor. Es kann durch Anwendung des dort vorgestellten Patches behoben werden.
Die so erzeugte Graphik enthält nur die reine Karte. Wenn diese nicht
bloß für den Eigengebrauch erstellt wird, muß man nun mit einem
Graphikprogramm noch den nach
der Lizenz erforderlichen Urheberrechtshinweis auf der Graphik
anbringen. Hat man das erledigt, kann man das Ergebnis dann auf
A4-Papier ausdrucken. Es ist darauf zu achten, beim Druck dieselbe
DPI-Zahl anzugeben wie beim Aufruf von nik4
. 600 DPI entspricht einem
feinen Druck mit vielen Details; nicht jeder Drucker ist dafür geeignet.
Im Zweifel sind 300 DPI ein guter Wert.
Fazit
Die manuelle Erstellung von Printkarten gestaltet sich weiterhin kompliziert. Der Vorteil dieser Methode liegt aber neben einem besseren Verständnis für die Technik hinter OpenStreetMap in der Hoheit über die Daten und die praktisch unbegrenzten Anpassungsmöglichkeiten. Entweder durch Veränderung des CartoCSS oder direkt des Mapnik-XML können so Karten nach allen Bedürfnissen erzeugt werden. Mit der Frage, wie GPS-Spuren dargestellt werden können, soll sich ein Folgebeitrag beschäftigen.
Anhang: Patch
diff --git a/project.mml b/project.mml index 120e6d51..3702bfa8 100644 --- a/project.mml +++ b/project.mml @@ -259,144 +259,6 @@ Layer: ) AS water_lines properties: minzoom: 12 - - id: rivers-z0 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/river-polygons-reduced-3857/river_reduced_z0.shp" - type: "shape" - properties: - maxzoom: 0 - advanced: {} - - id: rivers-z1 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/river-polygons-reduced-3857/river_reduced_z1.shp" - type: "shape" - properties: - minzoom: 1 - maxzoom: 1 - advanced: {} - - id: rivers-z2 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/river-polygons-reduced-3857/river_reduced_z2.shp" - type: "shape" - properties: - minzoom: 2 - maxzoom: 2 - advanced: {} - - id: rivers-z3 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/river-polygons-reduced-3857/river_reduced_z3.shp" - type: "shape" - properties: - minzoom: 3 - maxzoom: 3 - advanced: {} - - id: rivers-z4 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/river-polygons-reduced-3857/river_reduced_z4.shp" - type: "shape" - properties: - minzoom: 4 - maxzoom: 4 - advanced: {} - - id: rivers-z5 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/river-polygons-reduced-3857/river_reduced_z5.shp" - type: "shape" - properties: - minzoom: 5 - maxzoom: 5 - advanced: {} - - id: rivers-z6 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/river-polygons-reduced-3857/river_reduced_z6.shp" - type: "shape" - properties: - minzoom: 6 - maxzoom: 6 - advanced: {} - - id: lakes-z0 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/lakes-polygons-reduced-3857/lakes_reduced_z0.shp" - type: "shape" - properties: - maxzoom: 0 - advanced: {} - - id: lakes-z1 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/lakes-polygons-reduced-3857/lakes_reduced_z1.shp" - type: "shape" - properties: - minzoom: 1 - maxzoom: 1 - advanced: {} - - id: lakes-z2 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/lakes-polygons-reduced-3857/lakes_reduced_z2.shp" - type: "shape" - properties: - minzoom: 2 - maxzoom: 2 - advanced: {} - - id: lakes-z3 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/lakes-polygons-reduced-3857/lakes_reduced_z3.shp" - type: "shape" - properties: - minzoom: 3 - maxzoom: 3 - advanced: {} - - id: lakes-z4 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/lakes-polygons-reduced-3857/lakes_reduced_z4.shp" - type: "shape" - properties: - minzoom: 4 - maxzoom: 4 - advanced: {} - - id: lakes-z5 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/lakes-polygons-reduced-3857/lakes_reduced_z5.shp" - type: "shape" - properties: - minzoom: 5 - maxzoom: 5 - advanced: {} - - id: lakes-z6 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/lakes-polygons-reduced-3857/lakes_reduced_z6.shp" - type: "shape" - properties: - minzoom: 6 - maxzoom: 6 - advanced: {} - id: water-areas geometry: polygon <<: *extents @@ -427,75 +289,6 @@ Layer: properties: cache-features: true minzoom: 0 - - id: ocean-z0 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/ocean-polygons-reduced-3857/ocean_reduced_z0.shp" - type: "shape" - properties: - maxzoom: 0 - advanced: {} - - id: ocean-z1 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/ocean-polygons-reduced-3857/ocean_reduced_z1.shp" - type: "shape" - properties: - minzoom: 1 - maxzoom: 1 - advanced: {} - - id: ocean-z2 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/ocean-polygons-reduced-3857/ocean_reduced_z2.shp" - type: "shape" - properties: - minzoom: 2 - maxzoom: 2 - advanced: {} - - id: ocean-z3 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/ocean-polygons-reduced-3857/ocean_reduced_z3.shp" - type: "shape" - properties: - minzoom: 3 - maxzoom: 3 - advanced: {} - - id: ocean-z4 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/ocean-polygons-reduced-3857/ocean_reduced_z4.shp" - type: "shape" - properties: - minzoom: 4 - maxzoom: 4 - advanced: {} - - id: ocean-z5 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/ocean-polygons-reduced-3857/ocean_reduced_z5.shp" - type: "shape" - properties: - minzoom: 5 - maxzoom: 5 - advanced: {} - - id: ocean-z6 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/ocean-polygons-reduced-3857/ocean_reduced_z6.shp" - type: "shape" - properties: - minzoom: 6 - maxzoom: 6 - advanced: {} - id: ocean-lz geometry: polygon <<: *extents diff --git a/project.mml.d/lakes-z0 b/project.mml.d/lakes-z0 deleted file mode 100644 index b21ee09d..00000000 --- a/project.mml.d/lakes-z0 +++ /dev/null @@ -1,9 +0,0 @@ - - id: lakes-z0 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/lakes-polygons-reduced-3857/lakes_reduced_z0.shp" - type: "shape" - properties: - maxzoom: 0 - advanced: {} diff --git a/project.mml.d/lakes-z1 b/project.mml.d/lakes-z1 deleted file mode 100644 index 0a9a650b..00000000 --- a/project.mml.d/lakes-z1 +++ /dev/null @@ -1,10 +0,0 @@ - - id: lakes-z1 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/lakes-polygons-reduced-3857/lakes_reduced_z1.shp" - type: "shape" - properties: - minzoom: 1 - maxzoom: 1 - advanced: {} diff --git a/project.mml.d/lakes-z2 b/project.mml.d/lakes-z2 deleted file mode 100644 index 883f69f9..00000000 --- a/project.mml.d/lakes-z2 +++ /dev/null @@ -1,10 +0,0 @@ - - id: lakes-z2 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/lakes-polygons-reduced-3857/lakes_reduced_z2.shp" - type: "shape" - properties: - minzoom: 2 - maxzoom: 2 - advanced: {} diff --git a/project.mml.d/lakes-z3 b/project.mml.d/lakes-z3 deleted file mode 100644 index 2ecc17ae..00000000 --- a/project.mml.d/lakes-z3 +++ /dev/null @@ -1,10 +0,0 @@ - - id: lakes-z3 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/lakes-polygons-reduced-3857/lakes_reduced_z3.shp" - type: "shape" - properties: - minzoom: 3 - maxzoom: 3 - advanced: {} diff --git a/project.mml.d/lakes-z4 b/project.mml.d/lakes-z4 deleted file mode 100644 index 13294690..00000000 --- a/project.mml.d/lakes-z4 +++ /dev/null @@ -1,10 +0,0 @@ - - id: lakes-z4 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/lakes-polygons-reduced-3857/lakes_reduced_z4.shp" - type: "shape" - properties: - minzoom: 4 - maxzoom: 4 - advanced: {} diff --git a/project.mml.d/lakes-z5 b/project.mml.d/lakes-z5 deleted file mode 100644 index a38bc1a3..00000000 --- a/project.mml.d/lakes-z5 +++ /dev/null @@ -1,10 +0,0 @@ - - id: lakes-z5 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/lakes-polygons-reduced-3857/lakes_reduced_z5.shp" - type: "shape" - properties: - minzoom: 5 - maxzoom: 5 - advanced: {} diff --git a/project.mml.d/lakes-z6 b/project.mml.d/lakes-z6 deleted file mode 100644 index c7ef625e..00000000 --- a/project.mml.d/lakes-z6 +++ /dev/null @@ -1,10 +0,0 @@ - - id: lakes-z6 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/lakes-polygons-reduced-3857/lakes_reduced_z6.shp" - type: "shape" - properties: - minzoom: 6 - maxzoom: 6 - advanced: {} diff --git a/project.mml.d/ocean-z0 b/project.mml.d/ocean-z0 deleted file mode 100644 index 32d8cc92..00000000 --- a/project.mml.d/ocean-z0 +++ /dev/null @@ -1,9 +0,0 @@ - - id: ocean-z0 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/ocean-polygons-reduced-3857/ocean_reduced_z0.shp" - type: "shape" - properties: - maxzoom: 0 - advanced: {} diff --git a/project.mml.d/ocean-z1 b/project.mml.d/ocean-z1 deleted file mode 100644 index 9b450ae0..00000000 --- a/project.mml.d/ocean-z1 +++ /dev/null @@ -1,10 +0,0 @@ - - id: ocean-z1 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/ocean-polygons-reduced-3857/ocean_reduced_z1.shp" - type: "shape" - properties: - minzoom: 1 - maxzoom: 1 - advanced: {} diff --git a/project.mml.d/ocean-z2 b/project.mml.d/ocean-z2 deleted file mode 100644 index b61d6241..00000000 --- a/project.mml.d/ocean-z2 +++ /dev/null @@ -1,10 +0,0 @@ - - id: ocean-z2 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/ocean-polygons-reduced-3857/ocean_reduced_z2.shp" - type: "shape" - properties: - minzoom: 2 - maxzoom: 2 - advanced: {} diff --git a/project.mml.d/ocean-z3 b/project.mml.d/ocean-z3 deleted file mode 100644 index 99af5736..00000000 --- a/project.mml.d/ocean-z3 +++ /dev/null @@ -1,10 +0,0 @@ - - id: ocean-z3 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/ocean-polygons-reduced-3857/ocean_reduced_z3.shp" - type: "shape" - properties: - minzoom: 3 - maxzoom: 3 - advanced: {} diff --git a/project.mml.d/ocean-z4 b/project.mml.d/ocean-z4 deleted file mode 100644 index 31eae0d6..00000000 --- a/project.mml.d/ocean-z4 +++ /dev/null @@ -1,10 +0,0 @@ - - id: ocean-z4 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/ocean-polygons-reduced-3857/ocean_reduced_z4.shp" - type: "shape" - properties: - minzoom: 4 - maxzoom: 4 - advanced: {} diff --git a/project.mml.d/ocean-z5 b/project.mml.d/ocean-z5 deleted file mode 100644 index ad08debd..00000000 --- a/project.mml.d/ocean-z5 +++ /dev/null @@ -1,10 +0,0 @@ - - id: ocean-z5 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/ocean-polygons-reduced-3857/ocean_reduced_z5.shp" - type: "shape" - properties: - minzoom: 5 - maxzoom: 5 - advanced: {} diff --git a/project.mml.d/ocean-z6 b/project.mml.d/ocean-z6 deleted file mode 100644 index 5f40da7a..00000000 --- a/project.mml.d/ocean-z6 +++ /dev/null @@ -1,10 +0,0 @@ - - id: ocean-z6 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/ocean-polygons-reduced-3857/ocean_reduced_z6.shp" - type: "shape" - properties: - minzoom: 6 - maxzoom: 6 - advanced: {} diff --git a/project.mml.d/order.txt b/project.mml.d/order.txt index 6a33bb9e..fb9dbdc1 100644 --- a/project.mml.d/order.txt +++ b/project.mml.d/order.txt @@ -8,28 +8,7 @@ water-lines-casing water-lines-low-zoom springs water-lines -rivers-z0 -rivers-z1 -rivers-z2 -rivers-z3 -rivers-z4 -rivers-z5 -rivers-z6 -lakes-z0 -lakes-z1 -lakes-z2 -lakes-z3 -lakes-z4 -lakes-z5 -lakes-z6 water-areas -ocean-z0 -ocean-z1 -ocean-z2 -ocean-z3 -ocean-z4 -ocean-z5 -ocean-z6 ocean-lz ocean landcover-area-symbols diff --git a/project.mml.d/rivers-z0 b/project.mml.d/rivers-z0 deleted file mode 100644 index 700c30e1..00000000 --- a/project.mml.d/rivers-z0 +++ /dev/null @@ -1,9 +0,0 @@ - - id: rivers-z0 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/river-polygons-reduced-3857/river_reduced_z0.shp" - type: "shape" - properties: - maxzoom: 0 - advanced: {} diff --git a/project.mml.d/rivers-z1 b/project.mml.d/rivers-z1 deleted file mode 100644 index ccf05d16..00000000 --- a/project.mml.d/rivers-z1 +++ /dev/null @@ -1,10 +0,0 @@ - - id: rivers-z1 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/river-polygons-reduced-3857/river_reduced_z1.shp" - type: "shape" - properties: - minzoom: 1 - maxzoom: 1 - advanced: {} diff --git a/project.mml.d/rivers-z2 b/project.mml.d/rivers-z2 deleted file mode 100644 index 386f334d..00000000 --- a/project.mml.d/rivers-z2 +++ /dev/null @@ -1,10 +0,0 @@ - - id: rivers-z2 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/river-polygons-reduced-3857/river_reduced_z2.shp" - type: "shape" - properties: - minzoom: 2 - maxzoom: 2 - advanced: {} diff --git a/project.mml.d/rivers-z3 b/project.mml.d/rivers-z3 deleted file mode 100644 index e995418b..00000000 --- a/project.mml.d/rivers-z3 +++ /dev/null @@ -1,10 +0,0 @@ - - id: rivers-z3 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/river-polygons-reduced-3857/river_reduced_z3.shp" - type: "shape" - properties: - minzoom: 3 - maxzoom: 3 - advanced: {} diff --git a/project.mml.d/rivers-z4 b/project.mml.d/rivers-z4 deleted file mode 100644 index 0e1e6a22..00000000 --- a/project.mml.d/rivers-z4 +++ /dev/null @@ -1,10 +0,0 @@ - - id: rivers-z4 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/river-polygons-reduced-3857/river_reduced_z4.shp" - type: "shape" - properties: - minzoom: 4 - maxzoom: 4 - advanced: {} diff --git a/project.mml.d/rivers-z5 b/project.mml.d/rivers-z5 deleted file mode 100644 index cc3d14c7..00000000 --- a/project.mml.d/rivers-z5 +++ /dev/null @@ -1,10 +0,0 @@ - - id: rivers-z5 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/river-polygons-reduced-3857/river_reduced_z5.shp" - type: "shape" - properties: - minzoom: 5 - maxzoom: 5 - advanced: {} diff --git a/project.mml.d/rivers-z6 b/project.mml.d/rivers-z6 deleted file mode 100644 index 31056963..00000000 --- a/project.mml.d/rivers-z6 +++ /dev/null @@ -1,10 +0,0 @@ - - id: rivers-z6 - geometry: "polygon" - <<: *extents - Datasource: - file: "data/river-polygons-reduced-3857/river_reduced_z6.shp" - type: "shape" - properties: - minzoom: 6 - maxzoom: 6 - advanced: {} diff --git a/views_osmde/view-line.sql b/views_osmde/view-line.sql index f14773df..290649b0 100644 --- a/views_osmde/view-line.sql +++ b/views_osmde/view-line.sql @@ -45,10 +45,10 @@ osm_tag2num(tags->'width') as "num_width", way as "way", way_area as way_area, z_order as z_order, -osml10n_get_placename_from_tags(tags,true,false,' - ','de',way) as localized_name_second, -osml10n_get_placename_from_tags(tags,false,false,' - ','de',way) as localized_name_first, -osml10n_get_name_without_brackets_from_tags(tags,'de',way) as localized_name_without_brackets, -osml10n_get_streetname_from_tags(tags,true,false,' - ','de', way) as localized_streetname, +tags->'name' as localized_name_second, +tags->'name' as localized_name_first, +tags->'name' as localized_name_without_brackets, +tags->'name' as localized_streetname, COALESCE(tags->'name:hsb',tags->'name:dsb',tags->'name') as name_hrb, layer as layer, tags as tags diff --git a/views_osmde/view-point.sql b/views_osmde/view-point.sql index 7efc40b3..f3ac6f7a 100644 --- a/views_osmde/view-point.sql +++ b/views_osmde/view-point.sql @@ -47,10 +47,10 @@ tags->'wetland' as "wetland", osm_tag2num(tags->'width') as "num_width", way as "way", z_order as z_order, -osml10n_get_placename_from_tags(tags,true,false,chr(10),'de',way) as localized_name_second, -osml10n_get_placename_from_tags(tags,false,false,chr(10),'de',way) as localized_name_first, -osml10n_get_name_without_brackets_from_tags(tags,'de',way) as localized_name_without_brackets, -osml10n_get_streetname_from_tags(tags,true,false,chr(10),'de', way) as localized_streetname, +tags->'name' as localized_name_second, +tags->'name' as localized_name_first, +tags->'name' as localized_name_without_brackets, +tags->'name' as localized_streetname, COALESCE(tags->'name:hsb',tags->'name:dsb',tags->'name') as name_hrb, layer as layer, tags as "tags" diff --git a/views_osmde/view-polygon.sql b/views_osmde/view-polygon.sql index 189eb444..1b09fa1a 100644 --- a/views_osmde/view-polygon.sql +++ b/views_osmde/view-polygon.sql @@ -50,11 +50,11 @@ osm_tag2num(tags->'width') as "num_width", way as "way", way_area as way_area, z_order as z_order, -osml10n_get_placename_from_tags(tags,true,false,chr(10),'de',way) as localized_name_second, -osml10n_get_placename_from_tags(tags,false,false,chr(10),'de',way) as localized_name_first, -osml10n_get_name_without_brackets_from_tags(tags,'de',way) as localized_name_without_brackets, -osml10n_get_streetname_from_tags(tags,true,false,chr(10),'de', way) as localized_streetname, -osml10n_get_country_name(tags,chr(10),'de') as country_name, +tags->'name' as localized_name_second, +tags->'name' as localized_name_first, +tags->'name' as localized_name_without_brackets, +tags->'name' as localized_streetname, +tags->'name' as country_name, COALESCE(tags->'name:hsb',tags->'name:dsb',tags->'name') as name_hrb, layer as layer, tags as "tags" diff --git a/views_osmde/view-roads.sql b/views_osmde/view-roads.sql index 86e4d4d8..9018afc6 100644 --- a/views_osmde/view-roads.sql +++ b/views_osmde/view-roads.sql @@ -31,10 +31,10 @@ tags->'width' as "width", way as way, way_area as way_area, z_order as z_order, -osml10n_get_placename_from_tags(tags,true,false,' - ','de',way) as localized_name_second, -osml10n_get_placename_from_tags(tags,false,false,' - ','de',way) as localized_name_first, -osml10n_get_name_without_brackets_from_tags(tags,'de',way) as localized_name_without_brackets, -osml10n_get_streetname_from_tags(tags,true,false,' - ','de', way) as localized_streetname, +tags->'name' as localized_name_second, +tags->'name' as localized_name_first, +tags->'name' as localized_name_without_brackets, +tags->'name' as localized_streetname, COALESCE(tags->'name:hsb',tags->'name:dsb',tags->'name') as name_hrb, layer as layer, tags as tags
Fußnoten:
Der deutsche Stil ist eine kontinuierlich aktualisierte Abspaltung (Fork) des internationalen Stils und erbt daher alle Git-Tags des internationalen Stils. Früher waren dies die einzigen Tags, was eine gewisse Verwirrung verursachte, weil bei der Auswahl eines Tags entgegen der Erwartung dann doch der internationale und nicht der deutsche Stil geladen wurde.