Skip to Content

Nous adressons toutes nos pensées à la famille de notre ami Jérôme !

http://www.forumsig.org/showthread.php/43488-Disparition-de-Phoenix

Proj4js: la conversion de coordonnées xy (points) pour les nuls (Proj4 en javascript et le site spatialreference.org)


Proj4 est la bibliothèque de projections cartographiques (en langage C) utilisée par la plupart des logiciels sig Open Source, surtout pour les conversions de coordonnées.

Seule, elle est très difficile à appréhender avec des notations qui peuvent paraître ésotériques aux non-spécialistes, du genre, pour la projection Google (EPSG: 90093, 3785 puis 3857):

 +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 +wktext  +no_defs

Comment utiliser ces notations ?

Il y a des implémentations de la bibliothèque en Python (Pyproj) et autres langages, mais la plus simple est Proj4js, en javascript, en combinaison avec le site spatialreference.org/.

Le site de démonstration www.proj4js.org/ montre son utilisation : vous choisissez un CRS (projection) source, vous rentrez vos coordonnées x,y puis, après le choix d'un CRS de destination, vous avez le résultat dans la nouvelle projection.

Dans cette démonstration, les projections sont limitées, mais vous pouvez le faire sur votre PC ou sur votre site avec toutes les projections désirées.

Téléchargez Proj4xx.zip à trac.osgeo.org/proj4js/wiki/Download et vous vous retrouvez avec un dossier où il y a comme éléments essentiels, un fichier index.html et un dossier nommé lib. Dans ce dernier, vous trouverez la librairie proprement dite proj4js.js et un dossier nommé defs avecdes fichiers nommés EPSGxxxx.js.

Dans le fichier index.html, l'important est :

  <script src="lib/proj4js.js"></script>
  <script src="lib/defs/EPSG27200.js"></script>
  <script src="lib/defs/EPSG4272.js"></script>
  <script src="lib/defs/EPSG54009.js"></script>

Ces éléments appellent les scripts javascript. Ceux nommés EPSGxxxx.js ne sont en fait que les définitions Proj4 des projections. Par exemple, le fichier nommé EPSG4272.js est :

Proj4js.defs["EPSG:4272"] = "+title=NZGD49 +proj=longlat +ellps=intl +datum=nzgd49 +no_defs ";

Il suffit donc de créer vos propres fichiers EPSGxxxx.js, de les placer dans le dossier lib, de les introduire dans le fichier index.html,

<script src="lib/defs/EPSGxxxx.js"></script>

et le tour est joué. Facile, mais où trouver ou comment faire pour créer un tel fichier ?

C'est là qu'intervient le site spatialreference.org/. Pour chaque projection comme spatialreference.org/ref/epsg/2154/ vous obtenez la fenêtre suivante (partielle, il manque la carte):

En cliquant sur l'un des éléments, on obtient une définition de la projection dans le format désiré et il y a bien le format Proj4js:

Proj4js.defs["EPSG:2154"] = "+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 
+x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs";

Il suffit alors de copier cette définition et de la sauver dans un fichier nommé EPSG2154.js et le tour est joué ! Les résultats sont les mêmes que ceux de Proj4 mais vous n'aurez plus à mettre les mains dans le cambouis. Les transformations sont fiables vis à vis de solutions non libres.

Le site http://spatialreference.org/  permet de rechercher les codes et paramètres d'un très grand nombre de projections. Son principe est basé sur le volontariat: chacun est libre d' y rentrer une nouvelle projection. Le contrôle est fait par les utilisateurs et l'interface basée sur Openlayers. Parti de rien il y a quelques années il compte à présent un très grand nombre de projections et ne cesse de s'accroître. 

Du fait de sa conception, il est parfois nécessaire de vraiment "fouiller" pour trouver ce que l'on cherche. Une même projection peut avoir plusieurs variantes suivant les personnes qui l'introduisent. Par exemple, le Lambert belge 1972 a deux définitions :

spatialreference.org/ref/epsg/31370/

spatialreference.org/ref/sr-org/epsg31370-correct-datum-shift/

Cette dernière a été ajustée pour obtenir des meilleures transformations avec la projection Google/Mercator (environ 30m d'écart avec la première, de l'ordre de quelques mètres pour la seconde). Elle est cependant basée sur de savants calculs exposés par ailleurs.


Site officiel : Proj4
Site officiel : Pyproj
Site officiel : Proj4js
Site officiel : Spatialreference.org

Commentaires

Problème de décalage des coordoonées

Bonjour,

J'ai pris connaissance d'une application de conversion de coordonnées géographiques (http://twcc.free.fr/).
Dans le but de faire une comparaison entre cette dernière et les srcipts 'PROJ4JS", j'ai fait un test de conversion du système" Merchich/ Lambert nord" vers google maps projection, et je trouve ainsi un décalage d'environ 300 m.
Par contre en prenant le même système de coordonées \"Merchich/Lambert nord\" en le convertissant vers WGS84, ca marche nickel.COORDONNEES EXACTES!!

Dans PROJ4JS, j'ai utilisé plusieurs code EPSG faisant référence à la projection de google maps projection à savoir : 3857, 3875, 900913,..
J'ai pris même les références marqués sur l'icone help à droite de la projection de l'application"twcc.free.fr" et en créant un nouveau fichier.js mais ca donne toujours un décalage.
(GOOGLE : +title=Google Maps projection +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)
NB: les coordonées de la zone nord du maroc ont pour EPSG:26191 : +title=Merchich / Lambert nord +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs

A VOTRE AVIS, D'OU VIENT LE PROBLEME, SACHANT BIEN QUE LE VRAI RESULTAT EST CELUI DE CETTE APPLICATION en ligne. coordonnées superposabale sur BING MAPS testé dans arcgis.

SI non est ce qu'il y d'autres utilitaires permettant ainsi de faire la conversion des coordonnées ou de s'assurer davantage.
Je vous remercie d'avance de votre collaboration.

Cordialement,

Limpide!

C'est si simple avec ces explications. Merci beaucoup.

Poster un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.