Exportation de QGIS et de tuiles


Depuis plusieurs années, je m'emploie à dessiner et à tenir à jour des schémas de crêtes de deux régions montagneuses. Dzungarian Alatau et Central Tien Shan.

Au départ, j'ai tout dessiné dans le programme Ocad. Il s'agit d'un programme spécial pour dessiner des cartes d'orientation. Le projet a été divisé en dizaines de feuilles. Ensuite, ces feuilles ont été exportées en images, cousues et coupées en carreaux. Tuiles téléchargées sur ftp.

Voici un exemple de ce qui se passe dans QGis

Et voici comment c'était à Ocad

Et puis un jour, j'ai rencontré QGIS.

Le programme m'a impressionné. Joli rendu. Pas aussi expressif qu'en OCAD, mais la qualité me convenait. La possibilité de travailler directement avec les géodonnées. La possibilité de travailler avec l'ensemble du projet sans le diviser en morceaux.
Tout cela a entraîné le transfert de l'ensemble du projet vers QGIS.

Mais maintenant je le regrette un peu.
Le rendu QGIS n'est pas adapté à la génération de tuiles.
Bien sûr, il existe deux plugins QTiles et QMetaTiles pour QGIS 2. Je les ai adaptés pour QGIS 3.

Je vais vous en dire plus sur les montants incorrigibles qui interfèrent avec la génération de cartes de tuiles dans QGIS.
Exportation effectuée à l'aide du plugin QTiles

Numéro de montant 1. Lorsque le moteur de rendu calcule quels objets entrent dans son champ d'application (dans QGIS, c'est ce qu'on appelle le canevas), il ne prend pas en compte la taille des symboles des objets.

Exemple 1a Fonction ponctuelle

image

Comme vous pouvez le voir, l'icône du sommet a été rognée. Le rendu l'a rendu sur la tuile inférieure, mais pas sur la tuile supérieure. Parce que le centre du pic ne tombait pas dans les limites de la tuile.

Exemple 1b Fonction de ligne



La ligne épaisse passe près du bord de la tuile. Elle est tombée partiellement sur la tuile inférieure. Je n'ai pas du tout atteint la tuile du haut.

Il n'est pas nécessaire que la ligne longe la bordure des carreaux. Il peut encore y avoir un tel artefact



Numéro de montant 2. Disposition des inscriptions.

Exemple 2a Inscription courte sur un objet linéaire


Le rendu a déduit le nom sur chaque tuile.

Exemple 2b Inscription longue sur un objet linéaire

Z15

Z16

Il y a une inscription sur Z15, car elle s'insère complètement dans les bordures de la tuile.
Il n'y a plus d'inscriptions sur Z16, car une longue inscription ne rentre pas dans les bordures de la tuile.

Imaginez que vous vouliez dessiner une carte du monde, et sur tout le continent, écrivez «EURASIA» en majuscules. Rien n'en sortira. L'inscription n'apparaîtra que sur les zooms où elle est placée dans la tuile entière.

Exemple 2c. Fonction de légende sur le point

J'ai activé l'option "Afficher les étiquettes partielles"

Z16

Z15

Sur Z16, le rendu ne montre que la partie de l'inscription qui se brise dans la tuile. Lors du rendu d'une tuile voisine, il l'oublie bien sûr.

Si l'option «Afficher les étiquettes partielles» est désactivée, alors sur Z16 il n'y aura aucune inscription.

Deux méthodes sont nécessaires pour lutter contre ces problèmes.

1. Metataling
2. Zones tampons

Metatailing.
Pas chaque tuile est rendue individuellement, mais un groupe de plusieurs tuiles. Dites 4x4, puis coupez-les en petits morceaux.

Zones tampons
Une zone plus grande qu'une tuile ou une métatile est rendue, puis la pièce souhaitée en est coupée.

Les deux méthodes ne corrigent pas les montants ci-dessus, mais les décalent de plusieurs niveaux de zoom ci-dessous. Les mêmes jambages apparaissent déjà aux bords des carreaux, et aux bords des métatiles ou des zones tampons.

Exemple 2d. Fonction ponctuelle
Je fais le plugin d'exportation QMetaTiles. La taille du méta-fichier est 2x2. Cela signifie que la zone est rendue en carreaux 2x2, puis coupée en morceaux.

Z16 image

Vraiment. L'inscription n'est pas coupée maintenant, car elle s'insère complètement dans la zone de carreaux 2x2. Mais à la frontière de la metatail, l'objet lui-même a été coupé. Il en sera de même avec un objet linéaire.
Le problème a déplacé un niveau de zoom en dessous.

Numéro de montant 3. Téléchargement des inscriptions
Exemple 3a
A chaque fois, l'aligneur sélectionne la position la plus avantageuse pour la prochaine inscription. De plus, l'emplacement des étiquettes dépend de la position de la toile. Déplacez-le de quelques millimètres et toutes les inscriptions seront situées complètement différentes.

Cela signifie que lors du rendu d'un méta-fichier et de la zone tampon qui l'entoure, l'inscription peut être à un endroit et lors du rendu d'un méta-fichier voisin, à un endroit complètement différent.

J'exporte un morceau de carte en tuiles. Les inscriptions prennent une seule commande.

Ensuite, je déplace un peu le canevas et refais l'exportation. Les inscriptions sont déjà dans un ordre complètement différent. Dans ce cas, de tels artefacts apparaissent.



Que faire de tout ça?

Les zones de méta-navigation et les zones tampons ne résolvent pas les problèmes ci-dessus, mais les déplacent vers des niveaux de zoom inférieurs.

1. Lorsque le moteur de rendu calcule les objets qu'il doit dessiner, il doit prendre en compte non seulement les géodonnées des objets, mais également leur symbolisme.

Par exemple, pour tous les objets, le rendu doit stocker le BBOX, que l'objet prend après le rendu individuel. Lors du rendu d'une scène, vous devez tenir compte de l'intersection du canevas avec des BBOX individuels d'objets rendus.

Dans le même temps, il est souhaitable que le BBOX contienne également des inscriptions attachées à l'objet.

2. L'emplacement des étiquettes ne doit pas dépendre de l'emplacement de la toile. Ensuite, avec une exportation partielle, les fragments d'étiquettes seront bien cousus. Il n'y aura pas besoin de métatilingage et de zones tampons.

Malheureusement, pour le moment, exporter des tuiles à partir de QGI est tout simplement horrible, et quand il sera corrigé n'est pas clair.

Peut-être qu'il y a quelqu'un impliqué dans le développement de QGis ici?

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


All Articles