Bonjour,

Je rencontre des difficultés pour déterminer les coordonnées des tuiles WMTS (TileRow et TileCol) en fonction des paramètres du GetCapabilities.

Je parviens bien à convertir un couple longitude/latitude (EPSG:4326) vers les coordonnées TileRow/TileCol pour le GéoPortail, OpenStreetMap, et bien d'autres.
En revanche ma méthode ne marche pas pour certains services comme le serveur Norvégien KartVerket (http://opencache.statkart.no/gatekee...etcapabilities).

Voilà comment je calcule les coordonnées TileRow/TileCol depuis un couple longitude/latitude. Celà fonctionne pour l'IGN mais pas pour le serveur Norvégien...
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Résolution en mètres par pixel (m/px) en fonction de l'échelle WMTS
function get_resolution($scale)
{
	return 2.0 * M_PI * 6378137.0 / (pow(2, $scale) * 256.0);
}
 
// Latitude en degrés vers numéro de ligne WMTS
function lat_to_tile($scale, $lat)
{
	$sin_lat = sin(deg2rad($lat));
	$y_mercator = 0.5 * 6378137.0 * log((1.0 + $sin_lat)/(1.0 - $sin_lat));
	return (20037508.0 - $y_mercator) / (get_resolution($scale) * 256.0);
}
 
// Longitude en degrés vers numéro de colonne WMTS
function long_to_tile($scale, $long)
{
	$x_mercator = 6378137.0 * deg2rad($long);
	return ($x_mercator + 20037508.0) / (get_resolution($scale) * 256.0);
}
 
$scale = 12;
$row = round(lat_to_tile($scale, 45.0));
$col = round(long_to_tile($scale, 2.0));

Je pense que ça vient du système de projection utilisé et/ou des paramètres du TileMatrixSet (TopLeftCorner ? ScaleDenominator ?).

Voilà un exemple de TileMatrix pour le serveur Norvégien, issu de son GetCapabilities :
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
    <TileMatrix>
      <ows:Identifier>EPSG:4326:15</ows:Identifier> <!-- Zoom 15 -->
      <ScaleDenominator>8530.918335399136</ScaleDenominator> <!-- Dois-je le prendre en compte ? -->
      <TopLeftCorner>90.0 -180.0</TopLeftCorner> <!-- Valeurs et système de projection différents d'IGN, à savoir "-20037508 20037508" -->
      <TileWidth>256</TileWidth>
      <TileHeight>256</TileHeight>
      <MatrixWidth>65536</MatrixWidth>
      <MatrixHeight>32768</MatrixHeight>
    </TileMatrix>

Note : je parviens à afficher le flux WMTS du serveur Norvégien dans QGIS et je peux accéder à des tuiles via leurs URLs, comme par exemple : http://opencache.statkart.no/gatekee...0&TILECOL=4513
Le problème est simplement que je ne sais pas calculer le TileRow/TileCol depuis des coordonnées longitude/latitude.

J'ai pris en main Proj4 et tester de nombreuses manip mais je bloque

Merci infiniment pour votre aide