Suite

Problème TileCache et Openlayers - Projections ?

Problème TileCache et Openlayers - Projections ?


J'ai un problème très connu, mais je n'arrive pas à le résoudre.

J'ai défini les mêmes maxExtents dans la configuration que dans Openlayers init JS. J'ai fait la même chose avec la projection (EPSG:900913) et fait toute la transformation sur OpenLayers FW. Mais il y a toujours une erreur, les tuiles ne peuvent pas être affichées car elles ne commencent pas au bon endroit.

Il semble qu'ils ne soient pas contraints. Pourquoi? Une idée? Où est le point clé de la solution !

Merci. Martin

Éditer:


Je ne vois aucune photo comme carrelage. Je vois juste des boîtes rouges-loadfail. Si je clique avec le bouton droit de la souris sur la tuile et que je montre l'image, je reçois ce message : "Une erreur s'est produite : la valeur x actuelle 967644.673573 est trop éloignée du coin de la tuile x 939258.202600"


Ma configuration tilecache.cfg est :


[osm]

type=MapnikLayer

mapfile= /var/www/tilecache/osm.xml

#couches=osm

spherical_mercator=true

#tms_type=google

srs=EPSG:900913

bbox=654558.60577333,5745163.8837113,1173307.4327978,6075303.6111284

#bbox=5.88,45.78,47.81,10.54

#maxReolution=19567.879237500

Résolution max=156543.03390000001

résolutions = 156543.03390000001, 78271.516950000005, 39135.758475000002, 19567.879237500001, 9783.9396187500006, 4891.9698093750003, 2445.9849046875001, 1222.9924523437501, 611.49622617187504, 305.74811308593752, 152.87405654296876, 76.43702827148438, 38.21851413574219, 19.109257067871095, 9.5546285339355475, 4.7773142669677737, 2.3886571334838869, 1.1943285667419434, 0.59716428337097172, 0.29858214168548586

maxRésolution=78271.51695

extend_type=loose

niveaux=20


CODE OSM


function init() { var tilecacheBbox = new OpenLayers.Bounds(5.88, 45.78, 10.54, 47.81).transform( new OpenLayers.Projection("EPSG:4326"), // transformation de WGS 1984 new OpenLayers.Projection("EPSG: 900913") // à la projection sphérique de Mercator ); alert(tilecacheBbox); var map_options = {maxExtent: tilecacheBbox, restrictedExtent: tilecacheBbox, maxResolution: 156543.03390000001, résolutions: [156543.03390000001, 78271.516950000005, 39135,758475000002, 19567,879237500001, 9783,9396187500006, 4891,9698093750003, 2445,9849046875001, 1222,9924523437501, 611,49622617187504, 305,74811308593752, 152,87405654296876, 76,43702827148438, 38,21851413574219, 19,109257067871095, 9,5546285339355475, 4,7773142669677737 , 2.3886571334838869, 1.1943285667419434, 0.59716428337097172, 0.29858214168548586], //maxResolution: 78271.51695, projection: new OpenLayers.Projection("EPSG:900913"), //units: "meters", numZoomLevels: 20 } ; map = new OpenLayers.Map("basicMap", map_options); map.addControl(nouveau OpenLayers.Control.PanZoomBar()); map.addControl(nouveau OpenLayers.Control.LayerSwitcher()); var mapnik = new OpenLayers.Layer.OSM(); // var tilescache = new OpenLayers.Layer.TileCache(); tuiles = new OpenLayers.Layer.WMS("[email protected]", "tilecache/tilecache.cgi?",{ calques : 'osm', format : 'image/png', srs : 'EPSG:900913' }); map.addLayer(mapnik); map.addLayer(tuiles); map.setCenter(new OpenLayers.LonLat(8, 46.5) // Centre de la carte .transform( new OpenLayers.Projection("EPSG:4326"), // transformation de WGS 1984 new OpenLayers.Projection("EPSG:900913" ) // vers Projection Mercator Sphérique ), 8 // Niveau de zoom ); }

Dans le code OpenLayers essayez d'initialiser la variable tuilecacheBbox avec les coordonnées exactes que vous avez définies bbox dans le fichier de configuration TileCache.

var tilecacheBbox = new OpenLayers.Bounds(); tilecacheBbox.extend(654558.60577333, 5745163.8837113); tilecacheBbox.extend(1173307.4327978, 6075303.6111284) ;

Le problème est peut-être que la transformation de coordonnées que vous effectuez dans le code OpenLayers génère des valeurs qui diffèrent dans certaines décimales de la valeur bbox - Fichier de configuration TileCache - a été défini sur. Cette différence peut être suffisamment importante pour induire TileCache en erreur.


J'ai eu un problème similaire, en ajoutant

OpenLayers.DOTS_PER_INCH = 90.71428571428572;

a fait l'affaire pour moi.


Voir la vidéo: WMTS MapServer Configuracion