Services de tuilage supportés

Author:Thomas Bonfort
Contact:tbonfort at terriscope.fr
Author:Stephen Woodbridge

MapCache a la capacité de servir des tuiles en utilisant de nombreux protocoles de requête et de conventions de nommage pour les tuiles. Le but de ce document est de les décrire. Les divers services doivent être activés dans le fichier mapcache.xml afin que MapCache puisse répondre à leurs requêtes spécifiques.

Tous les services sont disponibles dans l’interface de démonstration, à partir duquel vous être encouragés à copier/coller le code JavaScript avant de vous lancer dans le codage de vos propres pages utilisant les tuiles MapCache.

La notation suivante est utilisée sur cette page et fait référence aux noms des objets dans le fichier de configuration mapcache.xml.

  • <tileset_name> - nom d’un jeu de tuiles configuré
  • <grid_name> - nom de la grille définie explicitement ou implicitement
  • <quadkey> - spécifique au service de tuilage Virtual Earth
  • <z> - Niveau de zoom dans le schéma de nommage zxy
  • <y> - numéro de ligne dans le schéma de nommage zxy
  • <x> - numéro de colonne dans le schéma de nommage zxy

Service TMS

Le service TMS service utilise un schéma de tuilage de type z/x/y où:

  • z est le niveau de zoom
  • x est le numéro de colonne
  • y est le numéro de ligne

Pour activer le service TMS, ajoutez ces lignes au fichier de configuration mapcache.xml:

<service type="tms" enabled="true"/>

Un document de « capabilities » peut être récupéré via:

http://myhost.com/mapcache/tms/1.0.0/

Les tuiles sont demandées en utilisant le schéma:

http://myhost.com/mapcache/tms/1.0.0/<tileset_name>@<grid_name>/<z>/<x>/<y>.png

Pour les grilles epsg:3857 ou epsg:900913 ou GoogleMapsCompatible, avec cellules = [z/x/y]:

z0:

[0/0/0]

z1:

[1/0/0][1/1/0]
[1/0/1][1/1/1]

z2:

[2/0/0][2/1/0][2/2/0][2/3/0]
[2/0/1][2/1/1][2/2/1][2/3/1]
[2/0/2]...
[2/0/3]...

etc…

Pour les grilles epsg:4326 ou WGS84:

Note

La spécification OGC WMTS impose de manière un peu absurde au WellKnownScaleset GoogleCRS84Quad d’avoir un niveau 0 dont l’étendue géographiques est -180,-180,180,180. La grille MapCache par défaut « WGS84 » respecte cela, ce qui peut provoquer des incompatibilités avec les logiciels qui s’attendent à ce qu’au niveau 0 on ait 2 x 1 tuiles avec pour étendue -180,-90,180,90

z0:

[0/0/0]

z1:

[1/0/0][1/1/0]

z2:

[2/0/0][2/1/0][2/2/0][2/3/0]
[2/0/1][2/1/1][2/2/1][2/3/1]

etc.

Service KML

Le service KML produit des “Super-Overlays pour les jeux de tuiles qui sont alignés sur les grilles WGS84 / epsg:4326. Un Super-Overlay est un fichier KML liée à l’URL d’une image du cache et à un ensemble d’autres URLs correspondant aux résolutions voisines. Le service KML utilise un modèle de nommage de tuiles z/x/y où:

  • z est le niveau de zoom
  • x est le numéro de colonne
  • y est le numéro de ligne

Note

Pour que le service KML soit opérationnel, le service TMS doit aussi être activé car le KML Super-Overlay fait un lien vers les images en utilisant cette spécification.

Pour activer le service KML, ajoutez ces lignes au fichier de configuration mapcache.xml:

<service type="tms" enabled="true"/>
<service type="kml" enabled="true"/>

Les tuiles sont demandées en utilisant le schéma:

http://myhost.com/mapcache/kml/<tileset_name>@<grid_name>/<z>/<x>/<y>.kml

Service WMTS OGC

Pour activer le service WMTS, ajoutez ces lignes au fichier de configuration mapcache.xml:

<service type="wmts" enabled="true"/>

Ce service respecte les requêtes du standard OGC WMTS et accepte à la fois les requêtes classiques OGC en mode KVP et les requêtes de type REST.

http://myhost.com/mapcache/wmts?SERVICE=WMTS&VERSION=1.0.0&...
http://myhost.com/mapcache/wmts/1.0.0/....

Les « capabilities » sont obtenues via:

http://myhost.com/mapcache/wmts?service=wmts&request=getcapabilities&version=1.0.0
http://myhost.com/mapcache/wmts/1.0.0/WMTSCapabilities.xml

Service WMS OGC

MapCache répond aux requêtes WMS version 1.1.1, et a un support limité pour celles en version 1.3.0.

<service type="wms" enabled="true"/>

Note

Notez que le service WMS est un petit peu différent des autres services MapCache, car il écoute à la racine de l’instance configurée plutôt que sur un emplacement dédié (en fait le service répond sur http://server/mapcache/? et non sur http://server/mapcache/wms?). Ce comportement est rendu nécessaire pour permettre la proxyfication des requêtes non prises en charge tout en offrant un point d’entrée unique à tous les services OGC.

Note

MapCache supporte principalement les requêtes WMS 1.1.1 mais a un support limité de la récente version 1.3.0. Pour les requêtes 1.3.0, MapCache choisira la grille à utiliser en lisant le paramètre CRS plutôt que SRS, et respectera l’ordre des axes de coordonnées pour les systèmes epsg qui inverse l’ordre x/y habituel du paramètre BBOX.

Les requêtes WMS suivent le style d’encodage classique clé-valeur (Key Value Pair):

http://myhost.com/mapcache?SERVICE=WMS&VERSION=1.1.1&REQUEST=....

Le document de « capabilities » est retourné par:

http://myhost.com/mapcache?service=wms&request=getcapabilities

Optional WMS Configuration Options

Untiled GetMap Support

Support for untiled (non WMS-C) GetMap requests can be enabled or disabled:

<service type="wms" enabled="true">
   <!-- full_wms
        Configure response to WMS requests that are not aligned to a tileset's grids.
        Responding to requests that are not in the SRS of a configured grid is not supported, but
        this should never happen as only the supported SRSs are publicized in the capabilities
        document.

        Allowed values are:
          - error: return a 404 error (default)
          - assemble: build the full image by assembling the tiles from the cache
          - forward: forward the request to the configured source.
   -->
   <full_wms>assemble</full_wms>
</service>

GetMap Image Format

You may explicitly set which image format should be returned to the client for an untiled WMS request (i.e. whenever the tile data cannot be served directly from the caches but needs to go through a decompression/recompression phase).

<service type="wms" enabled="true">
  <format allow_client_override="true/false">myjpegformat</format>
</service>

If the allow_client_override attribute is set to true, then MapCache will honor the FORMAT=… parameter sent by the client. By default MapCache ignores this parameter and uses its configured image format.

Image Resampling Quality

<service type="wms" enabled="true">
   <!-- resample mode
   Filter applied when resampling tiles for full WMS requests.
   Can be either:
   - nearest : fastest, poor quality
   - bilinear: slower, higher qulity
   -->
   <resample_mode>bilinear</resample_mode>
</service>

Service XYZ GoogleMaps

<service type="gmaps" enabled="true"/>

Prérequis: votre WMS doit être capable de produire des images dans le SRS EPSG:900913 ou EPSG:3857 SRS, c’est à dire qu’il devrait référencer la grille « g » ou « GoogleMapsCompatible »

Voici la page HTML minimale qui devrait vous permettre d’avancer. Les parties importantes sont dans les variables urlTemplate (pour v2) et getTileURL (pour v3).

  • /mapcache est le chemin apache où MapCache gère les requêtes
  • test@g est le jeu de tuiles et la grille à utiliser, joints par un “@” - le {Z}/{X}/{Y} devrait être laissé de côté
  • l’extension finale devrait être changée en « jpg » si vous utilisez le format JPEG pour votre jeu de tuiles.

API V2

<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Google/MapServer Tile Example</title>
<script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAnfs7bKE82qgb3Zc2YyS-oBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSySz_REpPq-4WZA27OwgbtyR3VcA"
        type="text/javascript"></script>
<script type="text/javascript">

function load() {
  if (GBrowserIsCompatible()) {
    var urlTemplate = '/mapcache/gmaps/test@g/{Z}/{X}/{Y}.png';
    var myLayer = new GTileLayer(null,0,18,{
                                 tileUrlTemplate:urlTemplate,
                                 isPng:true,
                                 opacity:0.8 });
    var map = new GMap2(document.getElementById("map"));
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.setCenter(new GLatLng(0, 0), 1);
    map.addOverlay(new GTileLayerOverlay(myLayer));
  }
}

</script>
</head>
<body onload="load()" onunload="GUnload()">
  <div id="map" style="width: 500px; height: 500px"></div>
</body>
</html>

API V3

Le JavaScript pour l’exemple précédent en V2 devrait être légèrement modifié ainsi:

var map = new google.maps.Map("<element-id>", { /*options*/ });
var layerOptions = {
  getTileUrl: function(coord, zoom) {
    return "/mapcache/gmaps/test@g/" + zoom + "/" + coord.x + "/" + coord.y + ".png";
  },
  tileSize: new google.maps.Size(256,256) // or whatever
};
map.overlayMapTypes.insertAt(0, new google.maps.ImageMapType(layerOptions));

Service de tuilage Virtual Earth

Les tuiles sont organisées en un ou deux modèles différents selon qu’elles utilisent un projet Mercator Sphérique, comme EPSG:3857 ou EPSG:900913, or si elles utilisent une projection géographiques comme EPSG:4326.

Les tuiles sont demandées en utilisant le schéma:

http://myhost.com/mapcache/ve?LAYER=<tileset_name>@<grid_name>&tile=<quadkey>

Pour les grilles EPSG:3857 ou EPSG:900913 ou GoogleMapsCompatible, <quadkey> sont arrangés ainsi:

z0:

[0]

http://myhost.com/mapcache/ve?LAYER=osm@GoogleMapsCompatible&tile=0

z1:

[00][01]
[02][03]

http://myhost.com/mapcache/ve?LAYER=osm@GoogleMapsCompatible&tile=00
http://myhost.com/mapcache/ve?LAYER=osm@GoogleMapsCompatible&tile=01
http://myhost.com/mapcache/ve?LAYER=osm@GoogleMapsCompatible&tile=02
http://myhost.com/mapcache/ve?LAYER=osm@GoogleMapsCompatible&tile=03
etc.

Pour les grilles EPSG:4326 ou WGS84, <quadkey> sont arrangés ainsi:

z1:

[0][1]

http://myhost.com/mapcache/ve?LAYER=osm@WGS84&tile=0
http://myhost.com/mapcache/ve?LAYER=osm@WGS84&tile=1

z2:

[00][01][10][11]
[02][03][12][13]

http://myhost.com/mapcache/ve?LAYER=osm@WGS84&tile=00
http://myhost.com/mapcache/ve?LAYER=osm@WGS84&tile=01
http://myhost.com/mapcache/ve?LAYER=osm@WGS84&tile=02
http://myhost.com/mapcache/ve?LAYER=osm@WGS84&tile=03
http://myhost.com/mapcache/ve?LAYER=osm@WGS84&tile=10
http://myhost.com/mapcache/ve?LAYER=osm@WGS84&tile=11
http://myhost.com/mapcache/ve?LAYER=osm@WGS84&tile=12
http://myhost.com/mapcache/ve?LAYER=osm@WGS84&tile=13
etc.