QGIS- und Kachelexport


Seit einigen Jahren beschäftige ich mich mit dem Zeichnen und Aktualisieren von Kammplänen zweier Bergregionen. Dzungarian Alatau und Central Tien Shan.

Anfangs habe ich alles im Ocad-Programm gezeichnet. Dies ist ein spezielles Programm zum Zeichnen von Orientierungslaufkarten. Das Projekt wurde in Dutzende Blätter unterteilt. Dann wurden diese Blätter in Bilder exportiert, genäht und in Fliesen geschnitten. Auf ftp hochgeladene Kacheln.

Hier ist ein Beispiel dafür, was in QGis passiert

Und so war es in Ocad

Und dann traf ich eines Tages QGIS.

Das Programm hat mich beeindruckt. Netter Renderer. Nicht so ausdrucksstark wie in OCAD, aber die Qualität passte zu mir. Die Fähigkeit, direkt mit Geodaten zu arbeiten. Die Fähigkeit, mit dem gesamten Projekt zu arbeiten, ohne es in Stücke zu zerbrechen.
All dies führte zur Übertragung des gesamten Projekts an QGIS.

Aber jetzt bereue ich es ein wenig.
Der QGIS-Renderer eignet sich nicht zum Generieren von Kacheln.
Natürlich gibt es zwei Plugins QTiles und QMetaTiles für QGIS 2. Ich habe sie für QGIS 3 angepasst.

Ich werde Ihnen mehr über unverbesserliche Pfosten erzählen, die die Erzeugung von Kachelkarten in QGIS beeinträchtigen.
Export erfolgt mit dem QTiles Plugin

Pfosten Nummer 1. Wenn der Renderer berechnet, welche Objekte in seinen Geltungsbereich fallen (in QGIS wird dies als Zeichenfläche bezeichnet), berücksichtigt er nicht die Größe der Symbole der Objekte.

Beispiel 1a Punktfunktion

Bild

Wie Sie sehen können, wurde das Scheitelpunktsymbol zugeschnitten. Der Renderer hat es auf der unteren Kachel gerendert, aber nicht auf der oberen Kachel. Weil die Mitte des Gipfels nicht innerhalb der Grenzen der Kachel lag.

Beispiel 1b Linienfunktion



Die dicke Linie verläuft nahe dem Rand der Fliese. Sie fiel teilweise auf die untere Fliese. Ich bin überhaupt nicht auf die oberste Kachel gekommen.

Die Linie muss nicht entlang der Kachelgrenze verlaufen. Möglicherweise gibt es noch ein solches Artefakt



Pfosten Nummer 2. Anordnung der Inschriften.

Beispiel 2a Kurze Inschrift auf einem linearen Objekt


Der Renderer hat den Namen auf jeder Kachel abgeleitet.

Beispiel 2b Lange Inschrift auf einem linearen Objekt

Z15

Z16

Auf Z15 befindet sich eine Inschrift, da sie vollständig in die Ränder der Fliese passt.
Auf Z16 befinden sich keine Inschriften mehr, da eine lange Inschrift nicht in die Ränder der Kachel passt.

Stellen Sie sich vor, Sie möchten eine Weltkarte zeichnen und auf dem gesamten Kontinent „EURASIA“ in Großbuchstaben schreiben. Nichts wird daraus werden. Die Inschrift erscheint nur auf den Zooms, auf denen sie auf der gesamten Kachel platziert ist.

Beispiel 2c. Beschriftungspunktfunktion

Ich habe die Option "Teilbeschriftungen anzeigen" aktiviert.

Z16

Z15

Auf Z16 zeigt der Renderer nur den Teil der Inschrift an, der in die Kachel einbricht. Beim Rendern einer benachbarten Kachel vergisst er das natürlich.

Wenn die Option „Teilbeschriftungen anzeigen“ deaktiviert ist, gibt es auf Z16 überhaupt keine Beschriftung.

Zur Bekämpfung dieser Probleme sind zwei Methoden erforderlich.

1. Metatalisierung
2. Pufferzonen

Metatailing.
Nicht jede Kachel wird einzeln gerendert, sondern eine Gruppe von mehreren Kacheln. Sagen Sie 4x4 und schneiden Sie dann in kleinere Stücke.

Pufferzonen
Ein Bereich, der größer als eine Kachel oder eine Metatile ist, wird gerendert, und dann wird das gewünschte Stück daraus geschnitten.

Beide Methoden korrigieren die obigen Pfosten nicht, sondern verschieben sie um mehrere Zoomstufen nach unten. Dieselben Pfosten erscheinen bereits an den Rändern von Kacheln und an den Rändern von Metatilen oder Pufferzonen.

Beispiel 2d. Punktfunktion
Ich mache das Export-Plugin QMetaTiles. Die Größe der Metadatei beträgt 2x2. Dies bedeutet, dass der Bereich in 2x2 Kacheln gerendert und dann in Stücke geschnitten wird.

Z16 Bild

Wirklich. Die Inschrift ist jetzt nicht zugeschnitten, da sie vollständig in den 2x2-Fliesenbereich passt. Aber an der Grenze des Metatails wurde das Objekt selbst abgeschnitten. Das gleiche gilt für ein lineares Objekt.
Das Problem wurde um eine Zoomstufe nach unten verschoben.

Pfosten Nummer 3. Inschriften herunterladen
Beispiel 3a
Jedes Mal wählt der Aligner die vorteilhafteste Position für die nächste Inschrift. Darüber hinaus hängt die Position der Etiketten von der Position der Leinwand ab. Bewegen Sie es ein paar Millimeter, und alle Inschriften befinden sich völlig anders.

Dies bedeutet, dass sich beim Rendern einer Metadatei und der Pufferzone um sie herum die Beschriftung an einer Stelle befinden kann und beim Rendern einer benachbarten Metadatei an einer völlig anderen Stelle.

Ich exportiere ein Stück Karte in Kacheln. Die Inschriften nehmen eine Bestellung auf.

Dann verschiebe ich die Leinwand ein wenig und exportiere erneut. Die Inschriften sind bereits in einer völlig anderen Reihenfolge. In diesem Fall erscheinen solche Artefakte.



Was tun mit all dem?

Metatailing- und Pufferbereiche lösen die oben genannten Probleme nicht, sondern verschieben sie in niedrigere Zoomstufen.

1. Wenn der Renderer berechnet, welche Objekte er zeichnen soll, sollte er nicht nur die Geodaten der Objekte berücksichtigen, sondern auch deren Symbolik.

Beispielsweise muss der Renderer für alle Objekte die BBOX speichern, die das Objekt nach dem einzelnen Rendering übernimmt. Beim Rendern einer Szene müssen Sie den Schnittpunkt der Leinwand mit einzelnen BBOXs gerenderter Objekte berücksichtigen.

Gleichzeitig ist es wünschenswert, dass die BBOX auch Inschriften enthält, die an das Objekt angehängt sind.

2. Die Position der Etiketten sollte nicht von der Position der Leinwand abhängen. Beim teilweisen Export werden dann Etikettenfragmente gut zusammengefügt. Metatilierungs- und Pufferzonen sind nicht erforderlich.

Leider ist der Export von Kacheln aus QGIs im Moment einfach schrecklich, und wann es repariert wird, ist nicht klar.

Vielleicht ist hier jemand an der Entwicklung von QGis beteiligt?

Source: https://habr.com/ru/post/de429426/


All Articles