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
Partager