Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Thu 10 July 2008 13:39

Lionel B
Participant actif
Lieu: Macon
Date d'inscription: 5 Sep 2005
Messages: 83

[Openlayers] problème de décalage 900913

Bonjour
Je souhaite mettre en place un serveur tilecache pour ajouter des couches initialement en L2E dans OpenLayers sur fond google.
Je me suis inspiré de ce poste http://georezo.net/forum/viewtopic.php?pid=101483 pour paramétrer comme cela est conseillé, et la partie cliente, et la partie mapserver.

Je demande donc à Mapserver de proposer ces couches dans la projection 900913, et je les appelle avec OpenLayers. Le fond Google est bien chargé avec les options conseillées ('sphericalMercator': true). Certaines de ces couches correspondent à des limites administratives et on peut voir clairement qu'elles ne sont pas cohérentes avec les limites proposées sur le fond Google.
Avec une interrogation simple du serveur WMS, on peut ajouter le paramètre "repoject=true" aux layers et ceux ci se retrouvent ainsi callés. Cette option empêche malheureusement l'utilisation du serveur tilecache qui renvoie un message d'erreur :

Code:

An error occurred: Current x value 475744.063981 is too far from tile corner x 469629.100900

Dans sa documentation sur OpenLayers, Yves Jacolin évoque un décalage pour les zooms importants. Suis-je victime de ce décalage ou ai-je manqué une étape dans le paramétrage de mon application ? Peut on obtenir un changement de projection satisfaisant pour ne pas avoir à passer l'option de reprojection ?

Exemple ci-joint

Merci bien


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#2 Thu 10 July 2008 14:08

gde
Participant occasionnel
Date d'inscription: 8 Oct 2007
Messages: 18

Re: [Openlayers] problème de décalage 900913

C'est un problème d'arrondi entre TileCache et OpenLayers. Il faut arrondir un peu ces chiffres (éviter trop de
chiffres après la virgule conduisant à des imprécisions) pour que les Tiles soient appelées et calée correctement par
OpenLayers.

Hors ligne

 

#3 Thu 10 July 2008 14:44

Lionel B
Participant actif
Lieu: Macon
Date d'inscription: 5 Sep 2005
Messages: 83

Re: [Openlayers] problème de décalage 900913

Merci pour cette réponse. Les chiffres à arrondir sont ceux de déclaration des résolutions ?
En arrondissant les résolutions autant coté OL que tilecache, ca ne permet pas d'éviter le message d'erreur.

Dernière modification par Lionel B (Thu 10 July 2008 14:53)

Hors ligne

 

#4 Thu 10 July 2008 15:03

gde
Participant occasionnel
Date d'inscription: 8 Oct 2007
Messages: 18

Re: [Openlayers] problème de décalage 900913

oui, mais il faut qu'ils soit bien choisi par rapport à la grille de TileCache (j'ai plus en tête exactement)

L'autre point, c'est qu'il y a/avait un bug ou plutôt une incohérence entre la manière d'arrondir dans TileCache et dans OpenLayer (une fois c'est avec un ceil et une fois avec un floor), mais il me semble bien que cela à été corrigé dans les dernières versions. (Mes souvenirs sont un peu ancien là...)

Hors ligne

 

#5 Thu 10 July 2008 16:19

Lionel B
Participant actif
Lieu: Macon
Date d'inscription: 5 Sep 2005
Messages: 83

Re: [Openlayers] problème de décalage 900913

Pour simplifier les problèmes de résolution, j'ai déclaré exactement le meme tableau dans OL et dans Tilecache. Avec cette méthode, quand je n'ai pas de problème de projections comme par exemple un affichage en L2E dans OL avec un tilecache en L2E, ca fonctionne très bien.

Hors ligne

 

#6 Thu 10 July 2008 19:42

gde
Participant occasionnel
Date d'inscription: 8 Oct 2007
Messages: 18

Re: [Openlayers] problème de décalage 900913

C'est un problème d'arrondi entre TileCache et OpenLayers. Il faut arrondir un peu ces chiffres (éviter trop de
chiffres après la virgule conduisant à des imprécisions) pour que les Tiles soient appelées et calée correctement par
OpenLayers.

Hors ligne

 

#7 Fri 11 July 2008 08:55

Lionel B
Participant actif
Lieu: Macon
Date d'inscription: 5 Sep 2005
Messages: 83

Re: [Openlayers] problème de décalage 900913

Bonjour,
dans le fichier de config de tilecache, j'ai mis les résolutions suivantes :
resolutions= 156543, 78271, 39135, 19567, 9783, 4891, 2445, 1222, 611, 305, 152, 76, 38, 19, 9.5, 4.7, 2.38, 1.19, 0.59, 0.298
J'ai imposé exactement la même suite de résolutions dans OL.
J'ai essayé en enlevant tous les chiffres après la virgule.
Rien à faire.
J'ai le sentiment que le décalage vient de l'option reproject et que, quoi qu'on fasse, le problème sera toujours le même.
Si j'enlève cette option du Layers dans OL (option marquée à deprecated dans la doc d'ailleurs), tilecache fonctionne, mais ma couche n'est pas bien projetée.
La solution viendra probablement de l'amélioration de la reprojection à la volée par Mapserver (proj4) de L2E vers 900913, mais pour l'instant, le résultat est plutôt médiocre.
Et puis les performance en WMS untiled ne sont pas si mauvaises que ca ;-) .
Merci pour les pistes.

Hors ligne

 

#8 Fri 11 July 2008 11:09

gde
Participant occasionnel
Date d'inscription: 8 Oct 2007
Messages: 18

Re: [Openlayers] problème de décalage 900913

J'éviterais le WMS untiled si cela doit être utilisé dans un environnement chargé en production.

Sinon, oui, convertir le L2E vers Google est sans doute la solution, mais pourquoi est-ce médiocre ?

Hors ligne

 

#9 Fri 11 July 2008 14:28

Lionel B
Participant actif
Lieu: Macon
Date d'inscription: 5 Sep 2005
Messages: 83

Re: [Openlayers] problème de décalage 900913

gde a écrit:

J'éviterais le WMS untiled si cela doit être utilisé dans un environnement chargé en production.

Sinon, oui, convertir le L2E vers Google est sans doute la solution, mais pourquoi est-ce médiocre ?


Sur l'image que j'ai attaché lors de mon premier poste on voit bien le décalage entre la limite administrative sur le fond google et cette meme limite issue de mon serveur WMS.
Mon serveur WMS lit une couche en L2E (code EPSG:27572). J'ai pratiqué les modifications pour qu'il sache reprojeter dans le SRS:900913 (modifications selon le document de crschmidthttp://crschmidt.net/blog/311/using-til … ual-earth/).
Vu qu'un décalage est présent à toutes les échelles, je trouve que la reprojection à la volée faite par mon serveur WMS est médiocre.
La raison est sans doute celle donnée par Yves Jacolin dans sa documentation et sur ce poste : http://georezo.net/forum/viewtopic.php?id=54641.

Google utilise une projection déformée qui implique que les autres couches ne sont pas toujours bien superposée. Google utilise une projection Mercator en assumant que la terre est sphérique (ce qui est incorrect). Il s'ensuit que pour un zoom important un décalage entre le fond cartographique de Google et vos données.


J'espérais juste qu'à cette échelle (entre 1/100000 et 1/500000), on pouvait quand même obtenir un meilleurs résultat.
Une autre raison est que j'ai peut être manqué une étape dans la configuration de la projection EPSG:900913 sur mon serveur WMS, mais franchement, je n'y crois guère. J'ai refais la manipulation plusieurs fois et j'arrive toujours au même résultat.

Hors ligne

 

#10 Thu 04 September 2008 13:40

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9855
Site web

Re: [Openlayers] problème de décalage 900913

Lionel,

Je travaille en ce moment sur la même problématique que toi : fond google + couche WMS tuilé. J'ai eut ce problème de décalage entre le fond et mes WMS. Ce décalage est dû à la reprojection car la définition de la projection google mercator doit être faite en fonction de la projection source. Je m'explique mais je préviens que les systèmes de projection et de coordonnées ne sont pas ma spécialité je vais faire des approximations :$

Lorsque on reprojet avec Mapserver on se sert de GDAL-OGR. Or celui-ci a un soucis avec la gestion de la projection google Mercator, dû à sa manière de gérer les projections. Il y a une astuce qui a été proposé (+nadgrids=@null) mais cela fonctionne seulement pour les couches en WGS84 ! Pour gérer correctement cette problèmatique j'ai utilisé ces deux entrées dans proj4 :

Code:

# Google Mercator
<900913> +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 
+x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs <>
# Google Mercator
<54004> +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>

j'utilise la deuxième pour reprojeter mes couches lambert 2 étendue en Google Mercator.

Au sein de Postgis, j'utilise l'entrée suivante :

Code:

INSERT into spatial_ref_sys (srid, auth_name, auth_srid, proj4text, srtext) values (900913 ,'EPSG',900913,'GEOGCS["WGS 84", DATUM["World Geodetic System 
1984", SPHEROID["WGS 84", 6378137.0, 298.257223563,AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], NIT["degree",0.017453292519943295], AXIS["Longitude", EAST], AXIS["Latitude", NORTH],AUTHORITY["EPSG","4326"]], PROJECTION["Mercator_1SP"],PARAMETER["semi_minor", 6378137.0], 
PARAMETER["latitude_of_origin",0.0], PARAMETER["central_meridian", 0.0], PARAMETER["scale_factor",1.0], PARAMETER["false_easting", 0.0], PARAMETER["false_northing", 0.0],UNIT["m", 1.0], AXIS["x", EAST], AXIS["y", NORTH],AUTHORITY["EPSG","900913"]] |','+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m 
+nadgrids=@null +no_defs');

INSERT INTO spatial_ref_sys (srid, auth_name, auth_srid, srtext, proj4text) VALUES (54004, 'spatialreference.org', 54004, 'PROJCS["World_Mercator",GEOGCS["GCS_WGS_1984",DATUM["WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Mercator_1SP"],PARAMETER["False_Easting",0],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",0],PARAMETER["Standard_Parallel_1",0],UNIT["Meter",1],AUTHORITY["EPSG","54004"]]', '+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs ');

Voilà, j'espère que cela conviendra à ceux qui cherchent à faire la même chose, et ne choquera pas les pro de la projection smile

Y.
Ps : le décalage entre google et les couches WMS ne sont plus d'actualité, s'il apparait encore c'est qu'il y a un soucis dans la config d'OL.
PPS : si besoin je tiens à votre dispo un bout de code OL pour tester vos couches WMS sur un fond google avec une config correcte.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

Pied de page des forums

Powered by FluxBB