Bonjour,
la carte de recherche par défaut de geosource utilise le serveur wms de geosignal, et avec les paramêtres par défaut elle est affichée en WGS84, ce qui fait une carte tout déformée/aplatie.
j'ai donc cherché comment afficher cette carte en autre chose que du WGS84 et avec une autre étendue, et voila la liste des modifications a faire (ca pourra servir a d'autres, et même peut-être être intégré plus proprement dans geosource même)
- modifier xml/map-server.xml, changer l'extent choisi pour la région que l'on veut afficher (avec des coordonnées dans le système de projection choisi, p.ex <northBL>2220000</northBL><southBL>1950000</southBL><eastBL>780000</eastBL><westBL>550000</westBL> dans mon cas, pour l'auvergne en L2E) - a priori, la valeur de l'attribut SRS du tag <extent> n'est utilisée nulle part, meme pas dans la requete WMS faite au serveur - un bug ? dans le doute, j'ai mis EPSG:27582
- modifier scripts/gn_search.js pour forcer OpenLayers a utiliser la projection choisie dans la requete WMS : pour cela, remplacer dans la fonction initMap() :
var options = {maxExtent:boundsTo, maxResolution:"auto"};
par
var options = {maxExtent:boundsTo, maxResolution:"auto", projection:'EPSG:27582'};
a partir de la, la carte affichée est dans la bonne projection, et avec la bonne étendue - j'ai choisi de garder le serveur WMS de geosignal, mais ca serait pareil avec un autre.
cependant il y'a un hic, les recherches géographiques ne fonctionnement plus ! en effet, dans les thésaurus geonetwork/geosource, l'etendue des communes/départements/etc est enregistrée en WGS84, et lorsqu'on fait 'calculer l'emprise' a partir des mots clefs (ou qu'on la renseigne a la main), les valeurs de longitude/latitude sont en WGS84 et rien d'autre.
pour cela, il faut convertir a la volée les coordonnées de la boite englobante sur la carte de recherche de notre système de coordonnées choisies en WGS84, il faut faire 3 modifications :
- télécharger proj4js.js ici http://trac.osgeo.org/proj4js/wiki/Download
(d'ailleurs, c'est étonnant qu'il ne soit pas bundlé avec geosource ou openlayers, des explications ici : http://trac.openlayers.org/wiki/Documentation/Dev/proj4js), le mettre dans scripts/openlayers/ (j'utilise proj4js-compressed.js ici)
- modifier xsl/main-page.xsl pour l'inclure dans toutes les pages html générees : ajouter au dessus de la ligne incluant openlayers.js
<script type="text/javascript" src="{/root/gui/url}/scripts/openlayers/proj4js-compressed.js"/>
- enfin, faire une reprojection a la volée de la boite englobante dans scripts/gn_search.js, fonction ol_getURLselectedbbox(), remplacer la ligne complete 'return...' par :
//ajouter la projection Lambert 2 Etendue aux projections connues de proj4js
Proj4js.defs['EPSG:27582'] = "+title=NTF (Paris) / France II (deprecated) +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m";
// créer une boite englobante OpenLayers avec les coordonnées de l'étendue sélectionnée dans la fenetre de recherche
var bounds = new OpenLayers.Bounds($('westBL').value,$('southBL').value,$('eastBL').value,$('northBL').value);
// convertir cette boite de L2E vers WGS84
bounds.transform(new OpenLayers.Projection("EPSG:27582"),new OpenLayers.Projection("EPSG:4326"));
// renvoyer la chaine de caractéres qui sera passée au module de recherche de geosource avec les coordonnées transformées de cette boite
return "northBL="+bounds.top+"&eastBL="+bounds.right+"&southBL="+bounds.bottom+"&westBL="+bounds.left;
Voila, c'est pas super propre, ni intégré, mais ca marche pour moi.
J'aimerais avoir des commentaires sur la forme et la manière, savoir si certains de ces fixes peuvent être intégrés, savoir si on peut récupérer la valeur du SRS passée dans map-server.xml pour éviter de mettre en dur EPSG:27582, etc...
--
Cdlt,
Landry Breuil
Administrateur de données du CRAIG