Utilisation avancée de couches en WMS-C

Introduction

Bien que les APIs minimum, standard et avancée gèrent l'accès au cache du Géoportail, il peut être nécessaire d'y accéder par des moyens autres.

Ce chapitre ne couvre pas la gestion de l'accès via la GéoDRM au service WMS-C du Géoportail.

Fabrication d'une requête WMS-C

Le cache du Géoportail est une pyramide d'images par territoire couvert dont les résolutions ont été données plus avant. Chaque niveau de la pyramide contient des tuiles de 256 par 256 pixels. L'origine de chaque niveau est le (0, 0) de la projection GEOPORTALxxx pour les petites et grandes échelles (xxx étant le code du territoire couvert par le cache, Cf. API et territoires) ou MILLER pour les très petites échelles.

Une requête WMS-C n'est qu'une requête WMS pour laquelle l'emprise des données demandées DOIT être exactement celle d'une tuile quelconque dans la pyramide. De plus, la requête doit avoir un paramètre TILED=true.

Comment calculer l'emprise d'une tuile recouvrant un point en coordonnées géographiques ?

Il faut d'abord convertir les coordonnées dans le système de projection cible (GEOPORTALxxx pour les petites à grandes échelles, MILLER au très petites échelles). Il est possible d'utiliser le logiciel cs2cs de la bibliothèque PROJ.4 ou l'API Géoportail qui repose sur le portage en Javascript de PROJ.4, PROJ4JS. Le code source de ces bibliothèques fournit les algorithmes utilisés pour ces projections et, par conséquent, réutilisable dans d'autres langages de programmation.

Les coordonnées initiales sont, par exemple : 2°28'44.1", 48°48'20.3" en degrés sexagésimaux, soit 2.478917, 48.805639 en degrés décimaux.

Les coordonnées en IGNF:GEOPORTALFXX sont (189952.67, 5433018.88) :

$ cs2cs -f "%.2f" +init=epsg:4326 +to +init=IGNF:GEOPORTALFXX
2.478917    48.805639
189952.67   5433018.88 -0.00

Les coordonnées en IGNF:MILLER sont (275951.78, 5910061.78) :

$ cs2cs -f "%.2f" +init=epsg:4326 +to +init=IGNF:MILLER
2.478917    48.805639
275951.78   5910061.78 0.00
Formules simplifiées

Si l'installation de PROJ.4 n'est pas possible, il est possible d'utiliser la formule simplifiée suivante pour la projection GEOPORTALxxx (lon étant la longitude en radians, lat étant la latitude en radians) :

X= Kx * lon
Y= Ky * lat

Sachant que chaque territoire a des paramètres propres à la projection GEOPORTALxxx, on obtient les valeurs de Kx, Ky :

Code territoire Kx Ky
ANF 6160807.2519099 6378137.0000000
ASP 5026040.5439769 6378137.0000000
CRZ 4430626.2549842 6378137.0000000
FXX 4390419.7883516 6378137.0000000
GUF 6362600.1788320 6378137.0000000
KER 4142268.6266325 6378137.0000000
MYT 6238759.4037015 6378137.0000000
NCL 5913705.6486150 6378137.0000000
PYF 6160807.2519099 6378137.0000000
REU 5954503.8607176 6378137.0000000
SPM 4349878.9742539 6378137.0000000
WLF 6188679.0727028 6378137.0000000

Dans le cas de la projection MILLER, la formule est la suivante (lon étant la longitude en radians, lat étant la latitude en radians) :

X= 6378137.0000000 * lon
Y= 6378137.0000000 * log(tan(pi/4 + lat * .4)) * 1.25

Le cas spécial de la projection TERA50STEREO peut se ramener aux formules suivantes (lon étant la longitude en radians, lat étant la latitude en radians) :

X'= 1.9140939076700438*tan( 0.5*(pi/2 - lat) )/( ( (1.0+0.08199188997902919*sin(lat)) / (1.0-0.08199188997902919*sin(lat)) )^0.040995944989514595 )

X= (X' * sin(lon-2.443460952792061))*6378388.0 + 300000.0
Y= (X' * cos(lon-2.443460952792061))*6378388.0 - 2299363.482
Calcul de l'emprise (coins bas gauche et haut droit) :

Pour trouver la dalle recouvrant ce point à l'échelle 1/2000ième (1 pixel vaut 0.50 m x 0.50 m), il suffit de trouver le coin inférieur gauche de cette dalle sachant qu'une dalle fait 256 pixels par 256 pixels :

  1. 256 x 0.5 = 128 mètres de largeur/hauteur de la tuile à la résolution cherchée ;
  2. l'abscisse 189952.67 permet de calculer le nombre de tuiles depuis l'origine du cache (qui vaut 0) : 189952.67/128 = 1484.0052344 ;
  3. la partie entière vaut donc : 1484 ;
  4. soit 1484 x 128 = 189952 mètres ;
  5. l'ordonnée 5433018 permet de calculer le nombre de tuiles depuis l'origine du cache (qui vaut 0) : 5433018.88/128 = 42445.4600000 ;
  6. la partie entière vaut donc : 42445 ;
  7. soit 42445 x 128 = 5432960 mètres ;
  8. le coin inférieur gauche de la tuile est donc : (189952, 5432960) ;
  9. en ajoutant la taille de la tuile à la résolution cherchée, on obtient le coin supérieur droit de la tuile : 189952 + 128 = 190080, 5432960 + 128 = 5433088.

L'emprise de la tuile cherchée en résolution 0.50 mètres est donc :

(189952, 5432960), (190080, 5433088)

Le même raisonnement s'applique à la résolution Monde (échelle 1/156 543 000) :

  1. 256 x 39135.75 = 10018752
  2. abscisse : 275951.78/10018752 = 0.02754353, soit 0 ;
  3. ordonnée : 5910061.78/10018752 = 0.5899000, soit 0 ;
  4. coin inférieur gauche : 0 + 10018752
  5. coin supérieur droit : 0 + 10018752

soit au final :

(0, 0), (10018752, 10018752)

Quelles sont les couches du Géoportail (paramètre LAYERS) pour le service WMS-C ?

Elles sont définies .

Exemples de requête WMS-C pour la dalle recouvrant le point (2°28'44.1", 48°48'20.3") :

  • À l'échelle Rue, zoom 17 (1 pixel vaut 0.50 m x 0.50 m) sur les photographies aériennes :
    http://wxs.ign.fr/geoportail/wmsc?LAYERS=ORTHOIMAGERY.ORTHOPHOTOS&
      EXCEPTIONS=text/xml&FORMAT=image/jpeg&
      SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&
      SRS=IGNF:GEOPORTALFXX&BBOX=189952,5432960,190080,5433088&
      WIDTH=256&HEIGHT=256&TILED=true&
  • À l'échelle Monde, zoom 0 (1 pixel vaut 39135.75m x 39135.75m) sur les cartes :
    http://wxs.ign.fr/geoportail/wmsc?LAYERS=GEOGRAPHICALGRIDSYSTEMS.MAPS&
      EXCEPTIONS=text/xml&FORMAT=image/jpeg&
      SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&
      SRS=IGNF:MILLER&BBOX=0,0,10018752,10018752&
      WIDTH=256&HEIGHT=256&TILED=true&