Skip to Content

Nous adressons toutes nos pensées à la famille de notre ami Jérôme !

http://www.forumsig.org/showthread.php/43488-Disparition-de-Phoenix

QGIS: visualiser les tuiles TMS (OpenStreetMap et autres) avec GDAL ou les extensions TileLayerPlugin et QuickMapServices

Niveau Débutant
Logiciels utilisés QGIS
Plateforme Windows | Mac | Linux | FreeBSD

Tout le monde connait le protocole WMS qui permet d'obtenir des cartes à partir de serveurs cartographiques (Menu Couches/ Ajouter une couche/Ajouter une couche WMS)  et le plugin OpenLayers qui permet d'obtenir des fonds de carte OpenStreetMap, Google Maps, Bing Maps, MapQuest et autres en utilisant la librairie JavaScript du même nom (Menu Internet/OpenLayers plugin), mais  peu d'entre nous utilisent directement les services/protocoles  tuilés (pavés cartographiques pour les Canadiens), TMS (Tile Map Service) développé par l' OSGeo (Fondation Geospatiale Open Source), WMTS  de l'OGC Nous ne discuterons pas ici des principes, des protocoles ou des différents formats (ZXY, XYZ, ...) en renvoyant le lecteur aux nombreuses explications qu'il est possible de trouver sur Internet (Petite histoire de tuilage de neogeo,  FOSS4G 2010: OGC WMTS and OSGeo TMS standards:motivations, history and differences (pdf) ou Stockage de tuiles : comprendre WMTS et TMS de Makina Corpus, par exemple, mais il y en a beaucoup d'autres comme le livre Tile-Based Geospatial Information Systems,Principles and Practices (2010) de Sample, J.T. et  Loup, E. chez Springer). Le but ici est d'expliquer comment afficher pratiquement les cartes résultantes dans QGIS sans passer par l'une ou l'autre des solutions proposées.

Il existe à l'heure actuelle trois solutions dont je vais expliquer ici les procédures en prenant comme exemple l'affichage des tuiles de OpenTopoMap, projet allemand qui  mêle les données OSM et SRTM  pour créer des cartes topographiques ombragées avec des courbes de niveau (wiki OpenStreetMap: OpenTopoMap).

Principes

La seule exigence est que la ressource soit spécifiée par un URI (Uniform Resource Identifier)  de type:

- http://{sous-domaine}.tile.opentopomap.org/${niveau de zoom}/${x}/${y}.png (TMS)
- http://{sous-domaine}.tile.opentopomap.org/cycle/{niveau de zoom}/{colonne}/{ligne}.png (WMTS)

Les portions de l'URL circonscrites par {} sont des valeurs paramétrées pour accéder aux différentes tuiles fournies par le fournisseur de tuiles.  Le sous-domaine est utilisé par le fournisseur pour distribuer les tuiles à travers de multiples serveurs (a,b,c), mais tous les fournisseurs ne disposent pas de sous-domaines. Les autres paramètres sont utilisés par le client pour accéder dynamiquement aux cartes, elles restent telles quelles.

Dans le cas qui nous concerne, seul le format TMS sera utilisé. Pour OpenTopoMap, des URI possibles seront donc http://b.tile.opentopomap.org/${z}/${x}/${y}.png ou http://tile.opentopomap.org/${z}/${x}/${y}.png:

Avec GDAL

GDAL permet depuis la version 1.7 d'accéder aux services TMS (GDAL: TMS) (et depuis la version 2.1, aux services WMTS , GDAL:WMTS). Cela se fait par l'entremise de fichiers XML qu'il suffit d'ouvrir dans QGIS comme des couches raster. Des exemples concrets sont présentés dans Using Map Tile Servers in QGIS 2.4  et Les Tuiles OpenStreetMap dans QGIS pour OpenStreetMap. Dans le cas d'OpenTopoMap, un fichier XML est présenté  dans OSM - Opentopomap (GDAL) . Le  fichier XML utilisé ici est:

<GDAL_WMS>
    <Service name="TMS">
        <ServerUrl>http://tile.opentopomap.org/${z}/${x}/${y}.png</ServerUrl>
    </Service>
    <DataWindow>
        <UpperLeftX>-20037508.34</UpperLeftX>
        <UpperLeftY>20037508.34</UpperLeftY>
        <LowerRightX>20037508.34</LowerRightX>
        <LowerRightY>-20037508.34</LowerRightY>
        <TileLevel>18</TileLevel>
        <TileCountX>1</TileCountX>
        <TileCountY>1</TileCountY>
        <YOrigin>top</YOrigin>
    </DataWindow>
    <Projection>EPSG:3857</Projection>
    <BlockSizeX>256</BlockSizeX>
    <BlockSizeY>256</BlockSizeY>
    <BandsCount>3</BandsCount>
    <Cache/>
</GDAL_WMS>

Les propriétés sont les mêmes que celle d'une couche raster classique. Les tuiles étant fournies dans la projection Mercator (EPSG:3857), il ne faut donc pas oublier d'activer la projection à la volée pour l'utiliser dans votre système de projection favori (EPSG:31370 ici). Le problème principal de ces fichiers est qu'ils ne sont pas toujours reconnus si on les utilise derrière un proxy (université, entreprise, voir par exemple ForumSIG: Les tuiles OpenStreetMap ou Google Maps directement dans QGIS (sans extension)), à l'inverse des deux plugins.

Résultat:

Avec l'extension TileLayerPlugin de Minoru Akagi

Les explications détaillées sont fournies dans Readme: TileLayerPlugin

  • chaque couche est représentée par un fichier .tsv situé dans un dossier nommé tile_layer;
  • la localisation de ce dossier est précisée dans les Settings du plugin.

Des exemples concrets sont présentés dans [QGis] Afficher une carte Mapbox et Mozilla Stumbler layer: loading TMS and XYZ tilelayers in QGIS et des couches supplémentaires sont proposées dans  http://qgis.nl/tilelayers.zip

Le format de ces fichiers est (titre de la couche, crédit (très important) et URI) :

#title credit serviceUrl yOriginTop zmin zmax xmin ymin xmax ymax
OpenTopoMap    © OpenTopoMap EU    http://tile.opentopomap.org/{z}/{x}/{y}.png    1    0    19

Mais attention, les éléments doivent être séparés par des tabulations, c'est à dire

OpenTopoMap[tab]© OpenTopoMap EU[tab]http://tile.opentopomap.org/{z}/{x}/{y}.png[tab]1[tab]0[tab]19 :

La couche est chargée dans QGIS à travers le plugin:

Avec l'extension QuickMapServices proposée par NextGIS

 C'est le même principe que le précédent,mais avec cette fois-ci:

  • un dossier nommé data_sources où sont stockées les couches sous forme de fichiers metadata.ini dans des sous-dossiers spécifiques;
  • et un dossier nommé group où les couches peuvent être regroupées sous un intitulé commun

dossiers data_sources et group

Le format du fichier metadata.ini est:

[general]
id = openTopoMap
type = TMS
is_contrib = False


[ui]
group = osm
alias = OpenTopoMap
icon = osm.svg

[license]
name = CC-BY-SA 2.0
link = http://creativecommons.org/licenses/by-sa/2.0/
copyright_text =© OpenTopoMap EU , CC-BY-SA
copyright_link = https://www.openstreetmap.org/copyright
terms_of_use = http://wiki.openstreetmap.org/wiki/Tile_usage_policy

[tms]
url = http://tile.opentopomap.org/{z}/{x}/{y}.png

Le tag group spécifie le groupe dans lequel le couche se trouve (dossier group) et vous reconnaitrez les autres paramètres.

De nombreuses contributions supplémentaires sont proposées dans GitHub:quickmapservices_contrib avec l'avertissement classique : These services are maintained by community. They are not validated and may contain errors, license violations etc. Use at your own risk.

Il suffit de les placer dans les dossiers ad hoc (voir figures pour avoir la liste) et  la couche est chargée dans QGIS à travers le plugin:

 

 

Résultats pour les deux extensions

Les deux extensions donnent en effet les mêmes résultats:

Dans les deux cas, les propriétés ne sont pas celles des rasters. Elles permettent de régler directement la transparence des couches.

 

De ce fait, il est très facile de superposer les couches avec toutes les possibilités du Blending mode (overlay, etc.).

Conclusions

Beaucoup plus souples et plus rapides que les couches XML de GDAL et le plugin OpenLayers (et avec beaucoup moins de problèmes...) ces deux extensions se révèlent très pratiques. Configurer une couche TMS est très facile une fois que l'on en a compris les principes.

 

Tous les traitements ont été effectués sur Mac OS X ici, mais aussi Linux et Windows avec plusieurs versions de QGIS 2.x

Site officiel : TileLayer Plugin
Site officiel : QuickMapServices


Creative Commons License
licence Creative Commons Paternité-Pas d'Utilisation Commerciale-Pas de Modification 2.0 France

Commentaires

OpenTopoMap

All done, thanks (c'est fait)

OpenTopoMap

Hi,

As you have metadata.ini almost filled, why don't you add OpenTopoMap to https://github.com/nextgis/quickmapservices_contrib?

I noticed it is not there yet.

Thanks.

Poster un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.