Auparavant, les cartes IGN en ligne utilisaient une projection particulière, et un système de distribution de jeton, ce qui rendait leur intégration dans Google Maps non pas impossible, mais délicate.

Désormais le service WMTS (Web Map Tile Service) de l'IGN fournit des tuiles 256x256 projetées « à la Google » (EPSG:3857), donc l'intégration est on ne peut plus facile. On commence par créer un nouvel objet MapType :

ignMapType = new google.maps.ImageMapType({
        getTileUrl: function(coord, zoom) {
            return "http://gpp3-wxs.ign.fr/" + ignKey + "/geoportail/wmts?LAYER=" +
                layer +
                "&EXCEPTIONS=text/xml&FORMAT=image/jpeg&SERVICE=WMTS&VERSION=1.0.0" +
                "&REQUEST=GetTile&STYLE=normal&TILEMATRIXSET=PM&TILEMATRIX=" +
                zoom + "&TILEROW=" + coord.y + "&TILECOL=" + coord.x;
        },
        tileSize: new google.maps.Size(256,256),
        name: name,
        maxZoom: 18
});

où :

  • ignKey est votre clé API Géoportail,
  • layer est la couche souhaitée : GEOGRAPHICALGRIDSYSTEMS.MAPS pour les cartes classiques, ou encore GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.CLASSIQUE et GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD pour les nouvelles cartes « Scan Express » (respectivement en colorisation classique et pastel),
  • name est le nom de la couche dans l'interface Google Maps.

Ensuite il faut créer une carte avec un bouton pour cette nouvelle couche :

var map = new google.maps.Map(map_canvas, {
    mapTypeControlOptions: {
        mapTypeIds: ['IGN', google.maps.MapTypeId.ROADMAP],
        style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR
    }
}

et faire le lien entre cette couche et le type défini plus haut :

map.mapTypes.set('IGN', ignMapType);

C'est tout !

On peut récupérer facilement la liste des couches accessibles avec sa clé à l'aide de la requête HTTP :

http://gpp3-wxs.ign.fr/votre_clé/wmts?service=WMTS&request=GetCapabilities

Un exemple avec quelques couches (licence MIT).


Pour aller plus loin : faire la même chose avec les cartes suisses Swisstopo. Là il faut reprojeter les tuiles, et ce qui marche bien c'est d'utiliser un service de... l'IGN !