Aller au contenu

Générer des tuiles de carte

QCAD est fourni avec deux outils en ligne de commande pour créer des tuiles de carte à utiliser avec des affichages de cartes en ligne tels que Leaflet. Leaflet est une bibliothèque JavaScript permettant de travailler avec des cartes interactives dans un navigateur.

Le cas d’utilisation le plus simple d’une carte en ligne consiste à fournir aux visiteurs d’un site web une vue interactive et zoomable d’un dessin.

Voici un exemple qui génère les tuiles de carte pour un fichier de dessin donné :

dwg2maptiles -z 0-6 -c -b white -hq-postfix=@2x -a -o path/to/output/directory drawing.dxf

Le commutateur -z spécifie les niveaux de zoom à générer, ici du niveau de zoom 0 au niveau de zoom 6. Cela signifie qu’à partir du niveau 0 (dessin entier ou zoom automatique), l’utilisateur peut zoomer 6 fois jusqu’à atteindre la limite. Chaque fois que l’utilisateur zoome, le dessin est agrandi d’un facteur 2, de sorte qu’avec 6 niveaux de zoom, l’utilisateur peut zoomer d’un facteur 2^6 (=64). La génération de niveaux de zoom supplémentaires nécessite plus de temps et d’espace disque. Chaque niveau de zoom supplémentaire nécessite généralement quatre fois plus de temps et d’espace disque à générer que le précédent.

Les tuiles sont générées dans le répertoire de sortie donné (-o) avec la structure de répertoires et les noms de fichiers standard pour les tuiles de carte (z/x/y.png).

Dans l’exemple ci-dessus, nous voulons que le dessin soit rendu sur un arrière-plan blanc (-b white). Les lignes blanches devraient être corrigées en noir pour s’assurer que toutes les lignes sont visibles (-c).

L’argument -hq-postfix=@2x indique à dwg2maptiles de générer des tuiles de haute qualité (hq, haute résolution, Retina) en 512x512px en plus des tuiles en résolution standard en 256x256px.

Pour augmenter encore la qualité, nous utilisons aussi le commutateur -a pour l’anticrénelage.

Voir l’exemple avec Leaflet en ligne

dwg2maptiles peut aussi être utilisé pour générer des superpositions exactes pour des cartes du monde. Pour cela, un dessin doit généralement être transformé d’un système de coordonnées local en coordonnées Web Mercator, telles qu’elles sont couramment utilisées par les cartes en ligne.

QCAD Professional est fourni avec un outil en ligne de commande distinct pour transformer les dessins d’un système de référence de coordonnées (CRS) à un autre : dwgmapconvert.

dwgmapconvert est généralement utilisé pour convertir toutes les coordonnées d’un fichier de dessin donné d’un système de coordonnées local connu vers le système de coordonnées EPSG:3857 (parfois appelé « Web Mercator »). C’est le système de coordonnées utilisé par la plupart des cartes en ligne, par exemple Google Maps ou Mapbox. Pour utiliser un dessin comme entrée pour dwg2maptiles et produire des tuiles de carte géoréférencées, le dessin doit être dans le système de coordonnées EPSG:3857.

Dans le système de coordonnées EPSG:3857, l’ensemble de la carte du monde tient dans un carré de 20037508.3427892m au niveau de zoom 0. Si un dessin est converti dans ce système de coordonnées, le dessin est transformé de telle sorte qu’il tienne dans ce carré du monde et qu’il soit situé aux coordonnées mondiales projetées correctes.

Par exemple, si un dessin a été créé en EPSG:2056 (aussi appelé LV95, le système de coordonnées local suisse), il peut être transformé en EPSG:3857 avec dwgmapconvert comme suit :

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

Comme les projections cartographiques sont généralement non linéaires, les courbes et les lignes plus longues doivent être divisées en petits segments de ligne qui peuvent ensuite être projetés de manière non linéaire. Si le commutateur -segment-length est fourni, dwgmapconvert effectue cette segmentation automatiquement, en utilisant la longueur de segment donnée. La longueur de segment est spécifiée en unités de dessin du dessin d’origine (ici le mètre).

-crs-in est utilisé pour spécifier le système de coordonnées d’entrée, ici EPSG:2056.

-crs-out est utilisé pour spécifier le système de coordonnées de sortie, qui doit être EPSG:3857 si la sortie doit ensuite être utilisée avec dwg2maptiles.

dwgmapconvert prend en charge LV95 en entrée et WebMercator en sortie.

D’autres systèmes de coordonnées seront ajoutés dans les futures versions ou peuvent être ajoutés par l’utilisateur.

Pour ajouter la prise en charge d’un nouveau système de coordonnées, deux équations doivent être fournies pour convertir les coordonnées du nouveau système de coordonnées vers WGS84 (longitude/latitude, comme les coordonnées GPS).

De nouveaux systèmes de coordonnées peuvent être ajoutés à un fichier de configuration JSON appelé CRS.json, situé dans le dossier « scripts » de l’installation de QCAD utilisée. Voici un exemple de fichier CRS.json qui configure le système de coordonnées LV95. Pour pouvoir utiliser LV95 comme entrée pour l’outil dwgmapconvert, nous devons fournir la section « toWgs84 » avec des équations pour la conversion des coordonnées x et y. Ici, nous utilisons aussi deux variables auxiliaires, x_ et y_, qui doivent être initialisées dans l’équation x afin d’être accessibles dans les deux équations.

Nous pourrions aussi fournir une section « fromWgs84 » pour permettre la conversion d’autres systèmes de coordonnées vers LV95. Les deux sections sont facultatives, selon le sens de conversion que vous souhaitez prendre en charge.

{
"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" ]
}
]
}

Une fois que nous avons converti le dessin en coordonnées EPSG:3857, nous pouvons utiliser dwg2maptiles pour générer les tuiles de la couche de superposition dans Leaflet :

dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -b transparent -o path/to/output/directory drawing_epsg3857.dxf

Notez que nous devons passer le commutateur -web-mercator à dwg2maptiles pour lui indiquer qu’il ne doit pas effectuer de zoom automatique, mais générer une superposition de carte dans des coordonnées EPSG:3857 exactes telles qu’elles sont présentes dans le fichier.

-skip-empty indique à dwg2maptiles de ne pas générer de tuiles qui ne contiennent aucune partie du dessin. Sans ce commutateur, 2^zoomLevel tuiles seront générées par niveau de zoom. Cela ferait 4’194’304 tuiles pour le niveau de zoom 22. Comme un dessin de superposition ne couvre très probablement qu’une très petite partie de la carte du monde, ce commutateur devrait toujours être utilisé lors de la création de cartes de superposition.

-b transparent définit l’arrière-plan sur transparent, de sorte que la carte puisse être utilisée comme superposition pour une carte du monde existante (par exemple Google Map, Mapbox, etc.). Pour contrôler la couleur dans laquelle les lignes noires ou blanches sont affichées, l’arrière-plan peut être défini sur noir transparent ou blanc transparent avec -b "#00ffffff" (arrière-plan blanc transparent, lignes noires) ou -b "#00000000" (arrière-plan noir transparent, lignes blanches) respectivement. Dans ce cas, veillez à passer aussi le commutateur -c pour forcer une correction automatique des couleurs.

L’argument -hq-postfix=@2x peut être utilisé pour générer des tuiles haute résolution (512px) en plus des tuiles normales de 256px. La valeur « @2x » est recommandée et largement utilisée pour les tuiles haute résolution, y compris dans Leaflet. Avec ce commutateur, pour chaque tuile basse résolution « N.png », une tuile haute résolution « [email protected] » est créée.

La génération de tuiles de carte peut être une tâche gourmande en CPU, selon les niveaux de zoom, la complexité du dessin et d’autres réglages.

Pour générer les tuiles de carte plus rapidement, vous pouvez répartir la tâche entre plusieurs cœurs de CPU disponibles. Pour cette fonctionnalité, dwg2maptiles propose le commutateur -s pour ne générer qu’une tranche des tuiles requises. Le commutateur -s attend deux paramètres séparés par des virgules : la tranche à générer et le nombre total de tranches utilisées. Par exemple, -s 1,4 générerait la première tranche sur quatre au total. Pour générer toutes les tuiles de l’exemple ci-dessus en utilisant quatre cœurs de CPU, vous pourriez exécuter :

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 &
wait

Bien entendu, vous pourriez aussi répartir les tâches par niveaux de zoom ou utiliser des tranches uniquement pour les niveaux de zoom plus élevés et un seul processus pour tous les niveaux de zoom inférieurs (moins coûteux), etc.

Un exemple interactif fournit deux couches de superposition à la carte du canton suisse de Zurich : la zone forestière protégée et les corridors de faune. Les données d’origine étaient en coordonnées EPSG:2056 (LV95) et ont été transformées en EPSG:3857 à l’aide de dwgmapconvert.

Voir l’exemple avec Leaflet en ligne