Suite

GeoTools CRS.getAxisOrder(CRS.getAxisOrder(“EPSG:4326”)) renvoie EAST_NORTH (LON_LAT)

GeoTools CRS.getAxisOrder(CRS.getAxisOrder(“EPSG:4326”)) renvoie EAST_NORTH (LON_LAT)


Tout est dans le titre, avec GeoTools si je fais :

Ordre AxisOrder = CRS.getAxisOrder(CRS.getAxisOrder("EPSG:4326"));

Il renvoie EAST_NORTH (= LON_LAT), mais EPSG:4326 est défini comme ordonnant d'abord la latitude puis la longitude, comme indiqué ici : http://spatialreference.org/ref/epsg/wgs-84/gml/

Alors, que se passe-t-il ici ? Est-ce que je fais quelque chose de mal ?


Pour être honnête, EPSG:4326 n'est pas vraiment bien défini du tout, selon la version de WMS oe lorsque votre CRS a été défini, vous l'utilisez peut être dans les deux sens. La déclaration définitive pour GeoTools est à http://docs.geotools.org/latest/userguide/library/referencing/order.html

Ainsi, vous pourrez peut-être vous en sortir avec :

Conseils conseils = new Hints(Hints.FORCE_LONGITUDE_FIRST_AXIS_ORDER, Boolean.FALSE); CRSAuthorityFactory factory = ReferencingFactoryFinder.getCRSAuthorityFactory("EPSG", astuces); CoordinateReferenceSystem crs = factory.createCoordinateReferenceSystem("EPSG:4326");

En général, si vous écrivez une application qui accepte les entrées de l'utilisateur, vous devez ajouter un tas de vérifications autour de l'utilisation d'EPSG:4326 et finissez toujours par espérer le meilleur.

si vous voulez être absolument certain de l'ordre des axes, utilisez

CoordinateReferenceSystem crs = factory.createCoordinateReferenceSystem("urn:x-ogc:def:crs:EPSG:4326");

ce qui vous donnera NORD_EST pour l'ordre des axes.


La nouvelle version de GeoTools (11.0) aCRS.decode(string epsgCode,boolean longitudeFirst)par lequel vous pouvez créer votre système de référence de coordonnées avec l'ordre des axes souhaité.

CoordinateReferenceSystem crs = CRS.decode("EPSG:4326",false);

Ensuite, il aura lat,lon ordre.
Votre problème est décrit en détail dans le [guide d'utilisation de geotools pour l'ordre des axes].