Академический Документы
Профессиональный Документы
Культура Документы
Cet article explique comment manipuler les projections avec la librairie GeotoolKit. Un zip
contenant tous les exemples se trouve à la fin.
GeotoolKit - Géoréférencement par Johann Sorel
I - le B.A-BA.................................................................................................................................................................3
II - WKT (Well Knowned Text).....................................................................................................................................4
III - Stockage des projections......................................................................................................................................5
III-A - Derby/JavaDB (pour tout usage)................................................................................................................. 5
III-B - HSQL (pour tout usage).............................................................................................................................. 5
III-C - Microsoft Access (Windows uniquement)....................................................................................................5
III-D - PostgreSQL (pour serveur ou usage concurrent)....................................................................................... 5
III-E - Fichier de propriétés (pour applet ou micro-application)............................................................................. 6
IV - Cas d'utilisations................................................................................................................................................... 7
IV-A - Récupérer une projection à partir d'un identifiant....................................................................................... 7
IV-B - Récupérer une transformation entre deux projections................................................................................ 7
IV-C - Pour SIGiste chevronné.............................................................................................................................. 7
V - Ressources............................................................................................................................................................ 8
VI - Remerciements..................................................................................................................................................... 8
-2-
http://jsorel.developpez.com/tutoriels/java/geotoolkit-georeferencement/
GeotoolKit - Géoréférencement par Johann Sorel
I - le B.A-BA
Le coeur de la programmation SIG réside dans cette compréhension. Comprendre ce qu'est une projection et savoir
quand on peut se permettre de faire des opérations ou non dans certaines zones de celle-ci.
La Terre n'est pas plate contrairement à ce que montrent toutes les cartes. Une carte affiche une projection de la
Terre (nuance). Une projection est la description mathématique de comment ont doit transformer un point sur la Terre
en un point sur la carte.
Exemple de projections :
Il existe des milliers de projections, aucune n'est correcte à l'échelle de la planète. Chaque projection est, en général,
associée à une zone de validité dans laquelle on peut se permettre de faire des calculs avec les coordonnées sans
que les erreurs dues à la déformation ne soient trop grandes.
Actuellement, il existe une autorité qui maintient une liste de ces projections, connue sous le nom de EPSG (European
Petroleum Survey Group).
Les plus connues étant :
EPSG:4326 et EPSG:3395
-3-
http://jsorel.developpez.com/tutoriels/java/geotoolkit-georeferencement/
GeotoolKit - Géoréférencement par Johann Sorel
PROJCS[
"WGS 84 / World Mercator",
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"]],
UNIT["degree", 0.017453292519943295],
AXIS["Geodetic latitude", NORTH],
AXIS["Geodetic longitude", EAST],
AUTHORITY["EPSG","4326"]],
PROJECTION["Mercator (1SP)", AUTHORITY["EPSG","9804"]],
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["metre", 1.0],
AXIS["Easting", EAST],
AXIS["Northing", NORTH],
AUTHORITY["EPSG","3395"]
]
On trouve en général la projection dans un fichier *.prj comme c'est le cas pour les fichiers vectoriels shapefiles ou
encore les fichiers rasters world-image.
//Ecriture
String backToWkt = crs.toWKT();
-4-
http://jsorel.developpez.com/tutoriels/java/geotoolkit-georeferencement/
GeotoolKit - Géoréférencement par Johann Sorel
//Ecriture
File output = new File("sortie.prj");
PrjFiles.write(crs, output);
Comme indiqué précédemment il existe des milliers de projections. GeotoolKit doit donc pouvoir stocker une liste de
celles-ci ainsi que leurs descriptions détaillées.
Par défaut GeotoolKit tentera d'utiliser une base de données Derby/JavaDB à condition d'avoir les .jar : geotk-epsg
et derby dans le projet.
Si la base de données est inexistante celui-ci la créera automatiquement. Elle sera placée à l'endroit suivant :
Linux = /home/utilisateur/.geotoolkit.org/EPSG/version
Mac = /Users/utilisateur/Library/GeotoolKit.org/EPSG/version
Windows = C:\Documents and Settings\utilisateur\Application Data\Geotoolkit.org\EPSG\version
Cette base de données n'est accessible qu'à une seule application à la fois.
Donc si vous avez plus d'une application utilisant GeotoolKit en même temps il vous faudra utiliser une des solutions
qui suivent.
De la même façon que pour Derby/JavaDB, GeotoolKit se chargera de créer automatiquement la base de données
dans le même répertoire à condition d'avoir les .jar geotk-epsg et hsql dans le projet.
Attention, dans ce cas, à ne pas avoir le jar de derby présent auquel cas celui-ci sera utilisé en premier.
Il faut inclure les jars odbc et jdbc-odbc bridge dans votre projet.
1- Téléchargez la base Access EPSG depuis http://www.epsg.org et copier la ou vous le souhaitez.
2- Ouvrez le panneau de contrôle ODBC de Windows.
3- Cliquez sur Ajouter et sélectionnez : Microsoft Access Driver (*.mdb).
4- Nommez la source : EPSG.
5- Cliquez sur sélectionner et indiquez votre base EPSG_version.mdb.
6- Créez ou modifiez le fichier :
C:\Documents and Settings\utilisateur\Application Data\Geotoolkit.org\EPSG\DataSource.properties
pour qu'il contienne :
DataSource.properties
#
# Connection parameters to the EPSG database.
#
URL = jdbc:odbc:EPSG
Cette solution est dédiée au serveur ou à tout réseau afin d'avoir une base commune ou quand de multiples
connections simultanées sont nécessaires.
Il faut inclure les .jar postgresql et geotk-epsg dans le projet.
-5-
http://jsorel.developpez.com/tutoriels/java/geotoolkit-georeferencement/
GeotoolKit - Géoréférencement par Johann Sorel
1- Créer une base de données postgresql vide. Les lignes suivantes créent un rôle "Geotoolkit" et une base de
données "Referencing" en UTF-8 sur votre machine locale.
(À adapter selon vos besoins)
3- Nettoyage de la base :
DataSource.properties
#
# Connection parameters to the EPSG database.
#
URL = jdbc:postgresql://localhost/Referencing
user = Geotoolkit
password = *****
Pour diverses raisons il peut être intéressant d'avoir une version embarquée plus compacte :
- pas d'accès disque
- que quelques projections nécessaires
- réduire le nombre de fichier jar
- pour les applets java et javafx.
Cette fois il est nécessaire de renseigner toutes les projections dont on aura besoin dans un fichier nommé
epsg.properties.
Placez ensuite celui-ci dans votre projet au chemin suivant :
org\geotoolkit\referencing\factory\epsg\epsg.properties.
Chaque projection doit être sur une seule ligne :
-6-
http://jsorel.developpez.com/tutoriels/java/geotoolkit-georeferencement/
GeotoolKit - Géoréférencement par Johann Sorel
IV - Cas d'utilisations
La majeure partie du temps la projection sera lue automatiquement avec les différents fichiers SIG. Mais il arrive de
vouloir obtenir une projection directement, souvent à partir d'un code du type EPSG:XXXX.
Voici comment procéder :
Bien souvent les données sont des projections différentes, il faut donc en reprojeter l'une ou l'autre pour faire notre
travail sereinement. Voici comment faire pour obtenir cette transformation mathématique et l'utiliser :
Cette opération demande à GeotoolKit de disposer d'énormément d'informations ainsi que dans certains cas de grilles
de transformations. Deux types d'erreurs surviennent régulièrement.
Type : EPSG:XXX Not found...
Erreur classique quand vous avez mal configuré votre source de données pour les projections.
Type : Missing Bursa Wolf... Les paramètres Bursa-Wolf sont des valeurs permettant de définir la transformation
vers un système neutre. Il est possible de forcer à trouver une transformation au prix d'une perte de précision plus
ou moins conséquente, pour cela il faut exécuter le code suivant au démarrage de votre application :
Hints.putSystemDefault(Hints.LENIENT_DATUM_SHIFT, Boolean.TRUE);
Contrairement à la librairie Proj4, GeotoolKit va beaucoup plus loin dans la définition et l'exactitude de celle-ci. Mais
surtout elle ne se limite pas à deux dimensions.
Vous pouvez construire des projections avec autant d'axes que vous voulez. Voici par exemple une projection à
quatre dimensions :
-7-
http://jsorel.developpez.com/tutoriels/java/geotoolkit-georeferencement/
GeotoolKit - Géoréférencement par Johann Sorel
verticalAxis = CRS.getVerticalCRS(crs4D);
temporalAxis = CRS.getTemporalCRS(crs4D);
Je vous invite à explorer la javadoc pour ceux qui veulent aller plus loin encore et créer de toutes pièces les projections
et formules mathématiques.
V - Ressources
VI - Remerciements
-8-
http://jsorel.developpez.com/tutoriels/java/geotoolkit-georeferencement/