Tutorial: Kacheln erstellen für Onlinekarten

Die Werkzeuge und Funktionen, die auf dieser Seite beschrieben werden, sind in der aktuellen Entwicklungsversion von QCAD Professional verfügbar und werden Teil der nächsten öffentlichen Version sein.

Inhalt

 

Einführung

QCAD wird mit zwei Kommandozeilenwerkzeugen geliefert, um Kartenkacheln für die Verwendung mit Online-Kartenanzeigen wie z.B. Leaflet zu erstellen. Leaflet ist eine JavaScript Bibliothek, um mit interaktiven Karten in einem Browser zu arbeiten. 

Eine Zeichnung online präsentieren

Der einfachste Anwendungsfall für eine Online-Karte besteht darin, Besuchern einer Website eine interaktive Ansicht einer Zeichnung zu bieten mit Zoom- und Panfunktion.

Hier ist ein Beispiel, das die Kartenkacheln für eine beliebige Zeichnung erzeugt:

dwg2maptiles -z 0-6 -c -b white [email protected] -a -o pfad/zum/ausgabeverzeichnis zeichnung.dxf

Der Schalter -z gibt die zu erzeugenden Vergrösserungsstufen an, hier von Stufe 0 bis Stufe 6. Das bedeutet, dass der Benutzer ab Stufe 0 (gesamte Zeichnung / Autozooms) 6 Mal hineinzoomen kann, bis die Grenze erreicht ist. Jedes Mal, wenn der Benutzer vergrössert, wird die Zeichnung um den Faktor 2 vergrössert dargestellt, so dass der Benutzer bei 6 Stufen um den Faktor 2^6 (=64) heranzoomen kann. Die Erzeugung von mehr Stufen erfordert mehr Zeit und Speicherplatz. Jede zusätzliche Stufe benötigt in der Regel viermal mehr Zeit und Speicherplatz als die vorherige.

Die Kacheln werden im angegebenen Ausgabeverzeichnis (-o) mit der Standardverzeichnisstruktur und Dateinamen für Kartenkacheln erzeugt (z/x/y.png).

Im obigen Beispiel soll die Zeichnung auf einem weissen Hintergrund (-b white) dargestellt werden. Weisse Linien sollten auf schwarz korrigiert werden, um sicherzustellen, dass alle Linien sichtbar sind (-c).

Das Argument [email protected] weist dwg2maptiles an, qualitativ hochwertige Kacheln (hq, hochauflösend, retina) von 512x512px zusammen mit den Kacheln mit Standardauflösung von 256x256px zu erzeugen.

Um die Qualität weiter zu erhöhen, verwenden wir auch den Schalter -a für das Antialiasing.

Hier ist das Ergebnis einer solchen interaktiven Zeichnungsdarstellung, die mit dwg2maptiles erzeugt wurde:

 

Generieren georeferenzierter Kartenkacheln

dwg2maptiles kann auch dazu verwendet werden, exakte Überlagerungen für Weltkarten zu erzeugen. Dazu muss eine Zeichnung in der Regel von einem lokalen Koordinatensystem in Web-Mercator-Koordinaten, wie sie bei Online-Karten üblich sind, transformiert werden.

QCAD Professional wird mit einem separaten Kommandozeilenwerkzeug geliefert, um Zeichnungen von einem Koordinaten-Referenz-System (CRS) in ein anderes zu transformieren: dwgmapconvert.

dwgmapconvert wird typischerweise verwendet, um alle Koordinaten in einer gegebenen Zeichnungsdatei von einem bekannten, lokalen Koordinatensystem in EPSG:3857 (manchmal "Web Mercator" genannt) zu konvertieren. EPSG:3857 ist das Koordinatensystem, das von den meisten Online-Karten, z.B. Google Maps oder Mapbox, verwendet wird. Um eine Zeichnung als Eingabe für dwg2maptiles zu verwenden um georeferenzierte Kartenkacheln zu erzeugen, muss die Zeichnung im EPSG:3857-Koordinatensystem vorliegen.

Im EPSG:3857-Koordinatensystem passt die gesamte Weltkarte in ein 20037508.3427892m grosses Quadrat mit Zoomstufe 0. Wenn eine Zeichnung in dieses Koordinatensystem umgewandelt wird, wird die Zeichnung so transformiert, dass sie in dieses Weltquadrat passt und dass die Zeichnung an den richtigen, projizierten Weltkoordinaten liegt.

Wenn eine Zeichnung beispielsweise in EPSG:2056 (auch LV95, das lokale Schweizer Koordinatensystem) erstellt wurde, kann sie mit dwgmapconvert wie folgt in EPSG:3857 transformiert werden:

dwgmapconvert -segment-length=0.5 -crs-in=EPSG:2056 -crs-out=EPSG:3857 -f -o zeichnung_epsg3857.dxf zeichnung_epsg2056.dxf

Da Kartenprojektionen in der Regel nichtlinear sind, müssen Kurven und längere Linien in kleine Liniensegmente aufgeteilt werden, die dann auf nichtlineare Weise projiziert werden können. Wenn der Schalter -segment-length vorhanden ist, führt dwgmapconvert diese Segmentierung automatisch durch, wobei die vorgegebene Segmentlänge verwendet wird. Die Segmentlänge wird in Zeichnungseinheiten der Originalzeichnung angegeben (hier Meter).

-crs-in wird zur Angabe des Eingabekoordinatensystems verwendet, hier EPSG:2056.

-crs-out wird verwendet, um das Ausgabekoordinatensystem anzugeben, das EPSG:3857 sein muss, wenn die Ausgabe später mit dwg2maptiles weterverarbeitet werden soll.

Generieren von Kartenkacheln

Sobald wir die Zeichnung in EPSG:3857-Koordinaten konvertiert haben, können wir dwg2maptiles verwenden, um die Kacheln für die Kartenkacheln für die Überlagerungsebene zu erzeugen:

dwg2maptiles -web-mercator -skip-empty [email protected] -z 22 -b transparent -o pfad/zum/ausgabeverzeichnis zeichnung_epsg3857.dxf

Beachten Sie, dass wir den -web-mercator Schalter an dwg2maptiles übergeben müssen, um dem Werkzeug mitzuteilen, dass kein Autozoom durchgeführt werden soll, sondern eine Kartenüberlagerung in exakten EPSG:3857-Koordinaten erzeugt werden soll.

-skip-empty weist dwg2maptiles an, keine Kacheln zu erzeugen, die keinen Teil der Zeichnung enthalten. Ohne diesen Schalter werden pro Zoomstufe 2^Stufe Kacheln erzeugt. Das wären 4'194'304 Kacheln für Zoomstufe 22. Da eine Überlagerungsebene sehr wahrscheinlich nur einen sehr kleinen Teil der Weltkarte abdeckt, sollte dieser Schalter bei der Erstellung von Überlagerungsebenen immer verwendet werden.

-b transparent setzt den Hintergrund auf transparent, so dass die Karte als Überlagerung für eine bestehende Weltkarte (z.B. Google Map, Mapbox, etc.) verwendet werden kann. Um die Farbe zu steuern, in der schwarze oder weisse Linien angezeigt werden, kann der Hintergrund mit -b "#00ffffffff" (weisser transparenter Hintergrund, schwarze Linien) bzw. -b "#0000000000" (schwarzer transparenter Hintergrund, weisse Linien) auf schwarz transparent oder weiss transparent gesetzt werden. Stellen Sie sicher, dass Sie in diesem Fall auch den Schalter -c übergeben, um die automatische Farbkorrektur zu erzwingen.

Das Argument [email protected] kann verwendet werden, um zusätzlich zu den normalen 256px-Kacheln hochauflösende Kacheln (512px) zu erzeugen. Der Wert "@2x" wird empfohlen und wird für hochauflösende Kacheln häufig verwendet, auch in Leaflet. Mit diesem Schalter wird für jede niedrigaufgelöste Kachel "N.png" eine hochaufgelöste Kachel "[email protected]" erzeugt.

Verwendung mehrerer Prozesse (und CPU-Kerne)

Die Erzeugung von Kartenkacheln kann eine CPU-intensive Aufgabe sein, abhängig von Zoomstufen, Zeichnungskomplexität und anderen Einstellungen.

Um Kartenkacheln schneller zu erzeugen, können Sie die Aufgabe auf mehrere verfügbare CPU-Kerne aufteilen. Für diese Funktion bietet dwg2maptiles den Schalter -s an, um nur einen Teil der benötigten Kacheln zu erzeugen. Der Schalter -s erwartet zwei durch Komma getrennte Parameter: der zu erzeugende Abschnitt und die Gesamtzahl der verwendeten Abschnitte. Zum Beispiel würde -s 1,4 den ersten von insgesamt vier Abschnitten erzeugen. Um alle Kacheln des obigen Beispiels unter Verwendung von vier CPU-Kernen zu erzeugen, könnten Sie die folgenden Befehle ausführen (Bash):

dwg2maptiles -web-mercator -skip-empty [email protected] -z 22 -s 1,4 -b transparent -o pfad/zum/ausgabeverzeichnis zeichnung_epsg3857.dxf &
dwg2maptiles -web-mercator -skip-empty [email protected] -z 22 -s 2,4 -b transparent -o pfad/zum/ausgabeverzeichnis zeichnung_epsg3857.dxf & dwg2maptiles -web-mercator -skip-empty [email protected] -z 22 -s 3,4 -b transparent -o pfad/zum/ausgabeverzeichnis zeichnung_epsg3857.dxf & dwg2maptiles -web-mercator -skip-empty [email protected] -z 22 -s 4,4 -b transparent -o pfad/zum/ausgabeverzeichnis zeichnung_epsg3857.dxf & wait

Natürlich kann auch nach Zoomstufen aufgeteilt werden oder es können nur für höheren Zoomstufen Abschnitte verwendet werden, während alle niedrigeren (billigeren) Zoomstufen in einem Prozess generiert werden, usw.

Beispiel

In diesem Beispiel überlagern wir die Karte des Schweizer Kantons Zürich mit zwei Ebenen: eine Ebene mit dem Waldschutzgebiet und eine mit den Wildtierkorridoren. Die Originaldaten wurden in EPSG:2056 (LV95) Koordinaten bereitgestellt und mit dwgmapconvert in EPSG:3857 transformiert.