Kartenkacheln erzeugen
Einführung
Abschnitt betitelt „Einführung“QCAD wird mit zwei Kommandozeilenwerkzeugen ausgeliefert, um Kartenkacheln für die Verwendung mit Online-Kartenanzeigen wie Leaflet zu erstellen. Leaflet ist eine JavaScript-Bibliothek zum Arbeiten mit interaktiven Karten in einem Browser.
Eine Zeichnung online präsentieren
Abschnitt betitelt „Eine Zeichnung online präsentieren“Der einfachste Anwendungsfall für eine Online-Karte besteht darin, Besuchern einer Website eine interaktive, zoombare Ansicht einer Zeichnung bereitzustellen.
Hier ein Beispiel, das die Kartenkacheln für eine beliebige Zeichnungsdatei erzeugt:
dwg2maptiles -z 0-6 -c -b white -hq-postfix=@2x -a -o path/to/output/directory drawing.dxfDer Schalter -z gibt die zu erzeugenden Zoomstufen an, hier von Zoomstufe 0 bis Zoomstufe 6. Das bedeutet, dass der Benutzer ausgehend von Stufe 0 (ganze Zeichnung bzw. automatischer Zoom) sechsmal hineinzoomen kann, bis die Grenze erreicht ist. Jedes Mal, wenn der Benutzer hineinzoomt, wird die Zeichnung um den Faktor 2 vergrößert, sodass der Benutzer mit 6 Zoomstufen um den Faktor 2^6 (=64) hineinzoomen kann. Das Erzeugen weiterer Zoomstufen erfordert mehr Zeit und Speicherplatz. Jede zusätzliche Zoomstufe benötigt typischerweise viermal so viel Zeit und Speicherplatz für die Erzeugung wie die vorherige.
Die Kacheln werden im angegebenen Ausgabeverzeichnis (-o) mit der standardmäßigen Verzeichnisstruktur und den Dateinamen für Kartenkacheln (z/x/y.png) erzeugt.
Im obigen Beispiel möchten wir, dass die Zeichnung auf weißem Hintergrund gerendert wird (-b white). Weiße Linien sollten zu Schwarz korrigiert werden, um sicherzustellen, dass alle Linien sichtbar sind (-c).
Das Argument -hq-postfix=@2x weist dwg2maptiles an, hochwertige (hq, hochauflösende, Retina-)Kacheln mit 512x512px zusätzlich zu den Kacheln in Standardauflösung mit 256x256px zu erzeugen.
Um die Qualität weiter zu erhöhen, verwenden wir außerdem den Schalter -a für Antialiasing.
Beispiel online mit Leaflet ansehen
Georeferenzierte Kartenkacheln erzeugen
Abschnitt betitelt „Georeferenzierte Kartenkacheln erzeugen“dwg2maptiles kann auch verwendet werden, um exakte Overlays für Weltkarten zu erzeugen. Dafür muss eine Zeichnung in der Regel von einem lokalen Koordinatensystem in Web-Mercator-Koordinaten transformiert werden, wie sie üblicherweise von Online-Karten verwendet werden.
QCAD Professional wird mit einem separaten Kommandozeilenwerkzeug ausgeliefert, um Zeichnungen von einem Koordinatenreferenzsystem (CRS) in ein anderes zu transformieren: dwgmapconvert.
dwgmapconvert wird typischerweise verwendet, um alle Koordinaten in einer gegebenen Zeichnungsdatei von einem bekannten, lokalen Koordinatensystem in das Koordinatensystem EPSG:3857 (manchmal „Web Mercator” genannt) umzuwandeln. Dies ist das von den meisten Online-Karten verwendete Koordinatensystem, zum Beispiel Google Maps oder Mapbox. Um eine Zeichnung als Eingabe für dwg2maptiles zu verwenden und georeferenzierte Kartenkacheln zu erzeugen, muss die Zeichnung im Koordinatensystem EPSG:3857 vorliegen.
Im Koordinatensystem EPSG:3857 passt die gesamte Weltkarte auf Zoomstufe 0 in ein Quadrat von 20037508.3427892m. Wenn eine Zeichnung in dieses Koordinatensystem umgewandelt wird, wird die Zeichnung so transformiert, dass sie in dieses Weltquadrat passt und dass sich die Zeichnung an den korrekten, projizierten Weltkoordinaten befindet.
Wenn eine Zeichnung zum Beispiel in EPSG:2056 (auch LV95, das lokale Schweizer Koordinatensystem) erstellt wurde, kann sie mit dwgmapconvert wie folgt nach EPSG:3857 transformiert werden:
dwgmapconvert -segment-length=0.5 -crs-in=EPSG:2056 -crs-out=EPSG:3857 -f -o drawing_epsg3857.dxf drawing_epsg2056.dxfDa Kartenprojektionen üblicherweise 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 angegeben wird, führt dwgmapconvert diese Segmentierung automatisch mit der angegebenen Segmentlänge durch. Die Segmentlänge wird in Zeichnungseinheiten der ursprünglichen Zeichnung angegeben (hier Meter).
-crs-in wird verwendet, um das Eingabekoordinatensystem anzugeben, hier EPSG:2056.
-crs-out wird verwendet, um das Ausgabekoordinatensystem anzugeben, das EPSG:3857 sein muss, wenn die Ausgabe später mit dwg2maptiles verwendet werden soll.
dwgmapconvert unterstützt LV95 als Eingabe und WebMercator als Ausgabe.
Weitere Koordinatensysteme werden in zukünftigen Versionen hinzugefügt oder können vom Benutzer hinzugefügt werden.
Um Unterstützung für ein neues Koordinatensystem hinzuzufügen, müssen zwei Gleichungen bereitgestellt werden, um die Koordinaten vom neuen Koordinatensystem nach WGS84 (Längengrad/Breitengrad, wie GPS-Koordinaten) umzurechnen.
Neue Koordinatensysteme können zu einer JSON-Konfigurationsdatei namens CRS.json hinzugefügt werden, die sich im Ordner „scripts” der verwendeten QCAD-Installation befindet. Hier ein Beispiel für eine CRS.json-Datei, die das Koordinatensystem LV95 konfiguriert. Um LV95 als Eingabe für das Werkzeug dwgmapconvert verwenden zu können, müssen wir den Abschnitt „toWgs84” mit Gleichungen für die Umrechnung der x- und y-Koordinaten bereitstellen. Hier verwenden wir außerdem zwei Hilfsvariablen, x_ und y_, die in der x-Gleichung initialisiert werden müssen, damit sie in beiden Gleichungen zugänglich sind.
Wir könnten auch einen Abschnitt „fromWgs84” bereitstellen, um die Umrechnung von anderen Koordinatensystemen nach LV95 zu ermöglichen. Beide Abschnitte sind optional, je nachdem, welche Umrechnungsrichtung Sie unterstützen möchten.
{ "CRS" : [ { "id" : "EPSG:2056 CH1903+ / LV95", "toWgs84" : { "x": "x_ = (y-1200000)/1000000; y_ = (x-2600000)/1000000; (2.6779094 + 4.728982*y_ + 0.791484*y_*x_ + 0.1306*y_*x_*x_ - 0.0436*y_*y_*y_) * 100 / 3", "y": "(16.9023892 + 3.238272*x_ - 0.270978*y_*y_ - 0.002528*x_*x_ - 0.0447*y_*y_*x_ - 0.0140*x_*x_*x_) * 100 / 36" }, "aliases" : [ "LV95", "Swiss" ] } ]}Kartenkacheln erzeugen
Abschnitt betitelt „Kartenkacheln erzeugen“Sobald wir die Zeichnung in EPSG:3857-Koordinaten umgewandelt haben, können wir dwg2maptiles verwenden, um die Kacheln für die Overlay-Ebene in Leaflet zu erzeugen:
dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -b transparent -o path/to/output/directory drawing_epsg3857.dxfBeachten Sie, dass wir den Schalter -web-mercator an dwg2maptiles übergeben müssen, um ihm mitzuteilen, dass es keinen automatischen Zoom durchführen, sondern ein Karten-Overlay in exakten EPSG:3857-Koordinaten erzeugen soll, wie sie in der Datei vorhanden sind.
-skip-empty weist dwg2maptiles an, keine Kacheln zu erzeugen, die keinen Teil der Zeichnung enthalten. Ohne diesen Schalter werden pro Zoomstufe 2^zoomLevel Kacheln erzeugt. Das wären 4’194’304 Kacheln für Zoomstufe 22. Da eine Overlay-Zeichnung sehr wahrscheinlich nur einen sehr kleinen Teil der Weltkarte abdeckt, sollte dieser Schalter beim Erstellen von Overlay-Karten immer verwendet werden.
-b transparent setzt den Hintergrund auf transparent, sodass die Karte als Overlay für eine bestehende Weltkarte verwendet werden kann (z. B. Google Map, Mapbox usw.). Um die Farbe zu steuern, in der schwarze oder weiße Linien angezeigt werden, kann der Hintergrund mit -b "#00ffffff" (weiß-transparenter Hintergrund, schwarze Linien) bzw. -b "#00000000" (schwarz-transparenter Hintergrund, weiße Linien) auf schwarz-transparent oder weiß-transparent gesetzt werden. Übergeben Sie in diesem Fall unbedingt auch den Schalter -c, um eine automatische Farbkorrektur zu erzwingen.
Das Argument -hq-postfix=@2x kann verwendet werden, um zusätzlich zu den normalen 256px-Kacheln hochauflösende Kacheln (512px) zu erzeugen. Der Wert „@2x” wird für hochauflösende Kacheln empfohlen und ist weit verbreitet, auch in Leaflet. Mit diesem Schalter wird für jede niedrig aufgelöste Kachel „N.png” eine hochauflösende Kachel „[email protected]” erstellt.
Mehrere Prozesse (und CPU-Kerne) verwenden
Abschnitt betitelt „Mehrere Prozesse (und CPU-Kerne) verwenden“Das Erzeugen von Kartenkacheln kann je nach Zoomstufen, Zeichnungskomplexität und anderen Einstellungen eine CPU-intensive Aufgabe sein.
Um Kartenkacheln schneller zu erzeugen, können Sie die Aufgabe auf mehrere verfügbare CPU-Kerne verteilen. Für diese Funktion bietet dwg2maptiles den Schalter -s, um nur einen Teil (Slice) der benötigten Kacheln zu erzeugen. Der Schalter -s erwartet zwei durch Komma getrennte Parameter: den zu erzeugenden Slice und die Gesamtzahl der verwendeten Slices. Zum Beispiel würde -s 1,4 den ersten von insgesamt vier Slices erzeugen. Um alle Kacheln des obigen Beispiels mit vier CPU-Kernen zu erzeugen, könnten Sie ausführen:
dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 1,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 2,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 3,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 4,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &waitNatürlich könnten Sie die Aufgaben auch nach Zoomstufen aufteilen oder Slices nur für höhere Zoomstufen und einen einzelnen Prozess für alle niedrigeren (günstigeren) Zoomstufen verwenden usw.
Beispiel
Abschnitt betitelt „Beispiel“Ein interaktives Beispiel stellt der Karte des Schweizer Kantons Zürich zwei Overlay-Ebenen bereit: das geschützte Waldgebiet und die Wildtierkorridore. Die Originaldaten lagen in EPSG:2056-Koordinaten (LV95) vor und wurden mit dwgmapconvert nach EPSG:3857 transformiert.