Composantes d’un système de références par coordonnées

Les systèmes de références spatiales par coordonnées fournissent les informations nécessaires pour faire correspondre des coordonnées numériques à des positions dans le monde réel. Dans Apache SIS, ils sont pratiquement tous représentés par des classes dont le nom se termine en CRS (l’abréviation de Coordinate Reference System en anglais). Ces objets contiennent:

Ces systèmes sont décrits par la norme ISO 19111 (Referencing by Coordinates), qui remplace en grande partie une norme plus ancienne mais encore utilisée pour certains aspects, OGC 01-009 (Coordinate Transformation Services). Ces normes sont complétées par deux autres standards définissant des formats d’échanges: ISO 19136 et 19162 pour respectivement le Geographic Markup Language (GML) — un format XML précis mais verbeux — et le Well-Known Text (WKT) — un format texte plus facile à lire par les humains.

Géoïde et ellipsoïde

La surface topographique réelle étant difficile à représenter mathématiquement, elle n’est pas utilisée directement en cartographie. Une autre surface un peu plus facilement utilisable est le géoïde, une surface sur laquelle la force gravitationnelle a partout la même valeur (surface équipotentielle du champ de gravité terrestre). Cette surface est en tout point perpendiculaire à la direction indiquée par un fil à plomb (verticale du lieu). Le géoïde coïnciderait avec le niveau moyen des mers s’il n’y avait ni vent ni courants marins permanents comme le Gulf Stream.

Tout en étant nettement plus lisse que la surface topographique, le géoïde présente des creux et des bosses liés à l’inégale distribution des masses de la Terre. Pour une utilisation mathématiquement plus aisée, le géoïde est donc approximé par un ellipsoïde. Cette « figure de la Terre » est représentée dans GeoAPI par l’interface Ellipsoid, qui constitue un élément fondamental des systèmes de références de type GeographicCRS et ProjectedCRS. Plusieurs dizaines d’ellipsoïdes sont couramment employés pour la définition de référentiels. Certains offrent une excellente approximation pour une région précise au détriment des régions pour lesquelles le référentiel n’a pas été conçu, et d’autres offrant un compromis pour l’ensemble de la planète.

Exemple: la base de données géodétiques EPSG définit entre autres les ellipsoïdes « WGS 84 », « Clarke 1866 », « Clarke 1880 », « GRS 1980 » and « GRS 1980 Authalic Sphere » (une sphère de même surface que l’ellipsoïde GRS 1980). Un ellipsoïde peut être utilisé en divers endroits de la planète ou peut être très spécifique à une région précise. Par exemple au début du XXe siècle aux États-Unis, l’état du Michigan utilisait pour ses cartes un ellipsoïde basé sur l’ellipsoïde « Clarke 1866 » mais auquel la longueur des axes a été allongée de 800 pieds. Cette modification visait à tenir compte du niveau moyen de l’état au dessus du niveau de la mer.

Les principales propriétés que l’on peut obtenir d’un ellipsoïde sont montrées ci-dessous. La longueur de l’axe semi-majeur est parfois appelée rayon équatorial et la longueur de l’axe semi-mineur rayon polaire. Le facteur d’aplatissement inverse (inverse flattening factor en anglais) peut sembler superflu puisqu’il se calcule à partir des autres propriétés, mais plusieurs définitions d’ellipsoïdes fournissent ce facteur plutôt que la longueur de l’axe semi-mineur.

Unit<Length> units = ellipsoid.getAxisUnit();
double semiMajor   = ellipsoid.getSemiMajorAxis();          // Avec les unités de mesures ci-haut.
double semiMinor   = ellipsoid.getSemiMinorAxis();          // Avec les unités de mesures ci-haut.
double ivf         = ellipsoid.getInverseFlattening();      // = semiMajor / (semiMajor - semiMinor).

Référentiel géodésique

Pour définir un système géodésique dans un pays, l’état met en place un ellipsoïde de référence qui épouse au mieux sur l’ensemble du pays la forme locale du géoïde. L’écart entre cet ellipsoïde de référence et les creux et les bosses du géoïde reste généralement inférieur à 100 mètres. Les paramètres qui permettent de lier un Ellipsoid à la surface de la Terre (par exemple la position de son centre) sont représentées par un objet de type GeodeticDatum, que l’on traduit en français par « référentiel géodésique ». Plusieurs GeodeticDatum peuvent utiliser le même Ellipsoid, mais centré ou orienté différemment.

Avant l’avènement des satellites, les mesures géodésiques se déroulaient exclusivement à la surface de la terre. En conséquence, deux îles ou continents qui ne sont pas à portée visuelle l’un de l’autre n’étaient pas rattachés géodésiquement entre eux. Ainsi les référentiels North American Datum 1983 (NAD83) et European Datum 1950 (ED50) sont indépendants l’un de l’autre: leurs ellipsoïdes de référence ont des centres distincts et des dimensions différentes. Une même coordonnée géographique correspondra à des positions différentes dans le monde réel selon que la coordonnée se réfère à l’un ou l’autre de ces référentiels.

L’invention du GPS a précipité la création d’un système géodésique mondial, nommé WGS84. L’ellipsoïde de référence est alors unique et centré au centre de gravité de la terre. Les GPS donnent à tout moment la position absolue du récepteur rapportée à ce système géodésique. Mais WGS84 étant un système mondial, il peut diverger significativement des systèmes locaux. Par exemple l’écart entre WGS84 et le système européen ED50 est de l’ordre de 150 mètres, et l’écart moyen par rapport au système de l’île de la Réunion 1947 est de 1,5 kilomètres. Il ne faut donc pas rapporter aveuglement des positions GPS sur une carte. Des correspondances avec les systèmes régionaux peuvent être nécessaires et sont représentées dans GeoAPI sous forme d’objets de type Transformation.

Les généralisation de l’usage du système WGS84 tend à réduire le besoin d’utiliser les objets Transformation pour les données récentes, mais ne l’élimine pas complètement. La Terre bouge sous l’effet de la tectonique des plaques et de nouveaux systèmes sont définis chaque année pour en tenir compte. Par exemple bien que le référentiel NAD83 a été défini à l’origine comme pratiquement équivalent à WGS84, il existe maintenant (en 2016) un écart d’environ 1.5 mètres entre ces deux systèmes. Le référentiel Japanese Geodetic Datum 2000 était aussi défini comme pratiquement équivalent à WGS84, mais le nouveau référentiel Japanese Geodetic Datum 2011 s’en écarte. Le référentiel WGS84 lui-même, sensé correspondre à une définition à un instant donné, a subit des révisions dues notamment à l’amélioration de la précision des instruments. Ainsi il existe aujourd’hui au moins six versions de WGS84. En outre beaucoups de bordures ont été définies légalement dans des référentiels plus anciens, par exemple NAD27 aux États-Unis. Mettre à jour dans un nouveau référentiel peut obliger à transformer des lignes droites ou des formes géométriques simples en des formes plus irrégulières si on ne veut pas que des parcelles de terrain changent de propriétaire.

Contrairement aux autres types d’objets introduits dans cette section, il n’y a pas beaucoup d’information utile que l’on peut extraire d’une instance de Datum à part son nom. Traduire en langage de programmation comment un référentiel est lié à la Terre est difficile. On se contente en général de considérer que si deux référentiels ont des noms différents, alors la même position sur la Terre aura des coordonnées différentes selon ces deux référentiels (même si l’ellipsoïde est identique) et la transformation des coordonnées d’un référentiel à l’autre nécessitera l’utilisation d’une base de données.

Systèmes de coordonnées

Un système de coordonnées (CS) définit l’ensemble des axes couvrant un espace de coordonnées. Chaque axe définit sa direction approximative (nord, sud, est, ouest, haut, bas, bâbord, tribord, passé, futur, etc.), ses unités de mesures, les valeurs minimales et maximales permises et ce qui se passe lorsqu’on atteint ces extremums. Par exemple dans le cas de la longitude, après +180° on revient à −180°. Mais de telles boucles peuvent aussi exister dans l’axe du temps. Par exemple dans des données climatologiques de la température normale, après le mois de décembre on revient au mois de janvier. Ces mois ne sont associés à aucune année en particulier. Les axes ayant ce genre de comportement sont reconnaissables à la propriété RangeMeaning.WRAPAROUND.

Les principales propriétés que l’on peut obtenir d’un système de coordonnées sont montrées ci-dessous. Les axes sont numérotés de 0 à cs.getDimension()-1 inclusivement:

CoordinateSystem cs = crs.getCoordinateSystem();
CoordinateSystemAxis secondAxe = cs.getAxis(1);            // Pour un système géographique, c’est habituellement la longitude géodétique.
String        abréviation = secondAxe.getAbbreviation();  // Pour l’axe des longitudes, c’est habituellement "λ", "L" ou "lon".
AxisDirection direction   = secondAxe.getDirection();     // Pour l’axe des longitudes, c’est habituellement EAST ou parfois WEST.
Unit<?>       unités      = secondAxe.getUnit();          // Pour l’axe des longitudes, c’est habituellement Units.DEGREE.
double        minimum     = secondAxe.getMinimumValue();  // Pour l’axe des longitudes, c’est habituellement −180° ou parfois 0°.
double        maximum     = secondAxe.getMaximumValue();  // Pour l’axe des longitudes, c’est habituellement +180° ou parfois 360°.
RangeMeaning  auxBouts    = secondAxe.getRangeMeaning();  // Pour l’axe des longitudes, c’est WRAPAROUND.

En plus de la définition des axes, une autre caractéristique importante des systèmes de coordonnées est leur type (CartesianCS, SphericalCS, etc.). Ce type implique un ensemble de règles mathématiques pour calculer des quantités géométriques telles que les angles, distances et surfaces. Les divers sous-types de CS ne définissent habituellement pas de nouvelle méthodes Java comparativement au type parent, mais sont néanmoins importants. Par exemple plusieurs calculs ou associations ne sont valides qu’avec des axes perpendiculaires entre eux. Dans ce cas, le système de coordonnées sera restreint au type CartesianCS dans la signature des méthodes.

Les systèmes de coordonnées sont des concepts mathématiques; ils ne contiennent aucune information indiquant où sur la Terre se trouve leur origine. En conséquence, les systèmes de coordonnées seuls ne permettent pas de décrire une position terrestre; ils doivent être combinés avec un référentiel. Ces combinaisons forment les systèmes de références des coordonnées décrits dans les sections suivantes.

Ordre des axes

L’ordre des axes est spécifié par l’autorité (typiquement une agence nationale) qui définit le système de référence des coordonnées (CRS). L’ordre dépend du type de CRS ainsi que du pays qui l’a définit. Dans le cas des CRS de type géographique, l’ordre (latitude, longitude) est utilisé par les géographes et les pilotes depuis des siècles. Toutefois des développeurs de logiciels tendent à préférer l’ordre (x, y) pour tous systèmes de coordonnées. Ces différentes pratiques entraînent des définitions contradictoires de l’ordre des axes pour pratiquement tous les CRS de type GeographicCRS, pour certains ProjectedCRS dans l’hémisphère sud (Afrique du Sud, Australie, etc.) et pour certaines projections polaires entre autres.

Les standards OGC récents demandent d’ordonner les axes tel que spécifié par l’autorité qui a définit le CRS. Mais des standards OGC plus anciens utilisaient l’ordre (x, y) inconditionnellement, en ignorant les spécifications des autorités sur ce point. Beaucoup de logiciels continuent d’utiliser cet ordre (x, y), peut-être parce qu’une telle uniformisation rend l’implémentation et l’utilisation des CRS en apparence plus simple. Apache SIS supporte les deux conventions avec l’approche suivante: par défaut, SIS construit les CRS avec les axes dans l’ordre définit par l’autorité. Ces CRS sont construits par des appels à la méthode CRS.forCode(String), et l’ordre des axes effectif peut être vérifié après la création du CRS par un appel à System.out.println(crs). Mais si l’ordre (x, y) est désiré pour des raisons de compatibilité avec d’anciens standards OGC ou avec d’autres logiciels, alors les CRS peuvent être modifiés de manière à avoir la longitude en premier avec un appel à la méthode suivante:

CoordinateReferenceSystem crs = …;  // CRS obtenu de n’importe quelle façon.
crs = AbstractCRS.castOrCopy(crs).forConvention(AxesConvention.RIGHT_HANDED)

Parmi les anciens standards de l’OGC qui utilisaient un ordre des axes non-conforme, un standard influent était la version 1 du format Well Known Text (WKT). D’après ce format largement utilisé, les définitions WKT 1 sans éléments AXIS[…] explicites doivent être interprétés comme ayant ses axes dans l’ordre (longitude, latitude) ou (x, y). Dans la version 2 du format WKT, les éléments AXIS[…] ne sont plus optionnel et devrait contenir explicitement un sous-élément ORDER[…] pour rendre l’ordre voulu encore plus évident. Mais si les éléments AXIS[…] sont malgré tout omis dans une définition WKT 2, alors Apache SIS utilise l’ordre (latitude, longitude) par défaut. Pour résumer:

Pour éviter des ambiguïtés, les utilisateurs sont encouragés à toujours fournir explicitement les éléments AXIS[…] dans leurs WKT. Le format WKT sera présenté plus en détails dans les sections suivantes.

Systèmes géographiques

Il y a plusieurs sortes de latitudes et de longitudes. Deux sortes courantes que supporte Apache SIS sont les latitudes géodésiques et géocentriques. Ces deux types d’angles diffèrent légèrement dans la façon dont ils interceptent la surface de l’ellipsoïde. Sur la surface de la Terre, la différence entre ces deux types de latitudes varient de 0 à environ 20 km.

Lorsque les gens parlent de latitudes et de longitudes, ils sous-entendent généralement des latitudes géodésiques. Un système de référence des coordonnées utilisant de telles latitudes et longitudes est dit géographique et est représenté par l’interface GeographicCRS. Les systèmes utilisant les autres sortes de latitudes sont représentés par d’autres interfaces CRS.

Projections cartographiques

Les projections cartographiques représentent une surface courbe (la Terre) sur une surface plane (une carte ou un écran d’ordinateur) en contrôlant les déformations: on peut préserver les angles ou les surfaces, mais pas les deux à la fois. Les propriétés géométriques à conserver dépendent de l’objet d’étude et du travail à effectuer. Par exemple les pays plutôt allongés dans le sens Est-Ouest utilisent souvent une projection de Lambert, alors que les pays plutôt allongés dans le sens Nord-Sud préfèrent une projection de Mercator Transverse.

Cette section est incomplète. Voyez la version anglaise pour une version éventuellement plus complète.