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 2014/01/29 19:33:27 UTC
svn commit: r1562541 - in /sis/branches/JDK7/core:
sis-referencing/src/main/java/org/apache/sis/geometry/
sis-referencing/src/test/java/org/apache/sis/geometry/
sis-referencing/src/test/java/org/apache/sis/referencing/
sis-referencing/src/test/java/org...
Author: desruisseaux
Date: Wed Jan 29 18:33:26 2014
New Revision: 1562541
URL: http://svn.apache.org/r1562541
Log:
Added a check in the GeneralEnvelope class for range validity, and added JUnit tests.
Modified:
sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractEnvelope.java
sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/geometry/ArrayEnvelope.java
sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/geometry/GeneralEnvelope.java
sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/geometry/SubEnvelope.java
sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/geometry/GeneralEnvelopeTest.java
sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/CRSTest.java
sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/crs/HardCodedCRS.java
sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractEnvelope.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractEnvelope.java?rev=1562541&r1=1562540&r2=1562541&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractEnvelope.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractEnvelope.java [UTF-8] Wed Jan 29 18:33:26 2014
@@ -1185,7 +1185,10 @@ public abstract class AbstractEnvelope i
* @param dimension The dimension to set.
* @param lower The limit in the direction of decreasing ordinate values.
* @param upper The limit in the direction of increasing ordinate values.
+ * @throws UnmodifiableGeometryException If this envelope is not modifiable.
* @throws IndexOutOfBoundsException If the given index is out of bounds.
+ * @throws IllegalArgumentException If {@code lower > upper}, this envelope has a CRS
+ * and the axis range meaning at the given dimension is not "wraparound".
*/
void setRange(final int dimension, final double lower, final double upper)
throws IndexOutOfBoundsException
Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/geometry/ArrayEnvelope.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/geometry/ArrayEnvelope.java?rev=1562541&r1=1562540&r2=1562541&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/geometry/ArrayEnvelope.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/geometry/ArrayEnvelope.java [UTF-8] Wed Jan 29 18:33:26 2014
@@ -28,8 +28,10 @@ import org.opengis.geometry.DirectPositi
import org.opengis.geometry.MismatchedDimensionException;
import org.opengis.geometry.MismatchedReferenceSystemException;
import org.opengis.metadata.extent.GeographicBoundingBox;
+import org.opengis.referencing.cs.RangeMeaning;
import org.opengis.referencing.cs.CoordinateSystemAxis;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.apache.sis.referencing.IdentifiedObjects;
import org.apache.sis.referencing.CommonCRS;
import org.apache.sis.util.ArraysExt;
import org.apache.sis.util.CharSequences;
@@ -116,6 +118,7 @@ class ArrayEnvelope extends AbstractEnve
ordinates[i ] = lowerCorner.getOrdinate(i);
ordinates[i + dimension] = upperCorner.getOrdinate(i);
}
+ verifyRanges(crs, ordinates);
}
/**
@@ -172,6 +175,7 @@ class ArrayEnvelope extends AbstractEnve
ordinates[i] = lowerCorner.getOrdinate(i);
ordinates[i+dimension] = upperCorner.getOrdinate(i);
}
+ verifyRanges(crs, ordinates);
}
/**
@@ -197,6 +201,7 @@ class ArrayEnvelope extends AbstractEnve
}
}
crs = CommonCRS.defaultGeographic();
+ verifyRanges(crs, ordinates);
}
/**
@@ -317,6 +322,59 @@ scanNumber: while ((i += Character.charC
}
/**
+ * Verifies the validity of the range of ordinates values in the given array.
+ * If the given CRS is null, then this method conservatively does nothing.
+ * Otherwise this method performs the following verifications:
+ *
+ * <ul>
+ * <li>{@code lower > upper} is allowed only for axes having {@link RangeMeaning#WRAPAROUND}.</li>
+ * </ul>
+ *
+ * This method does <strong>not</strong> verify if the ordinate values are between the axis minimum and
+ * maximum values. This is because out-of-range values exist in practice but do not impact the working
+ * of {@code add(…)}, {@code intersect(…)}, {@code contains(…)} and similar methods. This in contrast
+ * with the checks listed above, where failure to meet those conditions will cause the methods to
+ * behave in an unexpected way.
+ *
+ * {@section Implementation consistency}
+ * The checks performed by this method shall be consistent with the checks performed by the following methods:
+ * <ul>
+ * <li>{@link GeneralEnvelope#setCoordinateReferenceSystem(CoordinateReferenceSystem)}</li>
+ * <li>{@link GeneralEnvelope#setRange(int, double, double)}</li>
+ * <li>{@link SubEnvelope#setRange(int, double, double)}</li>
+ * </ul>
+ *
+ * @param crs The coordinate reference system, or {@code null}.
+ * @param ordinates The array of ordinate values to verify.
+ */
+ static void verifyRanges(final CoordinateReferenceSystem crs, final double[] ordinates) {
+ if (crs != null) {
+ final int dimension = ordinates.length >>> 1;
+ for (int i=0; i<dimension; i++) {
+ final double lower = ordinates[i];
+ final double upper = ordinates[i + dimension];
+ if (lower > upper && !isWrapAround(crs, i)) {
+ throw new IllegalArgumentException(illegalRange(crs, dimension, lower, upper));
+ }
+ }
+ }
+ }
+
+ /**
+ * Creates an error message for an illegal ordinates range at the given dimension.
+ * This is used for formatting the exception message.
+ */
+ static String illegalRange(final CoordinateReferenceSystem crs,
+ final int dimension, final double lower, final double upper)
+ {
+ Object name = IdentifiedObjects.getName(getAxis(crs, dimension), null);
+ if (name == null) {
+ name = dimension; // Paranoiac fallback (name should never be null).
+ }
+ return Errors.format(Errors.Keys.IllegalOrdinateRange_3, lower, upper, name);
+ }
+
+ /**
* Returns the index of the first valid ordinate value of the lower corner in the {@link #ordinates} array.
* This is always 0, unless this envelope is a {@link SubEnvelope}.
*
Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/geometry/GeneralEnvelope.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/geometry/GeneralEnvelope.java?rev=1562541&r1=1562540&r2=1562541&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/geometry/GeneralEnvelope.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/geometry/GeneralEnvelope.java [UTF-8] Wed Jan 29 18:33:26 2014
@@ -91,6 +91,24 @@ import static org.apache.sis.math.MathFu
* </ul>
* </td></tr></table>
*
+ * {@section Envelope validation}
+ * If and only if this envelope is associated to a non-null CRS, then constructors and setter methods
+ * in this class perform the following checks:
+ *
+ * <ul>
+ * <li>The number of CRS dimensions must be equals to <code>this.{@linkplain #getDimension()}</code>.</li>
+ * <li>For each dimension <var>i</var>,
+ * <code>{@linkplain #getLower(int) getLower}(i) > {@linkplain #getUpper(int) getUpper}(i)</code> is allowed
+ * only if the {@linkplain org.apache.sis.referencing.cs.DefaultCoordinateSystemAxis#getRangeMeaning() coordinate
+ * system axis range meaning} is {@code WRAPAROUND}.</li>
+ * </ul>
+ *
+ * Note that this class does <em>not</em> require the ordinate values to be between the axis minimum and
+ * maximum values. This flexibility exists because out-of-range values happen in practice, while they do
+ * not hurt the working of {@code add(…)}, {@code intersect(…)}, {@code contains(…)} and similar methods.
+ * This in contrast with the {@code lower > upper} case, which cause the above-cited methods to behave in
+ * an unexpected way if the axis does not have wraparound range meaning.
+ *
* @author Martin Desruisseaux (IRD, Geomatys)
* @author Johann Sorel (Geomatys)
* @since 0.3 (derived from geotk-2.4)
@@ -259,21 +277,42 @@ public class GeneralEnvelope extends Arr
/**
* Sets the coordinate reference system in which the coordinate are given.
- * This method <strong>does not</strong> reproject the envelope, and do not
- * check if the envelope is contained in the new domain of validity.
+ * This method <strong>does not</strong> reproject the envelope, and does
+ * not check if the envelope is contained in the new domain of validity.
*
* <p>If the envelope coordinates need to be transformed to the new CRS, consider
* using {@link Envelopes#transform(Envelope, CoordinateReferenceSystem)} instead.</p>
*
* @param crs The new coordinate reference system, or {@code null}.
- * @throws MismatchedDimensionException if the specified CRS doesn't have the expected
- * number of dimensions.
+ * @throws MismatchedDimensionException if the specified CRS doesn't have the expected number of dimensions.
+ * @throws IllegalStateException if a range of ordinate values in this envelope is compatible with the given CRS.
+ * See <cite>Envelope validation</cite> in class javadoc for more details.
*/
public void setCoordinateReferenceSystem(final CoordinateReferenceSystem crs)
throws MismatchedDimensionException
{
ensureDimensionMatches("crs", getDimension(), crs);
- this.crs = crs;
+ /*
+ * The check performed here shall be identical to ArrayEnvelope.verifyRanges(crs, ordinates)
+ * except that it may verify only a subset of the ordinate array and throws a different kind
+ * of exception in caseo of failure.
+ */
+ if (crs != null) {
+ final int beginIndex = beginIndex();
+ final int endIndex = endIndex();
+ final int d = ordinates.length >>> 1;
+ for (int i=beginIndex; i<endIndex; i++) {
+ final double lower = ordinates[i];
+ final double upper = ordinates[i + d];
+ if (lower > upper) {
+ final int j = i - beginIndex;
+ if (!isWrapAround(crs, j)) {
+ throw new IllegalStateException(illegalRange(crs, j, lower, upper));
+ }
+ }
+ }
+ }
+ this.crs = crs; // Set only on success.
}
/**
@@ -283,6 +322,8 @@ public class GeneralEnvelope extends Arr
* @param lower The limit in the direction of decreasing ordinate values.
* @param upper The limit in the direction of increasing ordinate values.
* @throws IndexOutOfBoundsException If the given index is out of bounds.
+ * @throws IllegalArgumentException If {@code lower > upper} and the axis range meaning at the given dimension
+ * is not "wraparound". See <cite>Envelope validation</cite> in class javadoc for more details.
*/
@Override // Must also be overridden in SubEnvelope
public void setRange(final int dimension, final double lower, final double upper)
@@ -290,6 +331,13 @@ public class GeneralEnvelope extends Arr
{
final int d = ordinates.length >>> 1;
ensureValidIndex(d, dimension);
+ /*
+ * The check performed here shall be identical to ArrayEnvelope.verifyRanges(crs, ordinates),
+ * except that there is no loop.
+ */
+ if (lower > upper && crs != null && !isWrapAround(crs, dimension)) {
+ throw new IllegalArgumentException(illegalRange(crs, dimension, lower, upper));
+ }
ordinates[dimension + d] = upper;
ordinates[dimension] = lower;
}
@@ -308,6 +356,7 @@ public class GeneralEnvelope extends Arr
*/
public void setEnvelope(final double... corners) {
verifyArrayLength(ordinates.length >>> 1, corners);
+ verifyRanges(crs, corners);
System.arraycopy(corners, 0, ordinates, 0, ordinates.length);
}
Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/geometry/SubEnvelope.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/geometry/SubEnvelope.java?rev=1562541&r1=1562540&r2=1562541&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/geometry/SubEnvelope.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/geometry/SubEnvelope.java [UTF-8] Wed Jan 29 18:33:26 2014
@@ -22,6 +22,7 @@ package org.apache.sis.geometry;
* force installation of the Java2D module (e.g. JavaFX/SWT).
*/
import java.util.Arrays;
+import org.apache.sis.util.resources.Errors;
import static org.apache.sis.util.ArgumentChecks.ensureValidIndex;
import static org.apache.sis.util.ArgumentChecks.ensureValidIndexRange;
@@ -126,6 +127,13 @@ final class SubEnvelope extends GeneralE
throws IndexOutOfBoundsException
{
ensureValidIndex(endIndex, dimension);
+ /*
+ * The check performed here shall be identical to the super-class method, which is itself
+ * identical to ArrayEnvelope.verifyRanges(crs, ordinates) except that there is no loop.
+ */
+ if (lower > upper && crs != null && !isWrapAround(crs, dimension)) {
+ throw new IllegalArgumentException(illegalRange(crs, dimension, lower, upper));
+ }
dimension += beginIndex;
ordinates[dimension + (ordinates.length >>> 1)] = upper;
ordinates[dimension] = lower;
@@ -138,6 +146,7 @@ final class SubEnvelope extends GeneralE
public void setEnvelope(final double... corners) {
final int dimension = getDimension();
verifyArrayLength(dimension, corners);
+ verifyRanges(crs, corners);
final int d = ordinates.length >>> 1;
System.arraycopy(corners, 0, ordinates, beginIndex, dimension);
System.arraycopy(corners, dimension, ordinates, beginIndex + d, dimension);
Modified: sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/geometry/GeneralEnvelopeTest.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/geometry/GeneralEnvelopeTest.java?rev=1562541&r1=1562540&r2=1562541&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/geometry/GeneralEnvelopeTest.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/geometry/GeneralEnvelopeTest.java [UTF-8] Wed Jan 29 18:33:26 2014
@@ -426,17 +426,39 @@ public strictfp class GeneralEnvelopeTes
}
/**
+ * Tests {@link GeneralEnvelope#setRange(int, double, double)} with a range which is known to be invalid.
+ */
+ @Test
+ public void testSetRange() {
+ final GeneralEnvelope e = create(2, -4, 3, -3);
+ e.setRange(1, -5, 2);
+ try {
+ e.setRange(1, -10, -20);
+ fail("Invalid range shall not be allowed.");
+ } catch (IllegalArgumentException ex) {
+ // This is the expected exception.
+ final String message = ex.getMessage();
+ assertTrue(message, message.contains("Geodetic latitude"));
+ }
+ // Verify that the envelope still have the old values.
+ assertEquals( 2, e.getLower(0), STRICT);
+ assertEquals(-5, e.getLower(1), STRICT);
+ assertEquals( 3, e.getUpper(0), STRICT);
+ assertEquals( 2, e.getUpper(1), STRICT);
+ }
+
+ /**
* Tests modifying the corner of an envelope.
*/
@Test
public void testCornerModifications() {
- final GeneralEnvelope e = create(2, -2, 3, -3);
+ final GeneralEnvelope e = create(2, -4, 3, -3);
e.getLowerCorner().setOrdinate(0, 1);
e.getUpperCorner().setOrdinate(1, -1);
- assertEquals( 1.0, e.getLower(0), 0.0);
- assertEquals(-2.0, e.getLower(1), 0.0);
- assertEquals( 3.0, e.getUpper(0), 0.0);
- assertEquals(-1.0, e.getUpper(1), 0.0);
+ assertEquals( 1, e.getLower(0), STRICT);
+ assertEquals(-4, e.getLower(1), STRICT);
+ assertEquals( 3, e.getUpper(0), STRICT);
+ assertEquals(-1, e.getUpper(1), STRICT);
verifyInvariants(e);
}
Modified: sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/CRSTest.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/CRSTest.java?rev=1562541&r1=1562540&r2=1562541&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/CRSTest.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/CRSTest.java [UTF-8] Wed Jan 29 18:33:26 2014
@@ -16,14 +16,16 @@
*/
package org.apache.sis.referencing;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.crs.SingleCRS;
import org.opengis.util.FactoryException;
+import org.apache.sis.referencing.crs.HardCodedCRS;
import org.apache.sis.test.DependsOnMethod;
import org.apache.sis.test.DependsOn;
import org.apache.sis.test.TestCase;
import org.junit.Test;
-import static org.junit.Assert.*;
+import static org.apache.sis.test.Assert.*;
/**
@@ -83,4 +85,68 @@ public final strictfp class CRSTest exte
verifyForCode(CommonCRS.NAD83.normalizedGeographic(), "CRS:83");
verifyForCode(CommonCRS.NAD27.normalizedGeographic(), "CRS:27");
}
+
+ /**
+ * Tests {@link CRS#isHorizontalCRS(CoordinateReferenceSystem)}.
+ */
+ @Test
+ public void testIsHorizontalCRS() {
+ assertFalse(CRS.isHorizontalCRS(HardCodedCRS.TIME));
+ assertFalse(CRS.isHorizontalCRS(HardCodedCRS.ELLIPSOIDAL_HEIGHT));
+ assertTrue (CRS.isHorizontalCRS(HardCodedCRS.WGS84));
+ assertTrue (CRS.isHorizontalCRS(HardCodedCRS.WGS84_φλ));
+ assertFalse(CRS.isHorizontalCRS(HardCodedCRS.WGS84_3D));
+ assertFalse(CRS.isHorizontalCRS(HardCodedCRS.GEOID_4D));
+ assertFalse(CRS.isHorizontalCRS(HardCodedCRS.GEOCENTRIC));
+ }
+
+ /**
+ * Tests {@link CRS#getHorizontalComponent(CoordinateReferenceSystem)}.
+ */
+ @Test
+ @DependsOnMethod("testIsHorizontalCRS")
+ public void testGetHorizontalComponent() {
+ assertNull(CRS.getHorizontalComponent(HardCodedCRS.TIME));
+ assertNull(CRS.getHorizontalComponent(HardCodedCRS.ELLIPSOIDAL_HEIGHT));
+ assertNull(CRS.getHorizontalComponent(HardCodedCRS.GEOCENTRIC));
+
+ assertSame(HardCodedCRS.WGS84, CRS.getHorizontalComponent(HardCodedCRS.WGS84));
+ assertSame(HardCodedCRS.WGS84_φλ, CRS.getHorizontalComponent(HardCodedCRS.WGS84_φλ));
+
+ assertEqualsIgnoreMetadata(HardCodedCRS.WGS84, CRS.getHorizontalComponent(HardCodedCRS.WGS84_3D));
+ }
+
+ /**
+ * Tests {@link CRS#getVerticalComponent(CoordinateReferenceSystem, boolean)}.
+ */
+ @Test
+ public void testGetVerticalComponent() {
+ assertNull(CRS.getVerticalComponent(HardCodedCRS.TIME, false));
+ assertNull(CRS.getVerticalComponent(HardCodedCRS.TIME, true));
+ assertNull(CRS.getVerticalComponent(HardCodedCRS.WGS84, false));
+ assertNull(CRS.getVerticalComponent(HardCodedCRS.WGS84, true));
+
+ assertSame(HardCodedCRS.ELLIPSOIDAL_HEIGHT, CRS.getVerticalComponent(HardCodedCRS.ELLIPSOIDAL_HEIGHT, false));
+ assertSame(HardCodedCRS.ELLIPSOIDAL_HEIGHT, CRS.getVerticalComponent(HardCodedCRS.ELLIPSOIDAL_HEIGHT, true));
+ assertSame(HardCodedCRS.GRAVITY_RELATED_HEIGHT, CRS.getVerticalComponent(HardCodedCRS.GEOID_4D, false));
+ assertSame(HardCodedCRS.GRAVITY_RELATED_HEIGHT, CRS.getVerticalComponent(HardCodedCRS.GEOID_4D, true));
+
+ assertNull(CRS.getVerticalComponent(HardCodedCRS.WGS84_3D, false));
+ assertEqualsIgnoreMetadata(HardCodedCRS.ELLIPSOIDAL_HEIGHT,
+ CRS.getVerticalComponent(HardCodedCRS.WGS84_3D, true));
+ }
+
+ /**
+ * Tests {@link CRS#getTemporalComponent(CoordinateReferenceSystem)}.
+ */
+ @Test
+ public void testGetTemporalComponent() {
+ assertNull(CRS.getTemporalComponent(HardCodedCRS.ELLIPSOIDAL_HEIGHT));
+ assertNull(CRS.getTemporalComponent(HardCodedCRS.WGS84));
+ assertNull(CRS.getTemporalComponent(HardCodedCRS.WGS84_φλ));
+ assertNull(CRS.getTemporalComponent(HardCodedCRS.WGS84_3D));
+
+ assertSame(HardCodedCRS.TIME, CRS.getTemporalComponent(HardCodedCRS.TIME));
+ assertSame(HardCodedCRS.TIME, CRS.getTemporalComponent(HardCodedCRS.GEOID_4D));
+ }
}
Modified: sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/crs/HardCodedCRS.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/crs/HardCodedCRS.java?rev=1562541&r1=1562540&r2=1562541&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/crs/HardCodedCRS.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/crs/HardCodedCRS.java [UTF-8] Wed Jan 29 18:33:26 2014
@@ -137,6 +137,13 @@ public final strictfp class HardCodedCRS
getProperties(HardCodedCS.DAYS), HardCodedDatum.UNIX, HardCodedCS.DAYS);
/**
+ * A (λ,φ,h,t) CRS where <var>h</var> is the {@link #GRAVITY_RELATED_HEIGHT}.
+ * This constant uses the "geoid" term as an approximation for the gravity related height.
+ */
+ public static final DefaultCompoundCRS GEOID_4D = new DefaultCompoundCRS(
+ properties("WGS 84 + height + time"), GRAVITY_RELATED_HEIGHT, TIME);
+
+ /**
* A two-dimensional Cartesian coordinate reference system with (column, row) axes.
* By default, this CRS has no transformation path to any other CRS (i.e. a map using
* this CS can't be reprojected to a geographic coordinate reference system for example).
Modified: sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties?rev=1562541&r1=1562540&r2=1562541&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties [ISO-8859-1] (original)
+++ sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties [ISO-8859-1] Wed Jan 29 18:33:26 2014
@@ -52,7 +52,7 @@ IllegalClass_2 = La c
IllegalFormatPatternForClass_2 = Le mod\u00e8le \u201c{1}\u201d ne peut pas \u00eatre appliqu\u00e9 au formatage d\u2019objets de type \u2018{0}\u2019.
IllegalLanguageCode_1 = Le code de langue \u201c{0}\u201d n\u2019est pas reconnu.
IllegalMemberType_2 = Le membre \u201c{0}\u201d ne peut pas \u00eatre associ\u00e9 au type \u201c{1}\u201d.
-IllegalOrdinateRange_3 = La plage de valeurs de coordonn\u00e9es [{1} \u2026 {2}] n\u2019est pas valide pour l\u2019axe \u201c{0}\u201d.
+IllegalOrdinateRange_3 = La plage de valeurs de coordonn\u00e9es [{0} \u2026 {1}] n\u2019est pas valide pour l\u2019axe \u201c{2}\u201d.
IllegalPropertyClass_2 = La propri\u00e9t\u00e9 \u2018{0}\u2019 n\u2019accepte pas les valeurs de type \u2018{1}\u2019.
IllegalRange_2 = La plage [{0} \u2026 {1}] n\u2019est pas valide.
IllegalUnicodeCodePoint_2 = La valeur {1} de \u201c{0}\u201d n\u2019est pas un code Unicode valide.