You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2016/07/22 13:07:12 UTC
svn commit: r1753786 [2/2] - in /sis/site/trunk: book/en/annexes.html
book/en/referencing.html book/fr/annexes.html book/fr/referencing.html
content/book/en/developer-guide.html content/book/fr/developer-guide.html
Modified: sis/site/trunk/content/book/fr/developer-guide.html
URL: http://svn.apache.org/viewvc/sis/site/trunk/content/book/fr/developer-guide.html?rev=1753786&r1=1753785&r2=1753786&view=diff
==============================================================================
--- sis/site/trunk/content/book/fr/developer-guide.html [UTF-8] (original)
+++ sis/site/trunk/content/book/fr/developer-guide.html [UTF-8] Fri Jul 22 13:07:12 2016
@@ -60,9 +60,7 @@
<li><a href="#CRSFactory">Construction programmatique explicite</a></li>
<li><a href="#CRS_UserCode">Ajout de d�finitions</a></li></ul></li>
<li><a href="#CoordinateOperation">Op�rations sur les coordonn�es</a><ul>
-<li><a href="#MathTransform">Ex�cution de op�rations</a><ul>
-<li><a href="#AffineTransform">Les transformations affines</a></li>
-<li><a href="#AffineTransformAPI">Int�gration avec les biblioth�ques graphiques</a></li></ul></li>
+<li><a href="#MathTransform">Ex�cution de op�rations</a></li>
<li><a href="#TransformDerivative">D�riv�es partielles des op�rations</a><ul>
<li><a href="#DerivativeAndEnvelope">Utilit� des d�riv�es pour la reprojection d\u2019enveloppes</a></li>
<li><a href="#DerivativeAndRaster">Utilit� des d�riv�es pour la reprojection d\u2019images</a></li>
@@ -86,6 +84,8 @@
<li><a href="#GeoAPI-validators">Validations des instances</a></li>
<li><a href="#GeoAPI-tests">Ex�cution des tests pr�-d�finis</a></li></ul></li>
<li><a href="#DesignNote">Notes de design</a><ul>
+<li><a href="#AffineTransform">Utilisation des transformations affines</a><ul>
+<li><a href="#AffineTransformAPI">Int�gration avec les biblioth�ques graphiques</a></li></ul></li>
<li><a href="#MatrixLibrary">Particularit�s d\u2019une biblioth�que de calculs matriciels pour un SIG</a><ul>
<li><a href="#NonSquareMatrix">Que faire des matrices qui ne sont pas carr�es (et pourquoi)</a></li>
<li><a href="#MatrixLibrarySummary">La biblioth�que matricielle de Apache SIS</a></li></ul></li></ul></li></ul></li>
@@ -1435,9 +1435,7 @@ de la biblioth�que <abbr>SIS</abbr>.
<li><a href="#CRSFactory">Construction programmatique explicite</a></li>
<li><a href="#CRS_UserCode">Ajout de d�finitions</a></li></ul></li>
<li><a href="#CoordinateOperation">Op�rations sur les coordonn�es</a><ul>
-<li><a href="#MathTransform">Ex�cution de op�rations</a><ul>
-<li><a href="#AffineTransform">Les transformations affines</a></li>
-<li><a href="#AffineTransformAPI">Int�gration avec les biblioth�ques graphiques</a></li></ul></li>
+<li><a href="#MathTransform">Ex�cution de op�rations</a></li>
<li><a href="#TransformDerivative">D�riv�es partielles des op�rations</a><ul>
<li><a href="#DerivativeAndEnvelope">Utilit� des d�riv�es pour la reprojection d\u2019enveloppes</a></li>
<li><a href="#DerivativeAndRaster">Utilit� des d�riv�es pour la reprojection d\u2019images</a></li>
@@ -1822,446 +1820,110 @@ Notes que toutes les coordonn�es g�ogr
}</pre>
-<h4 id="AffineTransform"><span class="section-number">3.3.1.1.</span> Les transformations affines</h4>
-<p>
-Parmi les sortes d\u2019op�rations qu\u2019un <abbr>SIG</abbr> doit effectuer sur les coordonn�es spatiales,
-les <cite>transformations affines</cite> sont � la fois relativement simples et tr�s fr�quentes.
-Les transformations affines peuvent repr�senter n\u2019importe quelle combinaison d\u2019�chelles, de cisaillements,
-de retournements, de rotations ou de translations, qui sont toutes des <cite>op�rations lin�aires</cite>.
-Les transformations affines ne peuvent pas effectuer des op�rations <cite>non-lin�aires</cite>
-telles que les projections cartographiques, mais couvrent n�anmoins de nombreux autres cas:
-</p>
-<ul>
-<li>Changer l\u2019ordre 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\u2019axe des <var>y</var> qui pointe habituellement vers le bas dans les images.</li>
-<li>Changer le m�ridien d\u2019origine, par exemple du m�ridien de <cite>Paris</cite> vers celui de <cite>Greenwich</cite>.</li>
-<li>Changer le nombre de dimensions, par exemple passer des coordonn�es 3D vers 2D en supprimant la hauteur.</li>
-<li>Convertir des unit�s de mesures, par exemple convertir des pieds en m�tres.</li>
-<li>Convertir des coordonn�es pixels 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>
-</ul>
+<h3 id="TransformDerivative"><span class="section-number">3.3.2.</span> D�riv�es partielles des op�rations</h3>
<p>
-Les transformations affines peuvent se combiner efficacement.
-Peu importe le nombre de transformations affines que l\u2019on encha�ne, le r�sultat sera exprimable par une seule transformation affine.
-Cette propri�t� est plus facilement visible lorsque les transformations affines sont exprim�es sous forme de matrices:
-pour combiner les op�rations, il suffit de multiplier les matrices.
-Le cas des conversions des coordonn�es pixels en coordonn�es g�ographiques ci-dessous donne un exemple.
+La section pr�c�dente indiquait comment calculer les coordonn�es d\u2019un 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\u2019un 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\u2019hui un peu oubli�e mais pourtant encore utile.
</p>
-<div class="example">
-<p><b>Exemple:</b>
-supposons que nous disposons d\u2019une image dont les coordonn�es des pixels sont repr�sent�es par (<var>x</var>,<var>y</var>).
-Supposons aussi que les contraintes suivantes sont respect�es:
+<p>
+Appelons <var>P</var> une projection cartographique qui convertit une longitude et latitude (<var>\u03bb</var>,<var>\u03c6</var>) en degr�s
+vers une coordonn�e projet�e (<var>x</var>,<var>y</var>) en m�tres.
+Dans l\u2019expression ci-dessous, nous repr�sentons le r�sultat de la projection cartographique
+sous forme d\u2019une matrice colonne (la raison sera plus claire bient�t):
</p>
-<ul>
-<li>Il n\u2019y a ni cisaillement, ni rotation, ni retournement de l\u2019image.</li>
-<li>Tous les pixels ont la m�me largeur en degr�s de longitude.</li>
-<li>Tous les pixels ont la m�me hauteur en degr�s de latitude.</li>
-<li>Les coordonn�es des pixels commencent � (0,0) inclusivement.</li>
-</ul>
-<p>Alors la conversion des coordonn�es pixels (<var>x</var>,<var>y</var>)
-vers les coordonn�es g�ographiques (<var>\u03bb</var>,<var>\u03c6</var>)
-peut �tre repr�sent�e par les �quations suivantes,
-o� <var>N</var><sub><var>x</var></sub> est la largeur
-et <var>N</var><sub><var>y</var></sub> la hauteur de l\u2019image en nombre de pixels.
-</p><p>
-
<math xmlns="http://www.w3.org/1998/Math/MathML" alttext="MathML capable browser required" display="block">
+<mi>P</mi><mo>(</mo><mi>\u03bb</mi><mo>,</mo><mi>\u03c6</mi><mo>)</mo>
+<mo>=</mo>
+<mfenced close="]" open="[">
<mtable>
-<mtr>
-<mtd><mo>\u03bb</mo></mtd>
-<mtd><mo>=</mo></mtd>
-<mtd><msub><mi>S</mi><mrow>\u03bb</mrow></msub><mi>x</mi><mo>+</mo><msub><mi>T</mi><mrow>\u03bb</mrow></msub></mtd>
-<mtd><mtext>��������where��������</mtext></mtd>
-<mtd><msub><mi>S</mi><mrow>\u03bb</mrow></msub></mtd>
-<mtd><mo>=</mo></mtd>
-<mtd>
-<mfrac>
-<mrow>
-<msub><mi>\u03bb</mi><mrow>max</mrow></msub><mo>-</mo>
-<msub><mi>\u03bb</mi><mrow>min</mrow></msub>
-</mrow><mrow>
-<msub><mi>N</mi><mrow><mi>x</mi></mrow></msub>
-</mrow>
-</mfrac>
-</mtd>
-<mtd><mtext>����and����</mtext></mtd>
-<mtd><msub><mi>T</mi><mrow>\u03bb</mrow></msub></mtd>
-<mtd><mo>=</mo></mtd>
-<mtd><msub><mi>\u03bb</mi><mrow>min</mrow></msub></mtd>
-</mtr>
-<mtr>
-<mtd><mo>\u03c6</mo></mtd>
-<mtd><mo>=</mo></mtd>
-<mtd><msub><mi>S</mi><mrow>\u03c6</mrow></msub><mi>y</mi><mo>+</mo><msub><mi>T</mi><mrow>\u03c6</mrow></msub></mtd>
-<mtd><mtext>��������where��������</mtext></mtd>
-<mtd><msub><mi>S</mi><mrow>\u03c6</mrow></msub></mtd>
-<mtd><mo>=</mo></mtd>
-<mtd>
-<mfrac>
-<mrow>
-<msub><mi>\u03c6</mi><mrow>max</mrow></msub><mo>-</mo>
-<msub><mi>\u03c6</mi><mrow>min</mrow></msub>
-</mrow><mrow>
-<msub><mi>N</mi><mrow><mi>y</mi></mrow></msub>
-</mrow>
-</mfrac>
-</mtd>
-<mtd><mtext>����and����</mtext></mtd>
-<mtd><msub><mi>T</mi><mrow>\u03c6</mrow></msub></mtd>
-<mtd><mo>=</mo></mtd>
-<mtd><msub><mi>\u03c6</mi><mrow>min</mrow></msub></mtd>
-</mtr>
+<mtr><mtd><mi>x</mi><mo>(</mo><mi>\u03bb</mi><mo>,</mo><mi>\u03c6</mi><mo>)</mo></mtd></mtr>
+<mtr><mtd><mi>y</mi><mo>(</mo><mi>\u03bb</mi><mo>,</mo><mi>\u03c6</mi><mo>)</mo></mtd></mtr>
</mtable>
+</mfenced>
</math>
-</p><p>
-Les �quations ci-dessus peuvent �tre repr�sent�es sous forme de matrices comme ci-dessous:
-</p><p>
+<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>
<math xmlns="http://www.w3.org/1998/Math/MathML" alttext="MathML capable browser required" display="block">
-<mfenced close="]" open="[">
-<mtable>
-<mtr><mtd><mi>\u03bb</mi></mtd></mtr>
-<mtr><mtd><mi>\u03c6</mi></mtd></mtr>
-<mtr><mtd><mn>1</mn></mtd></mtr>
-</mtable>
-</mfenced>
+<msup><mi>P</mi><mo>\u2032</mo></msup><mo>(</mo><mi>\u03bb</mi><mo>,</mo><mi>\u03c6</mi><mo>)</mo>
+<mo>=</mo>
+<msub><mi>JAC</mi><mrow><mi>P</mi><mo>(</mo><mi>\u03bb</mi><mo>,</mo><mi>\u03c6</mi><mo>)</mo></mrow></msub>
<mo>=</mo>
<mfenced close="]" open="[">
<mtable>
<mtr>
-<mtd><msub><mi>S</mi><mrow>\u03bb</mrow></msub></mtd>
-<mtd><mn>0</mn></mtd>
-<mtd><msub><mi>T</mi><mrow>\u03bb</mrow></msub></mtd>
-</mtr>
-<mtr>
-<mtd><mn>0</mn></mtd>
-<mtd><msub><mi>S</mi><mrow>\u03c6</mrow></msub></mtd>
-<mtd><msub><mi>T</mi><mrow>\u03c6</mrow></msub></mtd>
+<mtd><mfrac><mrow><mo>\u2202</mo><mi>x</mi><mo>(</mo><mi>\u03bb</mi><mo>,</mo><mi>\u03c6</mi><mo>)</mo></mrow><mrow><mo>\u2202</mo><mi>\u03bb</mi></mrow></mfrac></mtd>
+<mtd><mfrac><mrow><mo>\u2202</mo><mi>x</mi><mo>(</mo><mi>\u03bb</mi><mo>,</mo><mi>\u03c6</mi><mo>)</mo></mrow><mrow><mo>\u2202</mo><mi>\u03c6</mi></mrow></mfrac></mtd>
</mtr>
<mtr>
-<mtd><mn>0</mn></mtd>
-<mtd><mn>0</mn></mtd>
-<mtd><mn>1</mn></mtd>
+<mtd><mfrac><mrow><mo>\u2202</mo><mi>y</mi><mo>(</mo><mi>\u03bb</mi><mo>,</mo><mi>\u03c6</mi><mo>)</mo></mrow><mrow><mo>\u2202</mo><mi>\u03bb</mi></mrow></mfrac></mtd>
+<mtd><mfrac><mrow><mo>\u2202</mo><mi>y</mi><mo>(</mo><mi>\u03bb</mi><mo>,</mo><mi>\u03c6</mi><mo>)</mo></mrow><mrow><mo>\u2202</mo><mi>\u03c6</mi></mrow></mfrac></mtd>
</mtr>
</mtable>
</mfenced>
-<mo>�</mo>
-<mfenced close="]" open="[">
-<mtable>
-<mtr><mtd><mi>x</mi></mtd></mtr>
-<mtr><mtd><mi>y</mi></mtd></mtr>
-<mtr><mtd><mn>1</mn></mtd></mtr>
-</mtable>
-</mfenced>
</math>
-</p><p>
-Dans ce cas particulier, les facteurs d\u2019�chelles <var>S</var> correspondent � la taille des pixels en degr�s
-et les termes de translations <var>T</var> correspondent aux coordonn�es g�ographiques d\u2019un coin de l\u2019image
-(pas n�cessairement le coin inf�rieur gauche si certains axes ont �t� retourn�s).
-Cette interpr�tation directe n\u2019est possible que lorsque les contraintes �num�r�es plus haut sont respect�es.
-Les coefficients des matrices deviennent plus complexes si l\u2019image a un cisaillement ou une rotation,
-ou si les coordonn�es des pixels ne commencent pas � (0,0).
-Toutefois il n\u2019est pas n�cessaire d\u2019utiliser des �quations plus complexes pour g�rer des cas plus g�n�riques.
-L\u2019exemple ci-dessous prend comme point de d�part la matrice d\u2019une ��conversion initiale��
-dans laquelle les coefficients <var>S</var> et <var>T</var> sont les valeurs relativement simples donn�es ci-dessus.
-Ensuite la direction de l\u2019axe des <var>y</var> est invers�e de mani�re � correspondre
-� la convention habituelle des syst�mes de coordonn�es des images (changement 1),
-et les axes sont intervertis de mani�re � avoir la latitude avant la longitude (changement 2).
-Notez que les concat�nations de transformations affines �crites sous forme de multiplications matricielles
-se lisent de droite � gauche:
-<var>A</var>�<var>B</var>�<var>C</var> est �quivalent � d\u2019abord appliquer l\u2019op�ration <var>C</var>,
-suivit de l\u2019op�ration <var>B</var> et finalement l\u2019op�ration <var>A</var>.
+
+<p>
+Dans la suite de ce texte nous abr�gerons \u2202<var>x</var>(<var>\u03bb</var>,<var>\u03c6</var>) par \u2202<var>x</var> et de m�me pour \u2202<var>y</var>,
+mais il faut garder � l\u2019esprit que chacune de ces valeurs d�pendent de la coordonn�e (<var>\u03bb</var>,<var>\u03c6</var>) originale.
+Le premier �l�ment de la matrice (\u2202<var>x</var>/\u2202<var>\u03bb</var>) nous indique � quel d�placement vers l\u2019Est
+(<var>x</var> en m�tres) correspond un d�placement de un degr� de longitude (<var>\u03bb</var>).
+De m�me, le dernier �l�ment de la matrice (\u2202<var>y</var>/\u2202<var>\u03c6</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>\u03c6</var>).
+Les autres �l�ments (\u2202<var>x</var>/\u2202<var>\u03c6</var> et \u2202<var>y</var>/\u2202<var>\u03bb</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\u2019� la position g�ographique (<var>\u03bb</var>,<var>\u03c6</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.
</p>
+
<table class="hidden"><tr>
-<th>Changement 2</th><th/>
-<th>Changement 1</th><th/>
-<th>Conversion initiale</th><th/>
-<th>Op�rations combin�es</th>
-</tr><tr>
-<td style="vertical-align: middle">
+<td><img alt="Exemple de d�riv�es d\u2019une projection cartographique" src="../images/Derivatives.png" style="border: solid 1px"/></td>
+<td style="padding-left: 30px; vertical-align: middle">
+<p>o� les vecteurs sont reli�s � la matrice par:</p>
<math xmlns="http://www.w3.org/1998/Math/MathML" alttext="MathML capable browser required" display="block">
+<mtable><mtr>
+<mtd>
+<mover><mi>U</mi><mo>\u2192</mo></mover><mo>=</mo>
<mfenced close="]" open="[">
<mtable>
<mtr>
-<mtd><mn>0</mn></mtd>
-<mtd><mn>1</mn></mtd>
-<mtd><mn>0</mn></mtd>
-</mtr>
-<mtr>
-<mtd><mn>1</mn></mtd>
-<mtd><mn>0</mn></mtd>
-<mtd><mn>0</mn></mtd>
+<mtd><mfrac><mrow><mo>\u2202</mo><mi>x</mi></mrow><mrow><mo>\u2202</mo><mi>\u03bb</mi></mrow></mfrac></mtd>
</mtr>
<mtr>
-<mtd><mn>0</mn></mtd>
-<mtd><mn>0</mn></mtd>
-<mtd><mn>1</mn></mtd>
+<mtd><mfrac><mrow><mo>\u2202</mo><mi>y</mi></mrow><mrow><mo>\u2202</mo><mi>\u03bb</mi></mrow></mfrac></mtd>
</mtr>
</mtable>
</mfenced>
-</math>
-</td>
-<td style="vertical-align: middle; padding-left: 15px; padding-right: 15px">�</td>
-<td style="vertical-align: middle">
-<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
+</mtd>
+<mtd><mtext>et</mtext></mtd>
+<mtd>
+<mover><mi>V</mi><mo>\u2192</mo></mover><mo>=</mo>
<mfenced close="]" open="[">
<mtable>
<mtr>
-<mtd><mn>1</mn></mtd>
-<mtd><mn>0</mn></mtd>
-<mtd><mn>0</mn></mtd>
-</mtr>
-<mtr>
-<mtd><mn>0</mn></mtd>
-<mtd><mn>-1</mn></mtd>
-<msub><mi>N</mi><mrow><mi>y</mi></mrow></msub>
+<mtd><mfrac><mrow><mo>\u2202</mo><mi>x</mi></mrow><mrow><mo>\u2202</mo><mi>\u03c6</mi></mrow></mfrac></mtd>
</mtr>
<mtr>
-<mtd><mn>0</mn></mtd>
-<mtd><mn>0</mn></mtd>
-<mtd><mn>1</mn></mtd>
+<mtd><mfrac><mrow><mo>\u2202</mo><mi>y</mi></mrow><mrow><mo>\u2202</mo><mi>\u03c6</mi></mrow></mfrac></mtd>
</mtr>
</mtable>
</mfenced>
-</math>
-</td>
-<td style="vertical-align: middle; padding-left: 15px; padding-right: 15px">�</td>
-<td style="vertical-align: middle">
-<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
-<mfenced close="]" open="[">
-<mtable>
-<mtr>
-<mtd><mfrac>
-<mrow>
-<msub><mi>\u03bb</mi><mrow>max</mrow></msub><mo>-</mo>
-<msub><mi>\u03bb</mi><mrow>min</mrow></msub>
-</mrow><mrow>
-<msub><mi>N</mi><mrow><mi>x</mi></mrow></msub>
-</mrow>
-</mfrac></mtd>
-<mtd><mn>0</mn></mtd>
-<mtd><msub><mi>\u03bb</mi><mrow>min</mrow></msub></mtd>
-</mtr>
-<mtr>
-<mtd><mn>0</mn></mtd>
-<mtd><mfrac>
-<mrow>
-<msub><mi>\u03c6</mi><mrow>max</mrow></msub><mo>-</mo>
-<msub><mi>\u03c6</mi><mrow>min</mrow></msub>
-</mrow><mrow>
-<msub><mi>N</mi><mrow><mi>y</mi></mrow></msub>
-</mrow>
-</mfrac></mtd>
-<mtd><msub><mi>\u03c6</mi><mrow>min</mrow></msub></mtd>
-</mtr>
-<mtr>
-<mtd><mn>0</mn></mtd>
-<mtd><mn>0</mn></mtd>
-<mtd><mn>1</mn></mtd>
-</mtr>
-</mtable>
-</mfenced>
-</math>
-</td>
-<td style="vertical-align: middle; padding-left: 15px; padding-right: 15px">=</td>
-<td style="vertical-align: middle">
-<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
-<mfenced close="]" open="[">
-<mtable>
-<mtr>
-<mtd><mn>0</mn></mtd>
-<mtd><mo>-</mo><mfrac>
-<mrow>
-<msub><mi>\u03c6</mi><mrow>max</mrow></msub><mo>-</mo>
-<msub><mi>\u03c6</mi><mrow>min</mrow></msub>
-</mrow><mrow>
-<msub><mi>N</mi><mrow><mi>y</mi></mrow></msub>
-</mrow>
-</mfrac></mtd>
-<mtd><msub><mi>\u03c6</mi><mrow>max</mrow></msub></mtd>
-</mtr>
-<mtr>
-<mtd><mfrac>
-<mrow>
-<msub><mi>\u03bb</mi><mrow>max</mrow></msub><mo>-</mo>
-<msub><mi>\u03bb</mi><mrow>min</mrow></msub>
-</mrow><mrow>
-<msub><mi>N</mi><mrow><mi>x</mi></mrow></msub>
-</mrow>
-</mfrac></mtd>
-<mtd><mn>0</mn></mtd>
-<mtd><msub><mi>\u03bb</mi><mrow>min</mrow></msub></mtd>
-</mtr>
-<mtr>
-<mtd><mn>0</mn></mtd>
-<mtd><mn>0</mn></mtd>
-<mtd><mn>1</mn></mtd>
-</mtr>
-</mtable>
-</mfenced>
-</math>
-</td>
-</tr></table>
-<p>
-Un principe cl� est qu\u2019il n\u2019y a pas besoin d\u2019�crire un code d�di� � ce type d\u2019op�rations sur les axes.
-Ces op�rations, et bien d\u2019autres, sont prises en compte naturellement par l\u2019alg�bre matricielle.
-On y gagne en g�n�ricit� du code et en performance.
-Apache <abbr title="Spatial Information System">SIS</abbr> suit ce principe en utilisant les tranformations affine pour toutes les op�rations
-o� elles peuvent s\u2019appliquer.
-Il n\u2019y a par exemple aucun code d�di� au changement de l\u2019ordre des ordonn�es dans une coordonn�e.
-</p>
-</div>
-
-<h4 id="AffineTransformAPI"><span class="section-number">3.3.1.2.</span> Int�gration avec les biblioth�ques graphiques</h4>
-<p>
-A peu pr�s toutes les biblioth�ques graphiques supportent une forme de transformation de coordonn�es,
-souvent les <cite>transformations affines</cite> ou une l�g�re g�n�ralisation.
-Chaque biblioth�que d�fini son propre <abbr title="Application Programming Interface">API</abbr>.
-Quelques exemples sont:
-</p>
-<table>
-<caption>Impl�mentations des transformations affines dans des biblioth�ques graphiques</caption>
-<tr><th>Biblioth�que</th> <th>Implementation de la transformation</th> <th>Dimensions</th></tr>
-<tr><td>Java2D</td> <td><code>java.awt.geom.AffineTransform</code></td> <td>2</td></tr>
-<tr><td>Java3D</td> <td><code>javax.media.j3d.Transform3D</code></td> <td>3</td></tr>
-<tr><td>JavaFX</td> <td><code>javafx.scene.transform.Affine</code></td> <td>2 ou 3</td></tr>
-<tr><td>Java Advanced Imaging (<abbr>JAI</abbr>)</td> <td><code>javax.media.jai.PerspectiveTransform</code></td> <td>2</td></tr>
-<tr><td>Android</td> <td><code>android.graphics.Matrix</code></td> <td>2</td></tr>
-</table>
-<p>
-Toutefois dans plusieurs cas, les transformations affines sont les seuls types d\u2019op�rations support�es par la biblioth�que graphique.
-Apache <abbr title="Spatial Information System">SIS</abbr> a besoin de g�rer un plus grand nombre de type d\u2019op�rations,
-parmi lesquelles les transformations affines ne sont que des cas particuliers.
-Les projections cartographiques et les changements de r�f�rentiels notamment,
-ne peuvent pas �tre repr�sent�s par des transformations affines.
-<abbr>SIS</abbr> a aussi besoin de transformer des points ayant un nombre arbitraire de dimensions,
-alors que les <abbr>API</abbr> cit�s ci-haut restreignent leur usage � un nombre fixe de dimensions.
-Pour ces raisons, <abbr>SIS</abbr> ne peut pas utiliser directement ces <abbr>API</abbr>.
-<abbr>SIS</abbr> utilise plut�t une interface plus abstraite, <code class="GeoAPI">org.opengis.referencing.transform.MathTransform</code>.
-Mais dans le cas particulier o� la transformation est r�ellement affine, <abbr>SIS</abbr> peut essayer d\u2019utiliser
-une impl�mentation existante, surtout Java2D.
-Par exemple le code suivant peut �tre utilis� dans les situations o� un objet Java2D est d�sir�:
-</p>
-<pre><code class="GeoAPI">MathTransform</code> mt = ...; <code class="comment">// N\u2019importe quelle instance cr��e par Apache SIS.
-</code><b>if</b> (mt <b>instanceof</b> AffineTransform) {
- AffineTransform at = (AffineTransform) mt;
- <code class="comment">// Utiliser l\u2019API de Java2D API � partir d\u2019ici.
-</code>}</pre>
-<p>
-Toutefois <abbr>SIS</abbr> n\u2019utilisera Java2D que sur une base opportuniste.
-Le for�age de type ci-haut n\u2019est pas garantit de r�ussir, m�me si l\u2019instance de
-<code class="GeoAPI">MathTransform</code> r�pond aux conditions qui devrait permettre un usage de Java2D.
-</p>
-
-<h3 id="TransformDerivative"><span class="section-number">3.3.2.</span> D�riv�es partielles des op�rations</h3>
-<p>
-La section pr�c�dente indiquait comment calculer les coordonn�es d\u2019un 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\u2019un 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\u2019hui un peu oubli�e mais pourtant encore utile.
-</p>
-
-<p>
-Appelons <var>P</var> une projection cartographique qui convertit une longitude et latitude (<var>\u03bb</var>,<var>\u03c6</var>) en degr�s
-vers une coordonn�e projet�e (<var>x</var>,<var>y</var>) en m�tres.
-Dans l\u2019expression ci-dessous, nous repr�sentons le r�sultat de la projection cartographique
-sous forme d\u2019une matrice colonne (la raison sera plus claire bient�t):
-</p>
-
-<math xmlns="http://www.w3.org/1998/Math/MathML" alttext="MathML capable browser required" display="block">
-<mi>P</mi><mo>(</mo><mi>\u03bb</mi><mo>,</mo><mi>\u03c6</mi><mo>)</mo>
-<mo>=</mo>
-<mfenced close="]" open="[">
-<mtable>
-<mtr><mtd><mi>x</mi><mo>(</mo><mi>\u03bb</mi><mo>,</mo><mi>\u03c6</mi><mo>)</mo></mtd></mtr>
-<mtr><mtd><mi>y</mi><mo>(</mo><mi>\u03bb</mi><mo>,</mo><mi>\u03c6</mi><mo>)</mo></mtd></mtr>
-</mtable>
-</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>
-
-<math xmlns="http://www.w3.org/1998/Math/MathML" alttext="MathML capable browser required" display="block">
-<msup><mi>P</mi><mo>\u2032</mo></msup><mo>(</mo><mi>\u03bb</mi><mo>,</mo><mi>\u03c6</mi><mo>)</mo>
-<mo>=</mo>
-<msub><mi>JAC</mi><mrow><mi>P</mi><mo>(</mo><mi>\u03bb</mi><mo>,</mo><mi>\u03c6</mi><mo>)</mo></mrow></msub>
-<mo>=</mo>
-<mfenced close="]" open="[">
-<mtable>
-<mtr>
-<mtd><mfrac><mrow><mo>\u2202</mo><mi>x</mi><mo>(</mo><mi>\u03bb</mi><mo>,</mo><mi>\u03c6</mi><mo>)</mo></mrow><mrow><mo>\u2202</mo><mi>\u03bb</mi></mrow></mfrac></mtd>
-<mtd><mfrac><mrow><mo>\u2202</mo><mi>x</mi><mo>(</mo><mi>\u03bb</mi><mo>,</mo><mi>\u03c6</mi><mo>)</mo></mrow><mrow><mo>\u2202</mo><mi>\u03c6</mi></mrow></mfrac></mtd>
-</mtr>
-<mtr>
-<mtd><mfrac><mrow><mo>\u2202</mo><mi>y</mi><mo>(</mo><mi>\u03bb</mi><mo>,</mo><mi>\u03c6</mi><mo>)</mo></mrow><mrow><mo>\u2202</mo><mi>\u03bb</mi></mrow></mfrac></mtd>
-<mtd><mfrac><mrow><mo>\u2202</mo><mi>y</mi><mo>(</mo><mi>\u03bb</mi><mo>,</mo><mi>\u03c6</mi><mo>)</mo></mrow><mrow><mo>\u2202</mo><mi>\u03c6</mi></mrow></mfrac></mtd>
-</mtr>
-</mtable>
-</mfenced>
-</math>
-
-<p>
-Dans la suite de ce texte nous abr�gerons \u2202<var>x</var>(<var>\u03bb</var>,<var>\u03c6</var>) par \u2202<var>x</var> et de m�me pour \u2202<var>y</var>,
-mais il faut garder � l\u2019esprit que chacune de ces valeurs d�pendent de la coordonn�e (<var>\u03bb</var>,<var>\u03c6</var>) originale.
-Le premier �l�ment de la matrice (\u2202<var>x</var>/\u2202<var>\u03bb</var>) nous indique � quel d�placement vers l\u2019Est
-(<var>x</var> en m�tres) correspond un d�placement de un degr� de longitude (<var>\u03bb</var>).
-De m�me, le dernier �l�ment de la matrice (\u2202<var>y</var>/\u2202<var>\u03c6</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>\u03c6</var>).
-Les autres �l�ments (\u2202<var>x</var>/\u2202<var>\u03c6</var> et \u2202<var>y</var>/\u2202<var>\u03bb</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\u2019� la position g�ographique (<var>\u03bb</var>,<var>\u03c6</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.
-</p>
-
-<table class="hidden"><tr>
-<td><img alt="Exemple de d�riv�es d\u2019une projection cartographique" src="../images/Derivatives.png" style="border: solid 1px"/></td>
-<td style="padding-left: 30px; vertical-align: middle">
-<p>o� les vecteurs sont reli�s � la matrice par:</p>
-<math xmlns="http://www.w3.org/1998/Math/MathML" alttext="MathML capable browser required" display="block">
-<mtable><mtr>
-<mtd>
-<mover><mi>U</mi><mo>\u2192</mo></mover><mo>=</mo>
-<mfenced close="]" open="[">
-<mtable>
-<mtr>
-<mtd><mfrac><mrow><mo>\u2202</mo><mi>x</mi></mrow><mrow><mo>\u2202</mo><mi>\u03bb</mi></mrow></mfrac></mtd>
-</mtr>
-<mtr>
-<mtd><mfrac><mrow><mo>\u2202</mo><mi>y</mi></mrow><mrow><mo>\u2202</mo><mi>\u03bb</mi></mrow></mfrac></mtd>
-</mtr>
-</mtable>
-</mfenced>
-</mtd>
-<mtd><mtext>et</mtext></mtd>
-<mtd>
-<mover><mi>V</mi><mo>\u2192</mo></mover><mo>=</mo>
-<mfenced close="]" open="[">
-<mtable>
-<mtr>
-<mtd><mfrac><mrow><mo>\u2202</mo><mi>x</mi></mrow><mrow><mo>\u2202</mo><mi>\u03c6</mi></mrow></mfrac></mtd>
-</mtr>
-<mtr>
-<mtd><mfrac><mrow><mo>\u2202</mo><mi>y</mi></mrow><mrow><mo>\u2202</mo><mi>\u03c6</mi></mrow></mfrac></mtd>
-</mtr>
-</mtable>
-</mfenced>
-</mtd>
-</mtr></mtable>
+</mtd>
+</mtr></mtable>
</math>
</td>
</tr></table>
@@ -3087,6 +2749,8 @@ et dont la m�thode <code class="SIS">ge
<li><a href="#GeoAPI-validators">Validations des instances</a></li>
<li><a href="#GeoAPI-tests">Ex�cution des tests pr�-d�finis</a></li></ul></li>
<li><a href="#DesignNote">Notes de design</a><ul>
+<li><a href="#AffineTransform">Utilisation des transformations affines</a><ul>
+<li><a href="#AffineTransformAPI">Int�gration avec les biblioth�ques graphiques</a></li></ul></li>
<li><a href="#MatrixLibrary">Particularit�s d\u2019une biblioth�que de calculs matriciels pour un SIG</a><ul>
<li><a href="#NonSquareMatrix">Que faire des matrices qui ne sont pas carr�es (et pourquoi)</a></li>
<li><a href="#MatrixLibrarySummary">La biblioth�que matricielle de Apache SIS</a></li></ul></li></ul></li></ul></nav>
@@ -3439,7 +3103,345 @@ qui sera ex�cut�e apr�s chacun des te
<h2 id="DesignNote"><span class="section-number">7.3.</span> Notes de design</h2>
<p>Les chapitres suivants expliquent les raisons derri�res certains choix d'impl�mentation de Apache <abbr title="Spatial Information System">SIS</abbr>.</p>
-<h3 id="MatrixLibrary"><span class="section-number">7.3.1.</span> Particularit�s d\u2019une biblioth�que de calculs matriciels pour un <abbr>SIG</abbr></h3>
+
+<h3 id="AffineTransform"><span class="section-number">7.3.1.</span> Utilisation des transformations affines</h3>
+<p>
+Parmi les sortes d\u2019op�rations qu\u2019un <abbr>SIG</abbr> doit effectuer sur les coordonn�es spatiales,
+les <cite>transformations affines</cite> sont � la fois relativement simples et tr�s fr�quentes.
+Les transformations affines peuvent repr�senter n\u2019importe quelle combinaison d\u2019�chelles, de cisaillements,
+de retournements, de rotations ou de translations, qui sont toutes des <cite>op�rations lin�aires</cite>.
+Les transformations affines ne peuvent pas effectuer des op�rations <cite>non-lin�aires</cite>
+telles que les projections cartographiques, mais couvrent n�anmoins de nombreux autres cas:
+</p>
+<ul>
+<li>Changer l\u2019ordre 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\u2019axe des <var>y</var> qui pointe habituellement vers le bas dans les images.</li>
+<li>Changer le m�ridien d\u2019origine, par exemple du m�ridien de <cite>Paris</cite> vers celui de <cite>Greenwich</cite>.</li>
+<li>Changer le nombre de dimensions, par exemple passer des coordonn�es 3D vers 2D en supprimant la hauteur.</li>
+<li>Convertir des unit�s de mesures, par exemple convertir des pieds en m�tres.</li>
+<li>Convertir des coordonn�es pixels 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>
+</ul>
+<p>
+Les transformations affines peuvent se combiner efficacement.
+Peu importe le nombre de transformations affines que l\u2019on encha�ne, le r�sultat sera exprimable par une seule transformation affine.
+Cette propri�t� est plus facilement visible lorsque les transformations affines sont exprim�es sous forme de matrices:
+pour combiner les op�rations, il suffit de multiplier les matrices.
+Le cas des conversions des coordonn�es pixels en coordonn�es g�ographiques ci-dessous donne un exemple.
+</p>
+
+<div class="example">
+<p><b>Exemple:</b>
+supposons que nous disposons d\u2019une image dont les coordonn�es des pixels sont repr�sent�es par (<var>x</var>,<var>y</var>).
+Supposons aussi que les contraintes suivantes sont respect�es:
+</p>
+<ul>
+<li>Il n\u2019y a ni cisaillement, ni rotation, ni retournement de l\u2019image.</li>
+<li>Tous les pixels ont la m�me largeur en degr�s de longitude.</li>
+<li>Tous les pixels ont la m�me hauteur en degr�s de latitude.</li>
+<li>Les coordonn�es des pixels commencent � (0,0) inclusivement.</li>
+</ul>
+<p>Alors la conversion des coordonn�es pixels (<var>x</var>,<var>y</var>)
+vers les coordonn�es g�ographiques (<var>\u03bb</var>,<var>\u03c6</var>)
+peut �tre repr�sent�e par les �quations suivantes,
+o� <var>N</var><sub><var>x</var></sub> est la largeur
+et <var>N</var><sub><var>y</var></sub> la hauteur de l\u2019image en nombre de pixels.
+</p><p>
+
+
+<math xmlns="http://www.w3.org/1998/Math/MathML" alttext="MathML capable browser required" display="block">
+<mtable>
+<mtr>
+<mtd><mo>\u03bb</mo></mtd>
+<mtd><mo>=</mo></mtd>
+<mtd><msub><mi>S</mi><mrow>\u03bb</mrow></msub><mi>x</mi><mo>+</mo><msub><mi>T</mi><mrow>\u03bb</mrow></msub></mtd>
+<mtd><mtext>��������where��������</mtext></mtd>
+<mtd><msub><mi>S</mi><mrow>\u03bb</mrow></msub></mtd>
+<mtd><mo>=</mo></mtd>
+<mtd>
+<mfrac>
+<mrow>
+<msub><mi>\u03bb</mi><mrow>max</mrow></msub><mo>-</mo>
+<msub><mi>\u03bb</mi><mrow>min</mrow></msub>
+</mrow><mrow>
+<msub><mi>N</mi><mrow><mi>x</mi></mrow></msub>
+</mrow>
+</mfrac>
+</mtd>
+<mtd><mtext>����and����</mtext></mtd>
+<mtd><msub><mi>T</mi><mrow>\u03bb</mrow></msub></mtd>
+<mtd><mo>=</mo></mtd>
+<mtd><msub><mi>\u03bb</mi><mrow>min</mrow></msub></mtd>
+</mtr>
+<mtr>
+<mtd><mo>\u03c6</mo></mtd>
+<mtd><mo>=</mo></mtd>
+<mtd><msub><mi>S</mi><mrow>\u03c6</mrow></msub><mi>y</mi><mo>+</mo><msub><mi>T</mi><mrow>\u03c6</mrow></msub></mtd>
+<mtd><mtext>��������where��������</mtext></mtd>
+<mtd><msub><mi>S</mi><mrow>\u03c6</mrow></msub></mtd>
+<mtd><mo>=</mo></mtd>
+<mtd>
+<mfrac>
+<mrow>
+<msub><mi>\u03c6</mi><mrow>max</mrow></msub><mo>-</mo>
+<msub><mi>\u03c6</mi><mrow>min</mrow></msub>
+</mrow><mrow>
+<msub><mi>N</mi><mrow><mi>y</mi></mrow></msub>
+</mrow>
+</mfrac>
+</mtd>
+<mtd><mtext>����and����</mtext></mtd>
+<mtd><msub><mi>T</mi><mrow>\u03c6</mrow></msub></mtd>
+<mtd><mo>=</mo></mtd>
+<mtd><msub><mi>\u03c6</mi><mrow>min</mrow></msub></mtd>
+</mtr>
+</mtable>
+</math>
+</p><p>
+Les �quations ci-dessus peuvent �tre repr�sent�es sous forme de matrices comme ci-dessous:
+</p><p>
+
+
+<math xmlns="http://www.w3.org/1998/Math/MathML" alttext="MathML capable browser required" display="block">
+<mfenced close="]" open="[">
+<mtable>
+<mtr><mtd><mi>\u03bb</mi></mtd></mtr>
+<mtr><mtd><mi>\u03c6</mi></mtd></mtr>
+<mtr><mtd><mn>1</mn></mtd></mtr>
+</mtable>
+</mfenced>
+<mo>=</mo>
+<mfenced close="]" open="[">
+<mtable>
+<mtr>
+<mtd><msub><mi>S</mi><mrow>\u03bb</mrow></msub></mtd>
+<mtd><mn>0</mn></mtd>
+<mtd><msub><mi>T</mi><mrow>\u03bb</mrow></msub></mtd>
+</mtr>
+<mtr>
+<mtd><mn>0</mn></mtd>
+<mtd><msub><mi>S</mi><mrow>\u03c6</mrow></msub></mtd>
+<mtd><msub><mi>T</mi><mrow>\u03c6</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 close="]" open="[">
+<mtable>
+<mtr><mtd><mi>x</mi></mtd></mtr>
+<mtr><mtd><mi>y</mi></mtd></mtr>
+<mtr><mtd><mn>1</mn></mtd></mtr>
+</mtable>
+</mfenced>
+</math>
+</p><p>
+Dans ce cas particulier, les facteurs d\u2019�chelles <var>S</var> correspondent � la taille des pixels en degr�s
+et les termes de translations <var>T</var> correspondent aux coordonn�es g�ographiques d\u2019un coin de l\u2019image
+(pas n�cessairement le coin inf�rieur gauche si certains axes ont �t� retourn�s).
+Cette interpr�tation directe n\u2019est possible que lorsque les contraintes �num�r�es plus haut sont respect�es.
+Les coefficients des matrices deviennent plus complexes si l\u2019image a un cisaillement ou une rotation,
+ou si les coordonn�es des pixels ne commencent pas � (0,0).
+Toutefois il n\u2019est pas n�cessaire d\u2019utiliser des �quations plus complexes pour g�rer des cas plus g�n�riques.
+L\u2019exemple ci-dessous prend comme point de d�part la matrice d\u2019une ��conversion initiale��
+dans laquelle les coefficients <var>S</var> et <var>T</var> sont les valeurs relativement simples donn�es ci-dessus.
+Ensuite la direction de l\u2019axe des <var>y</var> est invers�e de mani�re � correspondre
+� la convention habituelle des syst�mes de coordonn�es des images (changement 1),
+et les axes sont intervertis de mani�re � avoir la latitude avant la longitude (changement 2).
+Notez que les concat�nations de transformations affines �crites sous forme de multiplications matricielles
+se lisent de droite � gauche:
+<var>A</var>�<var>B</var>�<var>C</var> est �quivalent � d\u2019abord appliquer l\u2019op�ration <var>C</var>,
+suivit de l\u2019op�ration <var>B</var> et finalement l\u2019op�ration <var>A</var>.
+</p>
+<table class="hidden"><tr>
+<th>Changement 2</th><th/>
+<th>Changement 1</th><th/>
+<th>Conversion initiale</th><th/>
+<th>Op�rations combin�es</th>
+</tr><tr>
+<td style="vertical-align: middle">
+<math xmlns="http://www.w3.org/1998/Math/MathML" alttext="MathML capable browser required" display="block">
+<mfenced close="]" open="[">
+<mtable>
+<mtr>
+<mtd><mn>0</mn></mtd>
+<mtd><mn>1</mn></mtd>
+<mtd><mn>0</mn></mtd>
+</mtr>
+<mtr>
+<mtd><mn>1</mn></mtd>
+<mtd><mn>0</mn></mtd>
+<mtd><mn>0</mn></mtd>
+</mtr>
+<mtr>
+<mtd><mn>0</mn></mtd>
+<mtd><mn>0</mn></mtd>
+<mtd><mn>1</mn></mtd>
+</mtr>
+</mtable>
+</mfenced>
+</math>
+</td>
+<td style="vertical-align: middle; padding-left: 15px; padding-right: 15px">�</td>
+<td style="vertical-align: middle">
+<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
+<mfenced close="]" open="[">
+<mtable>
+<mtr>
+<mtd><mn>1</mn></mtd>
+<mtd><mn>0</mn></mtd>
+<mtd><mn>0</mn></mtd>
+</mtr>
+<mtr>
+<mtd><mn>0</mn></mtd>
+<mtd><mn>-1</mn></mtd>
+<msub><mi>N</mi><mrow><mi>y</mi></mrow></msub>
+</mtr>
+<mtr>
+<mtd><mn>0</mn></mtd>
+<mtd><mn>0</mn></mtd>
+<mtd><mn>1</mn></mtd>
+</mtr>
+</mtable>
+</mfenced>
+</math>
+</td>
+<td style="vertical-align: middle; padding-left: 15px; padding-right: 15px">�</td>
+<td style="vertical-align: middle">
+<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
+<mfenced close="]" open="[">
+<mtable>
+<mtr>
+<mtd><mfrac>
+<mrow>
+<msub><mi>\u03bb</mi><mrow>max</mrow></msub><mo>-</mo>
+<msub><mi>\u03bb</mi><mrow>min</mrow></msub>
+</mrow><mrow>
+<msub><mi>N</mi><mrow><mi>x</mi></mrow></msub>
+</mrow>
+</mfrac></mtd>
+<mtd><mn>0</mn></mtd>
+<mtd><msub><mi>\u03bb</mi><mrow>min</mrow></msub></mtd>
+</mtr>
+<mtr>
+<mtd><mn>0</mn></mtd>
+<mtd><mfrac>
+<mrow>
+<msub><mi>\u03c6</mi><mrow>max</mrow></msub><mo>-</mo>
+<msub><mi>\u03c6</mi><mrow>min</mrow></msub>
+</mrow><mrow>
+<msub><mi>N</mi><mrow><mi>y</mi></mrow></msub>
+</mrow>
+</mfrac></mtd>
+<mtd><msub><mi>\u03c6</mi><mrow>min</mrow></msub></mtd>
+</mtr>
+<mtr>
+<mtd><mn>0</mn></mtd>
+<mtd><mn>0</mn></mtd>
+<mtd><mn>1</mn></mtd>
+</mtr>
+</mtable>
+</mfenced>
+</math>
+</td>
+<td style="vertical-align: middle; padding-left: 15px; padding-right: 15px">=</td>
+<td style="vertical-align: middle">
+<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
+<mfenced close="]" open="[">
+<mtable>
+<mtr>
+<mtd><mn>0</mn></mtd>
+<mtd><mo>-</mo><mfrac>
+<mrow>
+<msub><mi>\u03c6</mi><mrow>max</mrow></msub><mo>-</mo>
+<msub><mi>\u03c6</mi><mrow>min</mrow></msub>
+</mrow><mrow>
+<msub><mi>N</mi><mrow><mi>y</mi></mrow></msub>
+</mrow>
+</mfrac></mtd>
+<mtd><msub><mi>\u03c6</mi><mrow>max</mrow></msub></mtd>
+</mtr>
+<mtr>
+<mtd><mfrac>
+<mrow>
+<msub><mi>\u03bb</mi><mrow>max</mrow></msub><mo>-</mo>
+<msub><mi>\u03bb</mi><mrow>min</mrow></msub>
+</mrow><mrow>
+<msub><mi>N</mi><mrow><mi>x</mi></mrow></msub>
+</mrow>
+</mfrac></mtd>
+<mtd><mn>0</mn></mtd>
+<mtd><msub><mi>\u03bb</mi><mrow>min</mrow></msub></mtd>
+</mtr>
+<mtr>
+<mtd><mn>0</mn></mtd>
+<mtd><mn>0</mn></mtd>
+<mtd><mn>1</mn></mtd>
+</mtr>
+</mtable>
+</mfenced>
+</math>
+</td>
+</tr></table>
+<p>
+Un principe cl� est qu\u2019il n\u2019y a pas besoin d\u2019�crire un code d�di� � ce type d\u2019op�rations sur les axes.
+Ces op�rations, et bien d\u2019autres, sont prises en compte naturellement par l\u2019alg�bre matricielle.
+On y gagne en g�n�ricit� du code et en performance.
+Apache <abbr title="Spatial Information System">SIS</abbr> suit ce principe en utilisant les tranformations affine pour toutes les op�rations
+o� elles peuvent s\u2019appliquer.
+Il n\u2019y a par exemple aucun code d�di� au changement de l\u2019ordre des ordonn�es dans une coordonn�e.
+</p>
+</div>
+
+<h4 id="AffineTransformAPI"><span class="section-number">7.3.1.1.</span> Int�gration avec les biblioth�ques graphiques</h4>
+<p>
+A peu pr�s toutes les biblioth�ques graphiques supportent une forme de transformation de coordonn�es,
+souvent les <cite>transformations affines</cite> ou une l�g�re g�n�ralisation.
+Chaque biblioth�que d�fini son propre <abbr title="Application Programming Interface">API</abbr>.
+Quelques exemples sont:
+</p>
+<table>
+<caption>Impl�mentations des transformations affines dans des biblioth�ques graphiques</caption>
+<tr><th>Biblioth�que</th> <th>Implementation de la transformation</th> <th>Dimensions</th></tr>
+<tr><td>Java2D</td> <td><code>java.awt.geom.AffineTransform</code></td> <td>2</td></tr>
+<tr><td>Java3D</td> <td><code>javax.media.j3d.Transform3D</code></td> <td>3</td></tr>
+<tr><td>JavaFX</td> <td><code>javafx.scene.transform.Affine</code></td> <td>2 ou 3</td></tr>
+<tr><td>Java Advanced Imaging (<abbr>JAI</abbr>)</td> <td><code>javax.media.jai.PerspectiveTransform</code></td> <td>2</td></tr>
+<tr><td>Android</td> <td><code>android.graphics.Matrix</code></td> <td>2</td></tr>
+</table>
+<p>
+Toutefois dans plusieurs cas, les transformations affines sont les seuls types d\u2019op�rations support�es par la biblioth�que graphique.
+Apache <abbr title="Spatial Information System">SIS</abbr> a besoin de g�rer un plus grand nombre de type d\u2019op�rations,
+parmi lesquelles les transformations affines ne sont que des cas particuliers.
+Les projections cartographiques et les changements de r�f�rentiels notamment,
+ne peuvent pas �tre repr�sent�s par des transformations affines.
+<abbr>SIS</abbr> a aussi besoin de transformer des points ayant un nombre arbitraire de dimensions,
+alors que les <abbr>API</abbr> cit�s ci-haut restreignent leur usage � un nombre fixe de dimensions.
+Pour ces raisons, <abbr>SIS</abbr> ne peut pas utiliser directement ces <abbr>API</abbr>.
+<abbr>SIS</abbr> utilise plut�t une interface plus abstraite, <code class="GeoAPI">org.opengis.referencing.transform.MathTransform</code>.
+Mais dans le cas particulier o� la transformation est r�ellement affine, <abbr>SIS</abbr> peut essayer d\u2019utiliser
+une impl�mentation existante, surtout Java2D.
+Par exemple le code suivant peut �tre utilis� dans les situations o� un objet Java2D est d�sir�:
+</p>
+<pre><code class="GeoAPI">MathTransform</code> mt = ...; <code class="comment">// N\u2019importe quelle instance cr��e par Apache SIS.
+</code><b>if</b> (mt <b>instanceof</b> AffineTransform) {
+ AffineTransform at = (AffineTransform) mt;
+ <code class="comment">// Utiliser l\u2019API de Java2D API � partir d\u2019ici.
+</code>}</pre>
+<p>
+Toutefois <abbr>SIS</abbr> n\u2019utilisera Java2D que sur une base opportuniste.
+Le for�age de type ci-haut n\u2019est pas garantit de r�ussir, m�me si l\u2019instance de
+<code class="GeoAPI">MathTransform</code> r�pond aux conditions qui devrait permettre un usage de Java2D.
+</p>
+
+
+<h3 id="MatrixLibrary"><span class="section-number">7.3.2.</span> Particularit�s d\u2019une biblioth�que de calculs matriciels pour un <abbr>SIG</abbr></h3>
<p>
Les <abbr>SIG</abbr> font un usage intensif de matrices afin d\u2019afficher 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.
@@ -3486,7 +3488,7 @@ Ces fonctions tentent de r�soudre le pr
au prix de la performance pendant une �tape (la <em>pr�paration</em> de la transformation) o� elle n\u2019est pas jug�e critique.
</p>
-<h4 id="NonSquareMatrix"><span class="section-number">7.3.1.1.</span> Que faire des matrices qui ne sont pas carr�es (et pourquoi)</h4>
+<h4 id="NonSquareMatrix"><span class="section-number">7.3.2.1.</span> Que faire des matrices qui ne sont pas carr�es (et pourquoi)</h4>
<p>
Apache <abbr title="Spatial Information System">SIS</abbr> a tr�s souvent besoin d\u2019inverser des matrices,
afin d\u2019obtenir une conversion de coordonn�es dans la direction inverse de la conversion originale.
@@ -3588,7 +3590,7 @@ En cons�quence dans le cas des syst�me
mais en cas de succ�s les conversions obtenues seront garanties exactes (aux erreurs d\u2019arrondissement pr�ts).
</p>
-<h4 id="MatrixLibrarySummary"><span class="section-number">7.3.1.2.</span> La biblioth�que matricielle de Apache <abbr title="Spatial Information System">SIS</abbr></h4>
+<h4 id="MatrixLibrarySummary"><span class="section-number">7.3.2.2.</span> La biblioth�que matricielle de Apache <abbr title="Spatial Information System">SIS</abbr></h4>
<p>
En r�sum�, les besoins qui ont amen� Apache <abbr>SIS</abbr> � fournir ses propres fonctions de calculs matriciels sont:
</p>