Author: desruisseaux
Date: Sun Aug  2 21:59:35 2015
New Revision: 1693832

URL: http://svn.apache.org/r1693832
Log:
Minor documentation (no code change).

Modified:
    
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/Initializer.java
    
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/LambertConicConformal.java
    
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/Mercator.java
    
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/NormalizedProjection.java

Modified: 
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/Initializer.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/Initializer.java?rev=1693832&r1=1693831&r2=1693832&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/Initializer.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/Initializer.java
 [UTF-8] Sun Aug  2 21:59:35 2015
@@ -37,13 +37,22 @@ import static org.apache.sis.internal.ut
  * Helper class for map projection constructions, providing formulas normally 
needed only at construction time.
  * Since map projection constructions should not happen very often, we afford 
using some double-double arithmetic.
  * The main intend is not to provide more accurate coordinate conversions 
(while it may be a nice side-effect),
- * but to improve the result of concatenations of (de)normalization matrices 
with the matrices of other transforms,
- * as found in transformation chains.
+ * but to improve the result of matrix multiplications when the map projection 
is part of a more complex chain
+ * of transformations. More specifically we want to be able:
+ *
+ * <ul>
+ *   <li>To convert degrees to radians, than back to degrees and find the 
original value.</li>
+ *   <li>To convert axis length (optionally with flattening factor) to 
excentricity, then back
+ *       to axis length and find the original value.</li>
+ * </ul>
+ *
+ * This has visible effects on WKT formatting among others, but also in our 
capability to detect simplification
+ * opportunities in relatively complex chains of transformations.
  *
  * <p>As a general rule, we stop storing result with double-double precision 
after the point where we need
  * transcendental functions (sine, logarithm, <i>etc.</i>), since we do not 
have double-double versions of
  * those functions. Digits after the {@code double} part are usually not 
significant in such cases, except
- * in some relatively rare scenarios like 1 ± (a result much smaller than 
1).</p>
+ * in some relatively rare scenarios like 1 ± x where <var>x</var> is much 
smaller than 1.</p>
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @since   0.6
@@ -142,6 +151,12 @@ final class Initializer {
                  */
                 isIvfDefinitive = false;
             }
+            /*
+             * The ellipsoid parameters (a, b or ivf) are assumed accurate in 
base 10 rather than in base 2,
+             * because they are defined by authorities. For example the 
semi-major axis length of the WGS84
+             * ellipsoid is equal to exactly 6378137 metres by definition of 
that ellipsoid. The DoubleDouble
+             * constructor applies corrections for making those values more 
accurate in base 10 rather than 2.
+             */
             if (isIvfDefinitive) {
                 final DoubleDouble f = new 
DoubleDouble(parameters.parameter(Constants.INVERSE_FLATTENING).doubleValue());
                 f.inverseDivide(1,0);
@@ -178,11 +193,20 @@ final class Initializer {
                 k.inverseDivide(b, 0);
             }
         }
-        context.normalizeGeographicInputs(λ0);
+        /*
+         * Scale factor is assumed more accurate in base 10 than in base 2 for 
the same reason than for the
+         * ellipsoid parameters (i.e. is a value given by authority as part of 
map projection definition).
+         * Again, DoubleDouble constructor will take care of computing a 
correction.
+         */
         final ParameterDescriptor<? extends Number> scaleFactor = 
roles.get(ParameterRole.SCALE_FACTOR);
         if (scaleFactor != null) {
             k.multiply(getAndStore(scaleFactor));
         }
+        /*
+         * Set meridian rotation, scale factor, false easting and false 
northing parameter values
+         * in the (de)normalization matrices.
+         */
+        context.normalizeGeographicInputs(λ0);
         final MatrixSIS denormalize = context.getMatrix(false);
         denormalize.convertAfter(0, k, new DoubleDouble(fe));
         denormalize.convertAfter(1, k, new DoubleDouble(fn));

Modified: 
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/LambertConicConformal.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/LambertConicConformal.java?rev=1693832&r1=1693831&r2=1693832&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/LambertConicConformal.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/LambertConicConformal.java
 [UTF-8] Sun Aug  2 21:59:35 2015
@@ -269,7 +269,7 @@ public class LambertConicConformal exten
         final double t1 = expOfNorthing(φ1, excentricity*sinφ1);
         /*
          * Compute n = (ln m₁ – ln m₂) / (ln t₁ – ln t₂), which we rewrite as 
ln(m₁/m₂) / ln(t₁/t₂)
-         * since division is less at risk of precision lost than subtraction. 
Note that this equation
+         * for reducing the amount of calls to the logarithmic function. Note 
that this equation
          * tends toward 0/0 if φ₁ ≈ φ₂, which force us to do a special check 
for the SP1 case.
          */
         if (abs(φ1 - φ2) >= ANGULAR_TOLERANCE) {  // Should be 'true' for 2SP 
case.

Modified: 
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/Mercator.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/Mercator.java?rev=1693832&r1=1693831&r2=1693832&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/Mercator.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/Mercator.java
 [UTF-8] Sun Aug  2 21:59:35 2015
@@ -246,6 +246,11 @@ public class Mercator extends ConformalP
         denormalize.convertBefore(0, k0, null);
         denormalize.convertBefore(1, k0, null);
         if (λ0 != 0) {
+            /*
+             * Use double-double arithmetic here for consistency with the work 
done in the normalization matrix.
+             * The intend is to have exact value at 'double' precision when 
computing Matrix.invert(). Note that
+             * there is no such goal for other parameters computed from sine 
or consine functions.
+             */
             final DoubleDouble offset = DoubleDouble.createDegreesToRadians();
             offset.multiply(-λ0);
             denormalize.convertBefore(0, null, offset);

Modified: 
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/NormalizedProjection.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/NormalizedProjection.java?rev=1693832&r1=1693831&r2=1693832&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/NormalizedProjection.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/NormalizedProjection.java
 [UTF-8] Sun Aug  2 21:59:35 2015
@@ -410,7 +410,7 @@ public abstract class NormalizedProjecti
     NormalizedProjection(final Initializer initializer) {
         context             = initializer.context;
         excentricitySquared = initializer.excentricitySquared.value;
-        excentricity        = sqrt(excentricitySquared);
+        excentricity        = sqrt(excentricitySquared);  // 
DoubleDouble.sqrt() does not make any difference here.
         inverse             = new Inverse();
     }
 


Reply via email to