Author: desruisseaux
Date: Sat May 28 04:34:16 2016
New Revision: 1745833
URL: http://svn.apache.org/viewvc?rev=1745833&view=rev
Log:
Partial translation of the referencing chapter in the developer guide.
Opportunist update of the French language chapter.
Added:
sis/site/trunk/book/en/referencing.html
- copied, changed from r1743965, sis/site/trunk/book/fr/referencing.html
sis/site/trunk/book/math/
sis/site/trunk/book/math/PixelToGeographic.html
- copied, changed from r1743965, sis/site/trunk/book/fr/referencing.html
Modified:
sis/site/trunk/book/book.css
sis/site/trunk/book/en/body.html
sis/site/trunk/book/fr/referencing.html
sis/site/trunk/content/book/book.css
sis/site/trunk/content/book/en/developer-guide.html
sis/site/trunk/content/book/fr/developer-guide.html
Modified: sis/site/trunk/book/book.css
URL:
http://svn.apache.org/viewvc/sis/site/trunk/book/book.css?rev=1745833&r1=1745832&r2=1745833&view=diff
==============================================================================
--- sis/site/trunk/book/book.css (original)
+++ sis/site/trunk/book/book.css Sat May 28 04:34:16 2016
@@ -28,6 +28,7 @@
* selector replaced by 'body', and top margin of <h1> omitted.
*/
body > header > h1 {
+ font-family: sans-serif;
text-align: center;
background-color: #99AAFF;
border-top-color: #0000CC;
@@ -42,15 +43,18 @@ body > header > h1 {
}
body > h2 {
+ font-family: sans-serif;
margin-top: 60px;
border-bottom-style: solid;
border-bottom-width: 2px;
}
body > h3 {
- margin-top: 50px;
+ font-family: sans-serif;
+ margin-top: 50px;
}
body > h4 {
- margin-top: 30px;
+ font-family: sans-serif;
+ margin-top: 30px;
}
Modified: sis/site/trunk/book/en/body.html
URL:
http://svn.apache.org/viewvc/sis/site/trunk/book/en/body.html?rev=1745833&r1=1745832&r2=1745833&view=diff
==============================================================================
--- sis/site/trunk/book/en/body.html (original)
+++ sis/site/trunk/book/en/body.html Sat May 28 04:34:16 2016
@@ -44,6 +44,7 @@
<main>
<xi:include href="introduction.html"/>
<xi:include href="utility.html"/>
+ <xi:include href="referencing.html"/>
<xi:include href="geometry.html"/>
<xi:include href="coverage.html"/>
<xi:include href="xml.html"/>
Copied: sis/site/trunk/book/en/referencing.html (from r1743965,
sis/site/trunk/book/fr/referencing.html)
URL:
http://svn.apache.org/viewvc/sis/site/trunk/book/en/referencing.html?p2=sis/site/trunk/book/en/referencing.html&p1=sis/site/trunk/book/fr/referencing.html&r1=1743965&r2=1745833&rev=1745833&view=diff
==============================================================================
--- sis/site/trunk/book/fr/referencing.html (original)
+++ sis/site/trunk/book/en/referencing.html Sat May 28 04:34:16 2016
@@ -20,333 +20,318 @@
under the License.
-->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:xi = "http://www.w3.org/2001/XInclude">
<head>
- <title>Systèmes de références spatiales par coordonnées</title>
+ <title>Spatial reference systems</title>
<link rel="stylesheet" type="text/css" href="../book.css"/>
</head>
<body>
<header>
- <h1 id="Referencing">Systèmes de références spatiales</h1>
+ <h1 id="Referencing">Spatial reference systems</h1>
</header>
<p>
- Pour donner une position sur la Terre on peut utiliser des noms tels que
celui dâune ville ou une adresse postale
- â on parle alors de références spatiales par
<cite>identifiants</cite>Â â
- ou on peut donner des valeurs numériques valides dans un système de
coordonnées donné
- â on parle alors de références spatiales par
<cite>coordonnées</cite>.
- Chaque système implique des approximations telles que:
+ For locating a point on Earth one can use identifiers like city name or
postal address
+ â an approach known as <cite>spatial reference systems by
identifiers</cite>Â â
+ or use numerical values valid in a given coordinate system
+ â an approach known as <cite>spatial reference systems by
coordinates</cite>.
+ Each system implies approximations as:
</p>
<ul>
- <li>Le choix de la forme géométrique (géoïde, ellipsoïde,
<i>etc.</i>) utilisée comme approximation de la forme de la Terre.</li>
- <li>Le choix des propriétés géométriques (angles, distances,
<i>etc.</i>) à préserver lors de la représentation dâune carte sur une
surface plane.</li>
- <li>Les pertes de précision lorsque lâon doit transformer des
positions exprimées selon un système vers des positions exprimées selon un
autre système.</li>
+ <li>Choice of a figure of the Earth (geoid, ellipsoid, <i>etc.</i>) used
as an approximation of Earth shape.</li>
+ <li>Choice of geometric properties (angles, distances, <i>etc.</i>) to
be preserved when a map is shown on plane surface.</li>
+ <li>Lost of precision when a coordinates is transformed from one
referencing system to another system.</li>
</ul>
<p>
- En lâabsence dâindication contraire, la précision recherchée pour
les coordonnées sur la Terre est de 1 centimètre.
- Mais la maîtrise de cette précision nécessite le respect de certaines
conditions:
+ Unless otherwise specified, Apache SIS aims to represent coordinates on
Earth with an accuracy of one centimetre or better.
+ But the accuracy can be altered by various situations:
</p>
<ul>
- <li>Rester dans la zone de validité du système telle que donnée par
<code>ReferenceSystem.getDomainOfValidity()</code>.</li>
- <li>Savoir que les mesures de distances dans une projection
cartographique donnée ne sont vraies quâà certains endroits,
- appelés par exemple « parallèles standards ».</li>
- <li>Vérifier la précision des transformations de coordonnées, par
exemple avec
+ <li>Points should be inside the domain of validity as given by
<code>ReferenceSystem.getDomainOfValidity()</code>.</li>
+ <li>Distance measurements in a given map projection are true only is
some special locations,
+ named for instance âstandards parallelsâ.</li>
+ <li>Positional accuracy is reduced after coordinate transformations. The
new accuracy is described by
<code>CoordinateOperation.getCoordinateOperationAccuracy()</code>.</li>
</ul>
<p>
- Le module <code>sis-referencing</code> de Apache <abbr>SIS</abbr>
fournit une série de classes implémentant
- les différentes spécialisations de lâinterface
<code>ReferenceSystem</code> ainsi que leurs composantes.
- Ces implémentations permettent de stocker une description des systèmes
de références spatiales
- ainsi que leurs méta-données telles que la zone de validité.
- Toutefois ces objets nâeffectuent aucune opération sur les
coordonnées.
- Ces opérations sont le travail dâune autre famille de classes, dont
la racine est lâinterface <code>CoordinateOperation</code>.
- Ces classes seront discutées dans <a href="#CoordinateOperation">une
autre section</a>,
- mais nous citons ici deux spécialisations en rapport avec le sujet de
la précision des coordonnées:
+ The <code>sis-referencing</code> module provides a set of classes
implementing
+ different specializations of the <code>ReferenceSystem</code> interface,
together with required components.
+ Those implementations store spatial reference system descriptions,
together with metadata like their domain of validity.
+ However those objects do not perform any operation on coordinate values.
+ Those operations are performed by another family of types, with
<code>CoordinateOperation</code> as the root interface.
+ Those types will be discussed in <a href="#CoordinateOperation">another
section</a>,
+ but we mention here two sub-types related to the coordinate accuracy
topic:
</p>
<ul>
<li>
- <p>Les <strong>conversions</strong> de coordonnées sont entièrement
définies par une formule mathématique.
- Les conversions sâeffectueraient avec une précision infinie sâil
nây avait pas les inévitables
- erreurs dâarrondissements inhérents aux calculs sur des nombres
réels.</p>
- <div class="example"><p><b>Exemple:</b> les projections
cartographiques.</p></div>
- </li>
- <li><p>Les <strong>transformations</strong> de coordonnées sont
définies de manière empirique.
- Elles ont souvent des erreurs de quelques mètres qui ne sont pas dues
à des limites de la précision des ordinateurs.
- Ces erreurs découlent du fait que la transformation utilisée nâest
quâune approximation dâune réalité plus complexe.</p>
- <div class="example"><p><b>Exemple:</b> les changements de
référentiels tel que le passage de la
- <cite>Nouvelle Triangulation Française</cite> (<abbr>NTF</abbr>) vers
le
- <cite>Réseau Géodésique Français 1993</cite> (<abbr>RGF93</abbr>),
- même lorsque la méthode de projection cartographique (Lambert
conique conforme) ne change pas.</p>
+ <p>Coordinate <strong>conversions</strong> are fully determined by
mathematic formulas.
+ Those conversions would have an infinite precision if it was not for
the unavoidable rounding errors
+ inherent to floating-point calculations.</p>
+ <div class="example"><p><b>Example:</b> map projections.</p></div>
+ </li><li>
+ <p>Coordinate <strong>transformations</strong> are defined empirically.
+ They usually have a few meters error which is not caused by limitation
in computer accuracy.
+ Those errors exist because transformations are only approximations of
a more complex reality.</p>
+
+ <div class="example"><p><b>Example:</b> datum changes from
+ <cite>North American Datum 1927</cite> (<abbr>NAD27</abbr>) to
+ <cite>North American Datum 1983</cite> (<abbr>NAD83</abbr>),
+ even if the map projection method (e.g. Lambert Conformal or
Transverse Mercator) does not change.</p>
</div>
</li>
</ul>
- <h2 id="CRS_Components">Composantes dâun système de références par
coordonnées</h2>
+ <h2 id="CRS_Components">Components of a reference system by
coordinates</h2>
<p>
- 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 <abbr>SIS</abbr>,
- ils sont pratiquement tous représentés par des classes dont le nom se
termine en <abbr>CRS</abbr>
- (lâabréviation de <i>Coordinate Reference System</i> en anglais). Ces
objets contiennent:
+ Spatial reference systems by coordinates provide necessary information
for mapping numerical coordinate values
+ to real-world locations. In Apache <abbr>SIS</abbr>, most information is
contained (directly or indirectly) in
+ classes with a name ending in <abbr>CRS</abbr>, the abbreviation of
<i>Coordinate Reference System</i>.
+ Those objects contain:
</p>
<ul>
- <li>Un identifiant du référentiel (<i>datum</i> en anglais),
- qui indique entre autres quel ellipsoïde utiliser comme
approximation de la forme de la terre.</li>
- <li>Une description de chaque axe (nom, direction, unité de mesure,
limites).</li>
- <li>Parfois une liste de paramètres permettant de convertir les
coordonnées dâun autre système.
- Câest le cas notamment des projections cartographiques.</li>
+ <li>A <i>datum</i>, which specifies among other things which ellipsoid
to use as an Earth shape approximation.</li>
+ <li>A description for each axis: name, direction, units of measurement,
range of values.</li>
+ <li>Sometime a list of parameters. A well-known example is when the
<abbr>CRS</abbr> uses a map projection.</li>
</ul>
<p>
- Ces systèmes sont décrits par la norme <abbr>ISO</abbr> 19111
(<i>Referencing by Coordinates</i>),
- qui remplace en grande partie une norme plus ancienne mais encore
utilisée pour certains aspects,
- <abbr>OGC 01-009</abbr> (<i>Coordinate Transformation Services</i>).
- Ces normes sont complétées par deux autres standards définissant des
formats dâéchanges:
- <abbr>ISO</abbr> 19136 et 19162 pour respectivement
- le <cite>Geographic Markup Language</cite> (<abbr>GML</abbr>) â un
format <abbr>XML</abbr> précis mais verbeux â
- et le <cite>Well-Known Text</cite> (<abbr>WKT</abbr>) â un format
texte plus facile à lire par les humains.
- </p>
-
- <h3 id="Ellipsoid">Géoïde et ellipsoïde</h3>
- <p>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.
+ Those systems are described by the <abbr>ISO</abbr> 19111 standard
(<i>Referencing by Coordinates</i>),
+ which replaces for most parts the older <abbr>OGC 01-009</abbr> standard
(<i>Coordinate Transformation Services</i>).
+ Those standards are completed by two other standards defining exchange
formats:
+ <abbr>ISO</abbr> 19136 and 19162 respectively for the
+ <cite>Geographic Markup Language</cite> (<abbr>GML</abbr>) â a
<abbr>XML</abbr> format which is quite detailed but verbose â
+ and the <cite>Well-Known Text</cite> (<abbr>WKT</abbr>) â a text
format easier to read by humans.
+ </p>
+
+ <h3 id="Ellipsoid">Geoid et ellipsoid</h3>
+ <p>
+ Since the real topographic surface is difficult to represent
mathematically, it is not used directly.
+ A slightly more convenient surface is the geoid,
+ a surface where the gravitational field has the same value everywhere
(an equipotential surface).
+ This surface is perpendicular to the direction of a plumb line at all
points.
+ The geoid surface would be equivalent to the mean sea level if all
oceans where at rest,
+ without winds or permanent currents like the Gulf Stream.
</p><p>
- 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 <code>Ellipsoid</code>,
- qui constitue un élément fondamental des systèmes de références de
type <code>GeographicCRS</code> et <code>ProjectedCRS</code>.
- Plusieurs dizaines dâellipsoïdes sont couramment employés, certains
offrant une excellente approximation pour une région précise
- au détriment des régions pour lesquelles lâellipsoïde nâa pas
été conçu, et dâautres offrant un compromis pour lâensemble de la
planète.
- </p>
- <div class="example"><p><b>Exemple:</b>
- au début du XX<sup>e</sup> 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.</p>
+ While much smoother than topographic surface, the geoid surface still
have hollows and bumps
+ caused by the uneven distribution of mass inside Earth.
+ For more convenient mathematical operations, the geoid surface is
approximated by an ellipsoid.
+ This âfigure of Earthâ is represented in GeoAPI by the
<code>Ellipsoid</code> interface,
+ a fundamental component in coordinate reference systems of kind
<code>GeographicCRS</code> and <code>ProjectedCRS</code>.
+ Tenth of ellipsoids are commonly used for datum definitions.
+ Some of them provide a very good approximation for a particular
geographic area
+ at the expense of the rest of the world for which the datum was not
designed.
+ Other datums are compromises applicable to the whole world.
+ </p>
+ <div class="example"><p><b>Example:</b>
+ At the beginning of XX<sup>th</sup> century in <abbr>USA</abbr>, the
Michigan state used an ellipsoid based on the
+ âClarke 1866â ellipsoid but with axis lengths expanded by 800 feet.
+ This modification aimed to take in account the average state height
above mean sea level.</p>
</div>
- <h3 id="GeodeticDatum">Référentiel géodésique</h3>
+ <h3 id="GeodeticDatum">Geodetic datum</h3>
<p>
- 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 <code>Ellipsoid</code> à la
surface de la Terre (par exemple la position de son centre)
- sont représentées par un objet de type <code>GeodeticDatum</code>, que
lâon traduit en français par « référentiel géodésique ».
- Plusieurs <code>GeodeticDatum</code> peuvent utiliser le même
<code>Ellipsoid</code>, mais centré ou orienté différemment.
+ For defining a geodetic system in a country, a national authority
selects an ellipsoid matching closely the country surface.
+ Differences between that ellipsoid and the geoidâs hollows and bumps
are usually less than 100 metres.
+ Parameters that relate an <code>Ellipsoid</code> to the Earth surface
(for example the position of ellipsoid center)
+ are represented by instances of <code>GeodeticDatum</code>.
+ Many <code>GeodeticDatum</code> definitions can use the same
<code>Ellipsoid</code>,
+ but with different orientations or center positions.
</p><p>
- 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 <cite>North American Datum 1983</cite>
(<abbr>NAD83</abbr>) et
- <cite>European Datum 1950</cite> (<abbr>ED50</abbr>) 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.
+ Before the satellite era, geodetic measurements were performed
exclusively from Earth surface.
+ Consequently, two islands or continents not in range of sight from each
other were not geodetically related.
+ So the <cite>North American Datum 1983</cite> (<abbr>NAD83</abbr>) and
the <cite>European Datum 1950</cite> (<abbr>ED50</abbr>)
+ are independent: their ellipsoids have different sizes and are centered
at a different positions.
+ The same geographic coordinate will map different locations on Earth
depending on whether the coordinate
+ uses one reference system or the other.
</p><p>
- Lâinvention du <abbr title="Global Positioning System">GPS</abbr> a
précipité la création dâun système géodésique mondial,
- nommé <abbr title="World Geodetic System 1984">WGS84</abbr>.
- Lâellipsoïde de référence est alors unique et centré au centre de
gravité de la terre.
- Les <abbr>GPS</abbr> donnent à tout moment la position absolue du
récepteur rapportée à ce système géodésique.
- Mais <abbr>WGS84</abbr> étant un système mondial, il peut diverger
significativement des systèmes locaux.
- Par exemple lâécart entre <abbr>WGS84</abbr> et le système européen
<abbr>ED50</abbr> 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 <abbr>GPS</abbr>
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
<code>Transformation</code>
- (une classe dâopérations mentionnée dans lâ<a
href="#Referencing">introduction de ce chapitre</a>).
+ The <abbr title="Global Positioning System">GPS</abbr> invention implied
the creation of a
+ world geodetic system named <abbr title="World Geodetic System
1984">WGS84</abbr>.
+ The ellipsoid is then unique and centered at the Earth gravity center.
+ <abbr>GPS</abbr> provide at any moment the receptor absolute position on
that world geodetic system.
+ But since <abbr>WGS84</abbr> is a world-wide system, it may be differ
significantly from local systems.
+ For example the difference between <abbr>WGS84</abbr> and the European
system <abbr>ED50</abbr> is about 150 metres,
+ and the average difference between <abbr>WGS84</abbr> and the
<cite>Réunion 1947</cite> system is 1.5 kilometres.
+ Consequently we shall not blindly use <abbr>GPS</abbr> coordinates on a
map,
+ as transformations to the local system may be required.
+ Those transformations are represented in GeoAPI by instances of the
<code>Transformation</code> interface
+ (a kind of operation mentioned in <a href="#Referencing">this chapter
introduction</a>).
</p><p>
- Les généralisation de lâusage du système <abbr>WGS84</abbr> tend Ã
réduire le besoin dâutiliser
- les objets <code>Transformation</code> 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.
- Même le système <abbr>WGS84</abbr>, 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
<abbr>WGS84</abbr>, avec des écarts entre elles allant jusquâà 7
centimetres.
- En outre beaucoups de bordures ont été définies légalement dans des
référentiels plus anciens, par exemple <abbr>NAD27</abbr> aux Ãtats-Unis.
- Mettre à jour dans un nouveau référentiel obligerait à transformer
des lignes droites ou des formes géométriques simples en des formes beaucoup
plus irrégulières
- si on ne veut pas que des parcelles de terrain changent de propriétaire.
+ The <abbr>WGS84</abbr> ubiquity tends to reduce the need for
<code>Transformation</code> operations with recent data,
+ but does not eliminate it.
+ The Earth moves under the effect of plate tectonic and new systems are
defined every years for taking that fact in account.
+ For example while <abbr>NAD83</abbr> was originally defined as
practically equivalent to <abbr>WGS84</abbr>,
+ there is now (as of 2016) a 1.5 metres difference.
+ The <cite>Japanese Geodetic Datum 2000</cite> was also defined as
practically equivalent to <abbr>WGS84</abbr>,
+ but the <cite>Japanese Geodetic Datum 2011</cite> now differs.
+ Even the <abbr>WGS84</abbr> datum, which was a terrestrial model
realization at a specific time,
+ got revisions because of improvements in instruments accuracy.
+ Today, at least six <abbr>WGS84</abbr> versions exist.
+ Furthermore many borders were legally defined in legacy datums, for
example <abbr>NAD27</abbr> in <abbr>USA</abbr>.
+ Updating data to the new datum would imply transforming some straight
lines or simple geometric shapes
+ into more irregular shapes, if the shapes are large enough.
</p>
<article>
<header>
- <h1>Bibliothèques de type « early binding » versus « late
binding »</h1>
+ <h1>âEarly bindingâ versus âlate bindingâ implementations</h1>
</header>
<p>
- Le caractère universel du système <abbr>WGS84</abbr> rend tentante
lâidée de lâutiliser comme système pivot,
- afin de simplifier lâimplémentation dâune bibliothèque de
transformation de coordonnées.
- La transformation dâune coordonnée dâun référentiel
<var>A</var> vers un référentiel <var>B</var>
- pourrait se faire en transformant dâabord de <var>A</var> vers
<abbr>WGS84</abbr>, puis de <abbr>WGS84</abbr> vers <var>B</var>.
- Il suffirait ainsi de stocker dans chaque objet
<code>GeodeticDatum</code> les informations nécessaires à la transformation
vers <abbr>WGS84</abbr>.
- Cette approche était encouragée dans la version 1 du format
<abbr>WKT</abbr>, qui définissait un élément <code>TOWGS84</code>
remplissant ce rôle.
- </p><p>
- Cette approche est désignée par <abbr>EPSG</abbr> sous le nom de «Â
early binding »,
- car elle associe des informations sur la transformations de
coordonnées très tôt dans la définition des objets géodésiques.
- Bien que <abbr>EPSG</abbr> reconnaisse que cette approche soit
couramment employée, elle nâest pas recommandée pour plusieurs raisons:
+ Because of the <abbr>WGS84</abbr> ubiquity, it is tempting to use that
system as a hub or a pivot system
+ for all coordinate transformations.
+ The use of an âuniversalâ system as a pivot simplifies the design
of coordinate transformations libraries.
+ For example transformations from datum <var>A</var> to datum
<var>B</var> can be done by first transforming
+ from <var>A</var> to <abbr>WGS84</abbr>, then from <abbr>WGS84</abbr>
to <var>B</var>.
+ With such approach, a coordinate transformations library would only
need to associate each
+ <code>GeodeticDatum</code> instance with the transformation parameters
from that datum to <abbr>WGS84</abbr>.
+ This approach was encouraged in version 1 of <abbr>WKT</abbr> format,
since that format specified a
+ <code>TOWGS84[â¦]</code> element (removed in <abbr>WKT</abbr> version
2) precisely for that purpose.
+ This approach is known in <abbr>EPSG</abbr> guidance notes as âearly
bindingâ implementations
+ since information about coordinate transformations are associated
early in geodetic object definitions,
+ usually right at <code>GeographicCRS</code> creation time.
+ While <abbr>EPSG</abbr> acknowledges that this approach is commonly
used,
+ this is not a recommended strategy for the following reasons:
</p>
<ul>
- <li>Il existe parfois plusieurs transformations allant dâun
référentiel <var>A</var> vers <var>B</var>,
- chacune étant plus précise pour une région géographique
donnée.
- Par exemple il existe une cinquantaine de transformations de
<abbr>NAD27</abbr> vers <abbr>NAD83</abbr>.</li>
- <li>Certaines opérations sont conçues spécifiquement pour
transformer de <var>A</var> vers <var>B</var>
- et nâont pas la même précision quâaurait une autre
transformation faisant un détour par <abbr>WGS84</abbr>.</li>
- <li>Il existe dâautres systèmes globaux qui pourraient servir de
pivot, par exemple le <cite>Galileo Reference Frame</cite> (<abbr>GTRF</abbr>)
- mis en place par le concurrent européen du <abbr>GPS</abbr>. Et
<abbr>WGS84</abbr> lui-même subit parfois des révisions.</li>
+ <li>More than one transformation may exist from datum <var>A</var> to
datum <var>B</var>,
+ where each transformation is designed for a different geographic
area.</li>
+ <li>Some operations are designed specifically for transformations from
<var>A</var> to <var>B</var>
+ and do not have the same accuracy than an operation using
<abbr>WGS84</abbr> as an intermediate step.</li>
+ <li><abbr>WGS84</abbr> itself has been updated many times,
+ which makes it a kind of moving target (admittedly slowly) for
coordinate transformations libraries.</li>
+ <li>Different systems could be used as the pivot system, for example
the <cite>Galileo Reference Frame</cite>
+ (<abbr>GTRF</abbr>) created for the European <abbr>GPS</abbr>
competitor.</li>
</ul>
+ <div class="example"><p><b>Example:</b>
+ the <abbr>EPSG</abbr> geodetic dataset defines about 50
transformations from <abbr>NAD27</abbr> to <abbr>NAD83</abbr>.
+ In an early binding approach, the same geographic <abbr>CRS</abbr>
(namely â<abbr>NAD27</abbr>â) in the <abbr>WKT</abbr> 1
+ format would need to be defined with a <code>TOWGS84[-8, 160,
176]</code> element for coordinates in <abbr>USA</abbr>
+ or with a <code>TOWGS84[-10, 158, 187]</code> element for coordinates
in Canada.
+ Different parameter values exist for other regions like Cuba, so it is
not possible to represent such diversity
+ with a single <code>TOWGS84[â¦]</code> element associated to a
<abbr>CRS</abbr>.
+ But even when restricting <abbr>CRS</abbr> usage to the domain of
validity of its single <code>TOWGS84[â¦]</code> element,
+ those transformations are still approximative with a 10 metres
accuracy in the <abbr>USA</abbr> case.
+ More accurate transformations exist in the form of <abbr>NADCON</abbr>
grid shift files,
+ but those transformations are from <abbr>NAD27</abbr> to
<abbr>NAD83</abbr> (which move together on the same continental plate),
+ not to <abbr>WGS84</abbr> (which move independently).
+ The difference was often ignored when <abbr>NAD83</abbr> and
<abbr>WGS84</abbr> were considered as practically equivalent,
+ but that assumption is subject to more caution today.
+ </p></div>
<p>
- <abbr>EPSG</abbr> recommande plutôt dâutiliser une approche dite
« late binding »,
- selon laquelle les paramètres nécessaires aux transformations de
coordonnées sont définis pour des paires de
- référentiels « <var>A</var> vers <var>B</var> » plutôt
quâassociés à des référentiels pris isolément.
- Apache <abbr>SIS</abbr> est une implémentation de type « late
binding »,
- bien quâune réminiscence de lâapproche « early binding »
existe toujours
- sous la forme de la propriété
<code>DefaultGeodeticDatum.getBursaWolfParameters()</code>.
+ <abbr>EPSG</abbr> rather recommends the use of âlate bindingâ
approach,
+ in which coordinate transformation methods and parameters are defined
for
+ â<var>A</var> to <var>B</var>â pairs of systems (eventually
completed with domain of validity)
+ rather than associated to standalone datums.
+ Apache <abbr>SIS</abbr> is a âlate bindingâ implementation,
+ while some reminiscences of âearly bindingâ approach still exist
in the form of the
+ <code>DefaultGeodeticDatum.getBursaWolfParameters()</code> property.
+ The later is used only if <abbr>SIS</abbr> fails to apply the late
binding approach for given reference systems.
</p>
</article>
- <h3 id="CoordinateSystem">Systèmes de coordonnées</h3>
+ <h3 id="CoordinateSystem">Coordinate systems</h3>
<p style="color: red">TODO</p>
- <h3 id="GeographicCRS">Systèmes géographiques</h3>
+ <h3 id="GeographicCRS">Geographic reference systems</h3>
<p style="color: red">TODO</p>
- <h4 id="GeographicWKT">Format <i>Well-Known Text</i></h4>
+ <h4 id="GeographicWKT"><i>Well-Known Text</i> format</h4>
<p style="color: red">TODO</p>
- <h3 id="ProjectedCRS">Projections cartographiques</h3>
+ <h3 id="ProjectedCRS">Map projections</h3>
<p>
- Lâutilité des projections cartographiques est discutée dans de
nombreux livres et sites web.
- Il sâagit de représenter 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.
+ Map projections represent a curved surface (the Earth) on a plane
surface (a map or a computer screen)
+ with some control over deformations: one can preserve either the angles
or the areas, but not both in same time.
+ The geometric properties to preserve depend on the feature to represent
and the work to do on that feature.
+ For example countries elongated along the East-West axis often use a
Lambert projection,
+ while countries elongated along the North-South axis prefer a Transverse
Mercator projection.
</p>
<p style="color: red">TODO</p>
- <h4 id="ProjectedWKT">Format <i>Well-Known Text</i></h4>
+ <h4 id="ProjectedWKT"><i>Well-Known Text</i> format</h4>
<p style="color: red">TODO</p>
- <h3 id="CompoundCRS">Dimensions verticales et temporelles</h3>
+ <h3 id="CompoundCRS">Vertical and temporal dimensions</h3>
<p style="color: red">TODO</p>
- <h4 id="CompoundWKT">Format <i>Well-Known Text</i></h4>
+ <h4 id="CompoundWKT"><i>Well-Known Text</i> format</h4>
<p style="color: red">TODO</p>
- <h2 id="GetCRS">Obtention dâun système de référence spatial</h2>
+ <h2 id="GetCRS">Fetching a spatial reference system</h2>
<p style="color: red">TODO</p>
- <h3 id="CRSAuthorityFactory">Systèmes prédéfinis par des autorités</h3>
+ <h3 id="CRSAuthorityFactory">Looking <abbr>CRS</abbr> defined by
authorities</h3>
<p style="color: red">TODO</p>
- <h3 id="CRSParsing">Lecture dâune définition au format GML ou WKT</h3>
+ <h3 id="CRSParsing">Reading definitions in GML or WKT format</h3>
<p style="color: red">TODO</p>
- <h3 id="CRSFactory">Construction programmatique explicite</h3>
+ <h3 id="CRSFactory">Constructing programmatically</h3>
<p style="color: red">TODO</p>
- <h3 id="CRS_UserCode">Ajout de définitions</h3>
+ <h3 id="CRS_UserCode">Adding new <abbr>CRS</abbr> definitions</h3>
<p style="color: red">TODO</p>
- <h2 id="CoordinateOperation">Opérations sur les coordonnées</h2>
+ <h2 id="CoordinateOperation">Coordinate operations</h2>
<p style="color: red">TODO</p>
- <h3 id="MathTransform">Exécution de opérations</h3>
+ <h3 id="MathTransform">Executing an operation on coordinate values</h3>
<p style="color: red">TODO</p>
- <h4 id="AffineTransform">Les transformations affines</h4>
+ <h4 id="AffineTransform">Affine transform</h4>
<p>
- Parmi les sortes dâopérations quâun <abbr>SIG</abbr> doit effectuer
sur les coordonnées spatiales, il en est une à la fois simple et très
fréquente.
- Ce sont les opérations linéaires, constituées uniquement dâune
combinaison dâadditions et de certaines multiplications.
- Ces opérations nâeffectuent pas de projections cartographiques, plus
complexes, mais couvrent de nombreux autres cas:
+ Among the many kinds of operations performed by <abbr>GIS</abbr>
softwares on spatial coordinates,
+ <cite>linear operations</cite> are both simple and very common.
+ Linear operations are combinations of only additions and some
multiplications.
+ Linear operations do not include map projections, which are more
complex, but cover many other cases:
</p>
<ul>
- <li>Changer lâordre des axes, par exemple de (<var>latitude</var>,
<var>longitude</var>) vers (<var>longitude</var>, <var>latitude</var>).</li>
- <li>Changer la direction des axes (par exemple lâaxe des <var>y</var>
des images pointe souvent vers le bas).</li>
- <li>Changer de méridien dâorigine (par exemple de <cite>Paris</cite>
vers <cite>Greenwich</cite>).</li>
- <li>Changer le nombre de dimensions (par exemple passer des coordonnées
3D vers 2D).</li>
- <li>Convertir des unités de mesures (par exemple convertir des pieds en
mètres).</li>
- <li>Convertir les coordonnées pixels dâune image en coordonnées
géographiques
- (par exemple la conversion exprimée dans les fichiers
<code>.tfw</code> qui accompagnent certaines images <abbr>TIFF</abbr>).</li>
- <li>Prendre en charge une petite partie des projections cartographiques
- (par exemple les paramètres <cite>False Easting</cite>, <cite>False
Northing</cite> et <cite>Scale factor</cite>).</li>
- <li>Appliquer des rotations, translations, échelles ou cisaillements
(des transformations dites <cite>affines</cite>).</li>
+ <li>Change axis order, for example from (<var>latitude</var>,
<var>longitude</var>) to (<var>longitude</var>, <var>latitude</var>).</li>
+ <li>Change axis direction (for example the <var>y</var> axis in images
is often oriented toward down).</li>
+ <li>Change the prime meridian (for example from <cite>Paris</cite> to
<cite>Greenwich</cite>).</li>
+ <li>Change the number of dimensions (for example from 3-dimensional
coordinates to 2-dimensional coordinates).</li>
+ <li>Convert units of measurement (for example convert feet to
metres).</li>
+ <li>Convert pixel coordinates in an image to geodetic coordinates
+ (for example the conversion represented in the <code>.tfw</code>
files associated to some <abbr>TIFF</abbr> images).</li>
+ <li>Handle a small part of map projection task
+ (for example the <cite>False Easting</cite>, <cite>False
Northing</cite> and <cite>Scale factor</cite> parameters).</li>
+ <li>Apply rotations, translations, scales and shears (part of
<cite>affines</cite> transforms).</li>
</ul>
<p>
- Les opérations linéaires ont la propriété de toujours se combiner:
- peu importe le nombre dâopérations linéaires que lâon enchaîne,
le résultat sera toujours exprimable par une seule opération linéaire.
- Cette propriété est plus facilement visible lorsque les opérations
linéaires sont exprimées sous forme de matrices:
- pour combiner les opérations, il suffit de multiplier les matrices.
+ Linear operations can be concatenated efficiently.
+ No matter how many linear operations are chained, the result can be
represented by a single linear operation.
+ This property is more easily seen when linear operations are represented
by matrices:
+ in order to concatenate those operations, we only need to multiply the
matrices.
</p>
<div class="example"><p><b>Example:</b>
- supposons que nous disposons dâune image dont les coordonnées des
pixels sont représentées par (<var>i</var>,<var>j</var>).
- Supposons que la taille de chaque pixel correspond à un nombre fixe de
degrées de longitude et de latitude
- dans un système géographique donné et quâil nây a pas de rotation.
- La conversion des coordonnées pixels (<var>i</var>,<var>j</var>) vers
les coordonnées géographiques (<var>λ</var>,<var>Ï</var>)
- est alors linéaire et peut être représentée par la matrice
suivante:</p>
+ give an image with pixel coordinates represented by
(<var>i</var>,<var>j</var>) coordinates,
+ assuming that all pixels have the same size in longitude and latitude
degrees,
+ and assuming there there is no rotation, then conversion from
+ (<var>i</var>,<var>j</var>) pixel coordinates to
(<var>λ</var>,<var>Ï</var>) geographic coordinates
+ can be represented by the following matrices:</p>
<table class="hidden"><tr><td>
- <math xmlns="http://www.w3.org/1998/Math/MathML" display="block"
alttext="MathML capable browser required">
- <mfenced open="[" close="]">
- <mtable>
- <mtr><mtd><mi>λ</mi></mtd></mtr>
- <mtr><mtd><mi>Ï</mi></mtd></mtr>
- <mtr><mtd><mn>1</mn></mtd></mtr>
- </mtable>
- </mfenced>
- <mo>=</mo>
- <mfenced open="[" close="]">
- <mtable>
- <mtr>
- <mtd><msub><mi>S</mi><mrow>λ</mrow></msub></mtd>
- <mtd><msub><mi>H</mi><mrow>λ</mrow></msub></mtd>
- <mtd><msub><mi>T</mi><mrow>λ</mrow></msub></mtd>
- </mtr>
- <mtr>
- <mtd><msub><mi>H</mi><mrow>Ï</mrow></msub></mtd>
- <mtd><msub><mi>S</mi><mrow>Ï</mrow></msub></mtd>
- <mtd><msub><mi>T</mi><mrow>Ï</mrow></msub></mtd>
- </mtr>
- <mtr>
- <mtd><mn>0</mn></mtd>
- <mtd><mn>0</mn></mtd>
- <mtd><mn>1</mn></mtd>
- </mtr>
- </mtable>
- </mfenced>
- <mo>Ã</mo>
- <mfenced open="[" close="]">
- <mtable>
- <mtr><mtd><mi>i</mi></mtd></mtr>
- <mtr><mtd><mi>j</mi></mtd></mtr>
- <mtr><mtd><mn>1</mn></mtd></mtr>
- </mtable>
- </mfenced>
- </math>
+ <xi:include href="../math/PixelToGeographic.html"/>
</td><td style="vertical-align: middle; padding-left: 30px">
- où
+ where
</td><td style="vertical-align: middle">
<ul>
- <li><var>S</var> est un facteur dâéchelle (<cite>Scale</cite>)
correspondant dans cet exemple à la taille des pixels.</li>
- <li><var>H</var> est un terme de cisaillement (<cite>Shear</cite>),
habituellement zéro sauf si lâimage a une rotation.</li>
- <li><var>T</var> est une translation (<cite>Translation</cite>)
correspondant dans cet exemple à la coordonnée dâun coin de lâimage.</li>
+ <li><var>S</var> is a scale factor which, in this example, is equals
to the pixel size in degrees.</li>
+ <li><var>H</var> is a shear factor, usually equals to zero except if
the image is rotated.</li>
+ <li><var>T</var> is a translation term which, in this example, is
equals to the geographic coordinate of an image corner.</li>
</ul>
</td></tr></table>
<p>
- Concentrons notre attention sur la matrice du milieu dans
lâéquation ci-dessus.
- Si nous nâinterchangeons ni nâinversons la direction dâaucun
axe, alors une conversion des coordonnées pixels vers les coordonnées
géographiques
- pourrait sâexprimer par la matrice « conversion originale »
ci-dessous.
- Mais si lâon veut en outre inverser la direction de lâaxe des
<var>j</var> pour se conformer à la convention la plus courante appliquée aux
images
- (« changement 1 ») et interchanger lâordre des axes pour
exprimer la latitude avant la longitude (« changement 2 »),
- alors on peut exprimer ces modifications par des multiplications
matricielles comme suit
- (lâordre dans laquelle les opérations sont effectuées sur les
coordonnées se lit de droite à gauche):
+ <span style="color: red">TODO</span>
</p>
<table class="hidden"><tr>
- <th>Changement 2</th><th></th>
- <th>Changement 1</th><th></th>
- <th>Conversion originale</th><th></th>
- <th>Conversion modifiée</th>
+ <th>Change 2</th><th></th>
+ <th>Change 1</th><th></th>
+ <th>Original conversion</th><th></th>
+ <th>Modified conversion</th>
</tr><tr>
<td style="vertical-align: middle">
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"
alttext="MathML capable browser required">
@@ -478,143 +463,15 @@
</td>
</tr></table>
<p>
- Lâidée principale est quâil nây a pas besoin dâécrire un
code dédié à lâinversion des axes.
- Cette opération, et bien dâautres, est prise en compte
naturellement par lâalgèbre matricielle.
- On y gagne en généricité du code et en performance.
+ <span style="color: red">TODO</span>
</p>
</div>
<p style="color: red">TODO</p>
- <article>
- <header>
- <h1>Particularités dâune bibliothèque de calculs matriciels pour
un <abbr>SIG</abbr></h1>
- </header>
- <p>
- Les <abbr>SIG</abbr> font un usage intensif de matrices afin
dâafficher leurs cartes ou transformer des coordonnées.
- On pourrait croire que le marché est suffisamment bien pourvu en
excellentes bibliothèques de calculs matriciels, libres ou commerciales.
- Pourtant, les <abbr>SIG</abbr> ont des besoins spécifiques qui
divergent un peu des objectifs de plusieurs bibliothèques existantes.
- Des manipulations de matrices comme lâexemple précédent
interviennent dans quasiment toutes les opérations
- appliquées par Apache <abbr>SIS</abbr> sur des coordonnées.
- Mais lâanalyse de ces opérations révèle quelques patterns:
- </p>
- <ul>
- <li><p>Ces matrices sont presque toujours de petites tailles,
dépassant rarement 5 lignes par 5 colonnes.</p></li>
- <li><p>Les opérations matricielles « lourdes » (multiplications
ou inversions de matrices) ne surviennent pas dans des endroits où la
performance est importante.
- Dans la quasi-totalité des cas, elles ne sont effectuées
quâune fois pour toute, Ã la lecture dâun fichier,
- ou lors des étapes de préparation avant de convertir des
coordonnées.
- Elles ne surviennent quasiment jamais dans la boucle convertissant
chacune des coordonnées.</p></li>
- <li><p>Dans une succession de multiplications et dâinversions de
matrices, les erreurs dâarrondissement sâaccumulent et grandissent
rapidement
- au point de se confondre avec certaines opérations légitimes,
notamment les changements de référentiel.
- Ces dernières sâexpriment souvent par un changement de la
taille, position et orientation de lâellipsoïde
- choisi comme approximation de la forme de la Terre. Les
changements de la taille sâexpriment en parties par million et
- les rotations en arc-secondes. Retranscrites dans une matrice, ces
valeurs sont donc assez petites.</p></li>
- <li><p>Il arrive fréquemment que des matrices sâannulent en tout ou
en partie,
- câest-à -dire que leurs multiplications ramènent des facteurs
dâéchelles à 1 et des translations à 0.
- Toutefois les erreurs dâarrondissements font que les valeurs
obtenues sont rarement exactes,
- mais plutôt des valeurs sâen rapprochant telles que 0,9999â¦97
à la place de 1.
- Malheureusement, les erreurs dâarrondissement sont parfois
telles quâil est difficile de savoir
- si certains coefficients de la matrices sont des artefacts ou
proviennent dâun réel changement de référentiel.</p></li>
- </ul>
- <p>
- Ces points font que, pour un <abbr>SIG</abbr>, la précision dâune
bibliothèque de calculs matriciels
- est plus importante que la performance. Paradoxalement, un bon moyen
de gagner en performance est justement dâinvestir davantage de temps de CPU
- pour effectuer des opérations matricielles plus précises, car on
augmente ainsi les chances de détecter correctement quelles opérations
sâannulent.
- Lâeffort investit dans cette détection permet de sauver du temps lÃ
où ça compte: quand viendra le moment de boucler sur des millions de
coordonnées à transformer.
- </p><p>
- Mais les bibliothèques dédiées aux calculs matriciels sont souvent
conçues pour opérer de manière très performante
- sur des matrices de grandes tailles, ayant par exemple des milliers de
lignes et colonnes.
- Elles sont ainsi conçues pour être capable de résoudre efficacement
des systèmes dâéquations linéaires comportant des centaines dâinconnues.
- Les problèmes quâelles résolvent sont certes difficiles, mais
assez différents de ceux qui intéressent Apache <abbr>SIS</abbr>.
- Pour cette raison, et aussi à cause dâun autre besoin spécifique
détaillé dans les paragraphes suivants,
- Apache <abbr>SIS</abbr> utilise ses propres fonctions de calculs
matriciels.
- Ces fonctions tentent de résoudre le problème de précision en
utilisant lâarithmétique « double-double »
- (une technique permettant de simuler une précision dâenviron 120
bits)
- au prix de la performance dans une partie du code où elle nâest pas
jugée critique.
- </p>
- <h2>Que faire des matrices qui ne sont pas carrées (et pourquoi)</h2>
- <p>
- Apache <abbr>SIS</abbr> a très souvent besoin dâinverser des
matrices,
- afin dâobtenir une conversion de coordonnées qui fasse le contraire
de la conversion originale.
- Mais on nâinverse habituellement que des matrices carrées.
- Or, Apache <abbr>SIS</abbr> a besoin dâeffectuer des inversions de
matrices non-carrées.
- Selon que lâon ait plus de lignes ou plus de colonnes:
- </p>
- <ul>
- <li>Pour <abbr>SIS</abbr>, une matrice non-carrée est une conversion
qui ajoute ou supprime une dimension aux coordonnées.</li>
- <li>Pour les bibliothèques dâalgèbre linéaire, une matrice
non-carrée est un système dâéquations sous-déterminé ou
surdéterminé.</li>
- </ul>
- <p>
- Pour mieux comprendre les difficultés que causerait une transposition
trop directe des bibliothèques dâalgèbre linéaire aux <abbr>SIG</abbr>,
- imaginons une conversion qui projetterait les points dâun espace 3D
vers une surface 2D:
- </p>
- <table class="hidden">
- <tr>
- <td>(λâ, Ïâ, <var>h</var>) â (λâ, Ïâ)</td>
- <td style="padding-left: 30px">où</td>
- <td><ul style="margin-top: 0">
- <li>λ est la longitude.</li>
- <li>Ï est la latitude.</li>
- <li>(λâ, Ïâ) nâégale pas forcement (λâ, Ïâ) si la
hauteur <var>h</var> nâest pas perpendiculaire à la surface.</li>
- </ul></td>
- </tr>
- </table>
- <p>
- Pour des bibliothèques dâalgèbre linéaire, la matrice
représentant cette conversion serait un système dâéquations
sous-déterminé, et donc insoluble.
- Câest-Ã -dire quâon ne peut pas inverser cette conversion pour
obtenir (λâ, Ïâ) â (λâ, Ïâ, <var>h</var>) puisquâon ne sait pas
quelle valeur donner à <var>h</var>,
- ce qui implique quâon ne peut pas trouver (λâ, Ïâ) non-plus
car ces valeurs dépendent peut-être de <var>h</var>.
- Toutefois, dans le cas des <abbr>SIG</abbr>, lâaxe des <var>h</var>
est très souvent perpendiculaire à la surface sur laquelle sont exprimées
les coordonnées (<var>λ</var>,<var>Ï</var>).
- Cette perpendicularité rend λâ et Ïâ indépendants de
<var>h</var>. Dans ce cas particulier, et ce cas seulement, on peut encore
sauver les meubles.
- </p><p>
- Apache <abbr>SIS</abbr> procède en vérifiant si les coordonnées
<var>h</var> sont indépendantes des coordonnées λ et Ï.
- Nous reconnaissons ce cas en vérifiant quels coefficients de la
matrice ont la valeur zéro.
- Si <abbr>SIS</abbr> arrive à identifier des dimensions indépendantes,
- il peut les exclure temporairement de manière à inverser sans
ambiguïté la conversion dans les dimensions restantes.
- Sâil ne trouve pas de dimension indépendante, alors une exception
est levée.
- </p><p>
- Si une inversion a été possible, alors il reste à décider du sort
des dimensions que <abbr>SIS</abbr> avait temporairement exclues.
- Dans notre exemple, <abbr>SIS</abbr> assignera la valeur
<code>NaN</code> (<cite>Not-a-Number</cite>) aux valeurs de <var>h</var> dans
la conversion (λâ, Ïâ) â (λâ, Ïâ, <var>h</var>).
- Là encore, le choix du coefficient à mettre à <code>NaN</code> dans
la matrice est basé sur la présomption quâelle représente une conversion
de coordonnées.
- </p><p>
- Le traitement particulier fait par <abbr>SIS</abbr> permet donc
dâinverser des matrices que lâon rencontre couramment dans les
<abbr>SIG</abbr>,
- même si en principe le système est sous-déterminé.
- Dans notre exemple la coordonnée <var>h</var> reste inconnue âÂ
nous ne faisons pas surgir de lâinformation du néant â mais au moins les
coordonnées (<var>λ</var>,<var>Ï</var>) ont pu être récupérées.
- </p><p>
- Le problème inverse, celui des systèmes surdéterminés, est plus
subtil.
- Une approche classique des bibliothèques dâalgèbre linéaire est
de résoudre les systèmes surdéterminés par la méthode des moindres
carrées.
- Transposée à notre exemple, cette approche proposerait une
conversion (λâ, Ïâ, <var>h</var>) â (λâ, Ïâ)
- qui semble le meilleur compromis pour diverses valeurs de λâ, Ïâ
et <var>h</var>, tout en nâétant (sauf cas particuliers) une solution exacte
pour personne.
- De plus, les éventuelles combinaisons linéaires entre ces trois
variables sont délicates compte tenu de lâhétérogénéité des unités de
mesures,
- où les <var>h</var> sont en mètres et (<var>λ</var>,<var>Ï</var>)
en degrés.
- Apache <abbr>SIS</abbr> procède plutôt comme pour les systèmes
sous-déterminés: en exigeant que certaines dimensions soient indépendantes
des autres,
- faute de quoi la matrice sera considérée non-inversible.
- Dans le cas des systèmes surdéterminés <abbr>SIS</abbr> refusera
donc dâeffectuer certaines opérations que les bibliothèques dâalgèbre
linéaire auraient faite,
- mais garantira que les conversions obtenues seront exactes (aux
erreurs dâarrondissement prêts).
- </p>
- <p>
- En résumé, les besoins qui ont amené Apache <abbr>SIS</abbr> Ã
fournir ses propres fonctions de calculs matriciels sont:
- </p>
- <ul>
- <li>Structure légère pour les petites matrices, particulièrement
celles de taille 3Ã3.</li>
- <li>Précision accrue avec lâarithmétique « double-double »,
quitte à sacrifier un peu de performance dans des endroits où elle nâest
pas critique.</li>
- <li>Traitement particulier de lâinversion des matrices non-carrées
pour des conversions de coordonnées.</li>
- </ul>
- </article>
-
- <h3 id="TransformDerivative">Dérivées partielles des opérations</h3>
+ <h3 id="TransformDerivative">Partial derivatives of coordinate
operations</h3>
<p>
- La section précédente indiquait comment calculer les coordonnées
dâun point géographique dans une projection au choix.
- Mais il existe une autre opération moins connue, qui consiste Ã
calculer non pas la <em>coordonnées projetée</em> dâun point,
- mais plutôt la <em>dérivée de la fonction de projection
cartographique</em> en ce point.
- Cette opération était définie dans une ancienne spécification du
consortium Open Geospatial,
- <a href="http://www.opengeospatial.org/standards/ct">OGC 01-009</a>,
aujourdâhui un peu oubliée mais pourtant encore utile.
- </p>
-
- <p>
- Appelons <var>P</var> une projection cartographique qui convertit une
longitude et latitude (<var>λ</var>,<var>Ï</var>) en degrés
- vers une coordonnée projetée (<var>x</var>,<var>y</var>) en mètres.
- Dans lâexpression ci-dessous, nous représentons le résultat de la
projection cartographique
- sous forme dâune matrice colonne (la raison sera plus claire bientôt):
+ <span style="color: red">TODO</span>
</p>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"
alttext="MathML capable browser required">
@@ -628,7 +485,7 @@
</mfenced>
</math>
- <p>La dérivée de la projection cartographique en ce même point peut se
représenter par la matrice Jacobienne définie tel que:</p>
+ <p>The map projection partial derivate at this point can be represented by
the Jacobian matrix:</p>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"
alttext="MathML capable browser required">
<msup><mi>P</mi><mo>â²</mo></msup><mo>(</mo><mi>λ</mi><mo>,</mo><mi>Ï</mi><mo>)</mo>
@@ -650,31 +507,13 @@
</math>
<p>
- Dans la suite de ce texte nous abrégerons
â<var>x</var>(<var>λ</var>,<var>Ï</var>) par â<var>x</var> et de même
pour â<var>y</var>,
- mais il faut garder à l'esprit que chacune de ces valeurs dépendent de
la coordonnée (<var>λ</var>,<var>Ï</var>) originale.
- Le premier élément de la matrice (â<var>x</var>/â<var>λ</var>)
nous indique à quel déplacement vers lâEst
- (<var>x</var> en mètres) correspond un déplacement de un degré de
longitude (<var>λ</var>).
- De même, le dernier élément de la matrice
(â<var>y</var>/â<var>Ï</var>) nous indique à quel déplacement vers le
Nord
- (<var>y</var> en mètres) correspond un déplacement de un degré de
latitude (<var>Ï</var>).
- Les autres éléments (â<var>x</var>/â<var>Ï</var> et
â<var>y</var>/â<var>λ</var>) sont des termes croisés (par exemple à quel
déplacement
- en mètres vers le <em>Nord</em> correspond un déplacement de un degré
de <em>longitude</em>).
- Ces valeurs ne sont généralement valides quâà la position
géographique (<var>λ</var>,<var>Ï</var>) donnée.
- Si on se déplace un peu, ces valeurs changent légèrement.
- Cette matrice nous donne toutefois une bonne idée du comportement de la
projection dans le voisinage du point projeté.
- </p>
-
- <p>
- On peut se représenter visuellement cette matrice comme ci-dessous.
- Cette figure représente la dérivée en deux points,
<var>P</var><sub>1</sub> et <var>P</var><sub>2</sub>,
- pour mieux illustrer le fait que le résultat varie en chaque point.
- Dans cette figure, les vecteurs <var>U</var> et <var>V</var> désignent
respectivement
- la première et deuxième colonne des matrices de dérivées.
+ <span style="color: red">TODO</span>
</p>
<table class="hidden"><tr>
<td><img style="border: solid 1px" src="../images/Derivatives.png"
alt="Exemple de dérivées dâune projection cartographique"/></td>
<td style="padding-left: 30px; vertical-align: middle">
- <p>où les vecteurs sont reliés à la matrice par:</p>
+ <p>where vectors are related to the matrix by:</p>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"
alttext="MathML capable browser required">
<mtable><mtr>
<mtd>
@@ -710,27 +549,17 @@
</tr></table>
<p>
- Cette figure nous montre déjà une utilisation possible des dérivées:
- elles donnent la direction des parallèles et des méridiens à une
position donnée dans une projection cartographique.
- Par extension, on peut aussi sâen servir pour déterminer si des axes
sont interchangés,
- ou si la direction dâun axe est renversée. Mais lâintérêt des
dérivées ne sâarrête pas là .
- </p>
-
- <h4 id="DerivativeAndEnvelope">Utilité des dérivées pour la
reprojection dâenveloppes</h4>
- <p>
- Les systèmes dâinformation géographiques ont très fréquemment
besoin de projeter une enveloppe.
- Mais lâapproche naïve, qui consisterait à projeter chacun des 4
coins du rectangle, ne suffit pas.
- La figure ci-dessous montre une enveloppe avant le projection, et la
forme géométrique que lâon obtiendrait
- si on projetait finement lâenveloppe (pas seulement les 4 coins).
Cette forme géométrique est plus complexe
- quâun simple rectangle à cause des courbures induites par la
projection cartographique.
- Construire une enveloppe rectangulaire qui engloberait les 4 coins de
cette forme géométrique ne suffit pas,
- car la surface en bas de la forme est plus basse que les 2 coins du bas.
- Cette surface serait donc en dehors du rectangle.
+ <span style="color: red">TODO</span>
+ </p>
+
+ <h4 id="DerivativeAndEnvelope">Transform derivatives applied to
envelopes</h4>
+ <p>
+ <span style="color: red">TODO</span>
</p>
<table class="hidden">
<tr>
- <th>Enveloppe avant la projection</th>
- <th>Forme géométrique après la projection</th>
+ <th>Envelope before projection</th>
+ <th>Geometric shape after projection</th>
</tr>
<tr>
<td><img style="border: solid 1px; margin-right: 15px"
src="../images/GeographicArea.png" alt="Envelope in a geographic CRS"/></td>
@@ -738,172 +567,80 @@
</tr>
</table>
<p>
- Une façon simple dâatténuer le problème est dâéchantillonner un
plus grand nombre de points sur chacun des
- bords de la forme géométrique. On trouve ainsi des bibliothèques de
<abbr>SIG</abbr> qui vont par exemple
- échantillonner 40 points sur chaque bord, et construire un rectangle
qui englobe tout ces points.
- Mais même avec 40 points, les échantillons les plus proches peuvent
encore être légèrement à côté du point le plus bas de la figure.
- Une petite portion de la forme géométrique peut donc toujours se
trouver en dehors du rectangle.
- Il est tentant de considérer cette légère erreur comme négligeable,
mais quelques pixels manquants
- entraînent divers artefacts comme une apparence de quadrillage lors de
lâaffichage dâimages tuilées,
- ou une âpointe de tarteâ manquante lors de la projection dâimages
sur un pôle.
- Augmenter artificiellement dâun certain pourcentage la taille de
lâenveloppe projetée peut éliminer ces artefacts dans certains cas.
- Mais un pourcentage trop élevé fera traiter plus de données que
nécessaire
- (en particulier lorsque cela entraîne le chargement de nouvelles tuiles
dâimages),
- alors quâun pourcentage trop faible laissera quelques artefacts.
- </p><p>
- Les dérivées des projections cartographiques permettent de résoudre
ce problème dâune manière plus efficace que la force brute.
- La figure ci-dessous reprend la forme projetée en exagérant des
déformations.
- Lâapproche consiste à calculer la projection cartographiques des 4
coins comme dans lâapproche naïve,
- mais en récupérant aussi les dérivées de la projection de ces 4
coins.
- Entre deux coins et avec leurs dérivées, on peut faire passer une et
une seule courbe cubique
- (de la forme <i>f(<var>x</var>)</i> = <var>C</var>â +
<var>C</var>â<var>x</var> + <var>C</var>â<var>x</var>² +
<var>C</var>â<var>x</var>³),
- dont on peut calculer les coefficients <var>C</var>.
- Cette approximation (représentée en rouge ci-dessous) ne correspond
pas tout-à -fait à la courbe désirée (en bleue) mais sâen rapproche.
- Ce qui nous intéresse nâest pas vraiment les valeurs de
lâapproximation, mais plutôt la position de son minimum,
- en particulier la longitude λ où se trouve ce minimum dans notre
exemple (ligne pointillée verte).
- Lâavantage est que la position du minimum dâune courbe cubique est
facile à calculer lorsque lâon connaît les valeurs de <var>C</var>.
- En supposant que la longitude du minimum de la courbe cubique est proche
de la longitude du minimum de la courbe réelle,
- il suffit de calculer la projection cartographique dâun point à cette
longitude plutôt que dâéchantillonner 40 points sur le bord de
lâenveloppe.
+ <span style="color: red">TODO</span>
</p>
<table class="hidden"><tr><td>
- <img src="../images/Approximation.png" alt="Approximation cubique dâun
bord dâune enveloppe"/>
+ <img src="../images/Approximation.png" alt="Cubic approximation of an
envelope bounds"/>
</td><td style="padding-left: 60px">
- Légende:
+ Legend:
<ul>
- <li><b>En bleue:</b> la forme géométrique correspondant à la
projection de lâenveloppe.
- Câest la forme dont on souhaite avoir le rectangle englobant.</li>
- <li><b>En rouge</b> (sous les hachures): Lâapproximation
- <var>y</var> = <var>C</var>â + <var>C</var>âλ +
<var>C</var>âλ² + <var>C</var>âλ³.</li>
- <li><b>En vert</b> (pointillés): La position λ<sub>m</sub> du
minimum de lâapproximation, trouvée en résolvant
+ <li><b>Blue:</b> the geometric shape of the envelope after projection.
+ This is the shape from which to get a new envelope.</li>
+ <li><b>Red</b> (with hash): The
+ <var>y</var> = <var>C</var>â + <var>C</var>âλ +
<var>C</var>âλ² + <var>C</var>âλ³ approximation.</li>
+ <li><b>Green</b> (dashed line): Position λ<sub>m</sub> of
approximation minimum, obtained by resolving
0 = <var>C</var>â + 2<var>C</var>âλ<sub>m</sub> +
3<var>C</var>âλ<sub>m</sub>².
- Il peut y avoir jusquâà deux minimums pour une même courbe
cubique.</li>
+ The same cubic line can have two minimums.</li>
</ul>
</td></tr></table>
<p>
- Dans la pratique Apache <abbr>SIS</abbr> utilise 8 points, soit les 4
coins plus un point au centre de chaque bord du rectangle à projeter,
- afin de réduire le risque dâerreur quâinduirait une courbe trop
tordue entre deux points.
- Selon nos tests, lâutilisation de ces seuls 8 points avec leurs
dérivées comme décrit ci-haut
- donne un résultat plus précis que lâapproche « force brute »
utilisant un échantillonnage de 160 points sur les 4 bords du rectangle.
- La précision de <abbr>SIS</abbr> pourrait être encore améliorée en
répétant le processus à partir du minimum trouvée
- (une ou deux itérations suffiraient peut-être).
- </p><p>
- Une économie de 150 points nâest pas énorme vu les performances des
ordinateurs dâaujourdâhui.
- Mais toute la discussion précédente utilisait une forme géométrique
à deux dimensions en guise dâexemple,
- alors que lâalgorithme est applicable dans un espace à <var>n</var>
dimensions.
- Et de fait, lâimplémentation de Apache SIS fonctionne pour un nombre
arbitraire de dimensions.
- Les économies apportées par cet algorithme par rapport à la force
brute augmentent de manière exponentielle avec le nombre de dimensions.
- </p><p>
- Lâapproche décrite dans cette section est implémentée dans Apache
<abbr>SIS</abbr>
- par la méthode statique <code>Envelopes.transform(CoordinateOperation,
Envelope)</code>.
- Une méthode <code>Envelopes.transform(MathTransform, Envelope)</code>
existe aussi comme alternative,
- mais cette dernière ne devrait être utilisée que si on ne connaît
pas lâobjet <code>CoordinateOperation</code> utilisé.
- La raison est que les objets de type <code>MathTransform</code> ne
contiennent pas dâinformation sur le système de coordonnées sous-jasent,
- ce qui empêche la méthode <code>Envelopes.transform(â¦)</code> de
savoir comment gérer les points aux pôles.
+ <span style="color: red">TODO</span>
</p>
- <h4 id="DerivativeAndRaster">Utilité des dérivées pour la reprojection
dâimages</h4>
- <p>
- La projection cartographique dâune image sâeffectue en préparant
une image initialement vide qui contiendra le résultat de lâopération,
- puis à remplir cette image en itérant sur tous les pixels. Pour chaque
pixel de lâimage <em>destination</em>, on obtient la coordonnées
- du pixel correspondant dans lâimage source en utilisant
<em>lâinverse</em> de la projection cartographique que lâon souhaite
appliquer.
- La position obtenue ne sera pas nécessairement au centre du pixel de
lâimage source, ce qui implique quâune interpolation de la valeur
- (ou de la couleur dans lâimage ci-dessous) peut être nécessaire.
+ <h4 id="DerivativeAndRaster">Transform derivatives applied to rasters</h4>
+ <p>
+ <span style="color: red">TODO</span>
</p>
<table class="hidden">
<tr>
- <th style="text-align: left">Image source</th>
- <th style="text-align: right">Image destination</th>
+ <th style="text-align: left">Source image</th>
+ <th style="text-align: right">Destination image</th>
</tr>
<tr>
<td colspan="2"><img src="../images/RasterProjection.png"
alt="Intersection of derivatives"/></td>
</tr>
</table>
<p>
- Toutefois, calculer la projection inverse pour chacun des pixels peut
être relativement lent.
- Afin dâaccélérer les calculs, on utilise parfois une <cite>grille
dâinterpolation</cite>
- dans laquelle on a pré-calculé les <em>coordonnées</em> de la
projection inverse de seulement quelques points.
- Les coordonnées des autres points se calculent alors par des
interpolations bilinéaires entre les points pré-calculés,
- calculs qui pourraient éventuellement tirer parti dâaccélérations
matérielles sous forme de <cite>transformations affines</cite>.
- Cette approche est implémentée par exemple dans la bibliothèque
<cite>Java Advanced Imaging</cite> avec lâobjet <code>WarpGrid</code>.
- Elle offre en outre lâavantage de permettre de réutiliser la grille
autant de fois que lâon veut si on a plusieurs images de même
- taille à projeter aux mêmes coordonnées géographiques.
- </p><p>
- Mais une difficulté de cette approche est de déterminer combien de
points il faut pré-calculer pour que lâerreur
- (la différence entre une position interpolée et la position réelle)
ne dépasse pas un certain seuil (par exemple ¼ de pixel).
- On peut procéder en commençant par une grille de taille 3Ã3, puis en
augmentant le nombre de points de manière itérative:
+ <span style="color: red">TODO</span>
</p>
<table class="hidden"><tr>
<td><img src="../images/WarpGrid.png" alt="Intersection of
derivatives"/></td>
<td style="padding-left: 60px">
- Légende:
+ Legend:
<ul>
- <li><b>Points bleus:</b> première itération (9 points).</li>
- <li><b>Points verts:</b> seconde itération (25 points, dont 16
nouveaux).</li>
- <li><b>Points rouges:</b> troisième itération (81 points, dont 56
nouveaux).</li>
+ <li><b>Blue dots:</b> first iteration (9 points).</li>
+ <li><b>Green dots:</b> second iteration (25 points, including 16
news).</li>
+ <li><b>Red dots:</b> third iteration (81 points, including 56
news).</li>
</ul>
- Si lâon continueâ¦
+ Continuingâ¦
<ul>
- <li>Quatrième itération: 289 points, dont 208 nouveaux.</li>
- <li>Cinquième itération: 1089 points, dont 800 nouveaux.</li>
- <li>Sixième itération: 4225 points, dont 3136 nouveaux.</li>
+ <li>Forth iteration: 289 points, including 208 news.</li>
+ <li>Fifth iteration: 1089 points, including 800 news.</li>
+ <li>Sixth iteration: 4225 points, including 3136 news.</li>
<li>â¦</li>
</ul>
</td></tr></table>
<p>
- Lâitération sâarrête lorsque, après avoir calculé de nouveaux
points, on a vérifié que la différence entre les
- coordonnées projetées et les coordonnées interpolées de ces nouveaux
points est inférieure au seuil quâon sâest fixé.
- Malheureusement cette approche nous permet seulement de déterminer
<strong>après</strong> avoir calculé de nouveaux pointsâ¦
- que ce nâétait pas la peine de les calculer. Câest un peu dommage
vu que le nombre de nouveaux points requis par chaque itération
- est environ 3 fois la <em>somme</em> du nombre de nouveaux points de
<em>toutes</em> les itérations précédentes.
- </p><p>
- Les dérivées des projections cartographiques nous permettent
dâaméliorer cette situation en estimant
- si câest la peine dâeffectuer une nouvelle itération
<strong>avant</strong> de la faire.
- Lâidée de base est de vérifier si les dérivées de deux points
voisins sont presque pareilles,
- auquel cas on présumera que la transformation entre ces deux points est
pratiquement linéaire.
- Pour quantifier « presque pareil », on procède en calculant
lâintersection entre les tangentes aux deux points
- (une information fournie par les dérivées), et en calculant la
distance entre cette intersection et la droite
- qui relie les deux points (la ligne pointillée dans la figure
ci-dessous).
+ <span style="color: red">TODO</span>
</p>
<p style="text-align:center"><img style="border: solid 1px"
src="../images/IntersectionOfDerivatives.png" alt="Intersection of
derivatives"/></p>
<p>
- Dans lâapproche sans dérivées, lâitération sâarrête lorsque la
distance entre la ligne pointillée (positions interpolées)
- et la ligne rouge (positions projetées) est inférieure au seuil de
tolérance, ce qui implique de calculer la position projetée.
- Dans lâapproche avec dérivées, on remplace la position projetée par
lâintersection des deux tangentes (carré bleu foncé).
- Si la courbe nâest pas trop tordue â ce qui ne devrait pas être le
cas entre deux points suffisamment proches â
- la courbe réelle passera à quelque part entre la droite pointillée et
lâintersection.
- On sâévite ainsi des projections cartographiques, en apparence une
seule dans cette illustration,
- mais en fait beaucoup plus dans une grille de transformation dâimage
(3à la somme des itérations précédentes).
- </p>
-
- <h4 id="GetDerivative">Obtention de la dérivée en un point</h4>
- <p>
- Cette discussion nâaurait pas un grand intérêt si le coût du calcul
des dérivées des projections cartographiques
- était élevé par rapport aux coût de la projection des points. Mais
lorsque lâon dérive analytiquement les équations
- des projections, on constate que les calculs des positions et de leurs
dérivées ont souvent plusieurs termes en commun.
- En outre le calcul des dérivées est simplifié lorsque le code Java
effectuant les projections ne se concentre que sur le « noyau »
non-linéaire,
- après sâêtre déchargé des parties linéaires en les déléguant
aux transformations affines comme le fait <abbr>SIS</abbr>.
- Les implémentations des projections cartographiques dans Apache
<abbr>SIS</abbr> tirent parti de ces propriétés
- en ne calculant les dérivées que si elles sont demandées,
- et en offrant une méthode qui permet de projeter un point et obtenir sa
dérivée en une seule opération
- afin de permettre à <abbr>SIS</abbr> de réutiliser un maximum de
termes communs.
- Exemple:</p>
-
-<pre>AbstractMathTransform projection = ...; // Une projection
cartographique de Apache SIS.
-double[] sourcePoint = {longitude, latitude}; // La coordonnée
géographique que lâon veut projeter.
-double[] targetPoint = new double[2]; // Là où on mémorisera le
résultat de la projection.
+ <span style="color: red">TODO</span>
+ </p>
+
+ <h4 id="GetDerivative">Getting the derivative at a point</h4>
+ <p>
+ <span style="color: red">TODO</span>
+ Example:</p>
+
+<pre>AbstractMathTransform projection = ...; // An Apache SIS map
projection.
+double[] sourcePoint = {longitude, latitude}; // The geographic coordinate
to project.
+double[] targetPoint = new double[2]; // Where to store the
projection result.
Matrix derivative = projection.<code
class="SIS">transform</code>(sourcePoint, 0, targetPoint, 0, true);</pre>
<p>
- Si seule la matrice Jacobienne est désirée (sans la projection du
point), alors la méthode
- <code>MathTransform.derivative(DirectPosition)</code> offre une
alternative plus lisible.
- </p><p>
- Apache <abbr>SIS</abbr> est capable combiner les dérivées des
projections cartographiques de la même façon que pour les projections de
coordonnées:
- concaténation dâune chaîne de transformations, inversion, opérer
sur un sous-ensemble des dimensions, <i>etc.</i>
- Les opérations inverses (des systèmes projetés vers géographiques)
- sont souvent beaucoup plus compliquées à implémenter que les
opérations originales (des systèmes géographiques vers projetés),
- mais par chance la matrice Jacobienne dâune fonction inverse est
simplement lâinverse de la matrice Jacobienne de la fonction originale.
- Une fonction inverse peut donc implémenter le calcul de sa dérivée
comme suit:
+ <span style="color: red">TODO</span>
</p>
<pre>@Override
public Matrix derivative(DirectPosition p) throws TransformException {