sis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From desruisse...@apache.org
Subject svn commit: r1785905 [2/5] - in /sis/trunk: ./ application/sis-console/src/main/java/org/apache/sis/console/ core/ core/sis-feature/src/main/java/org/apache/sis/feature/ core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/ core/sis-metadat...
Date Tue, 07 Mar 2017 23:37:50 GMT
Modified: sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/FinalLocationType.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/FinalLocationType.java?rev=1785905&r1=1785895&r2=1785905&view=diff
==============================================================================
--- sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/FinalLocationType.java [UTF-8] (original)
+++ sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/FinalLocationType.java [UTF-8] Tue Mar  7 23:37:49 2017
@@ -29,9 +29,7 @@ import org.apache.sis.metadata.Modifiabl
 import org.apache.sis.util.ArgumentChecks;
 
 // Branch-dependent imports
-import org.opengis.metadata.citation.Party;
-import org.opengis.referencing.gazetteer.LocationType;
-import org.opengis.referencing.gazetteer.ReferenceSystemUsingIdentifiers;
+import org.apache.sis.metadata.iso.citation.AbstractParty;
 
 
 /**
@@ -74,7 +72,7 @@ final class FinalLocationType extends Ab
     /**
      * The reference system that comprises this location type.
      */
-    private final ReferenceSystemUsingIdentifiers referenceSystem;
+    private final ReferencingByIdentifiers referenceSystem;
 
     /**
      * Geographic area within which the location type occurs.
@@ -84,19 +82,19 @@ final class FinalLocationType extends Ab
     /**
      * Name of organization or class of organization able to create and destroy location instances.
      */
-    private final Party owner;
+    private final AbstractParty owner;
 
     /**
      * Parent location types (location types of which this location type is a sub-division).
      * This list is unmodifiable.
      */
-    private final List<LocationType> parents;
+    private final List<AbstractLocationType> parents;
 
     /**
      * Child location types (location types which sub-divides this location type).
      * This list is unmodifiable.
      */
-    final List<LocationType> children;
+    final List<AbstractLocationType> children;
 
     /**
      * Creates a copy of the given location type with the reference system set to the given value.
@@ -106,8 +104,8 @@ final class FinalLocationType extends Ab
      * @param existing  other {@code FinalLocationType} instances created before this one.
      */
     @SuppressWarnings("ThisEscapedInObjectConstruction")
-    private FinalLocationType(final LocationType source, final ReferenceSystemUsingIdentifiers rs,
-            final Map<LocationType, FinalLocationType> existing)
+    private FinalLocationType(final AbstractLocationType source, final ReferencingByIdentifiers rs,
+            final Map<AbstractLocationType, FinalLocationType> existing)
     {
         /*
          * Put 'this' in the map at the beginning in case the parents and children contain cyclic references.
@@ -125,7 +123,7 @@ final class FinalLocationType extends Ab
          */
         InternationalString theme;
         GeographicExtent    territoryOfUse;
-        Party               owner;
+        AbstractParty       owner;
         /*
          * Copy the value from the source location type, make them unmodifiable,
          * fallback on the ReferenceSystemUsingIdentifiers if necessary.
@@ -135,7 +133,7 @@ final class FinalLocationType extends Ab
         identifications = snapshot(source.getIdentifications());
         definition      = source.getDefinition();
         territoryOfUse  = (GeographicExtent) unmodifiable(source.getTerritoryOfUse());
-        owner           = (Party) unmodifiable(source.getOwner());
+        owner           = (AbstractParty) unmodifiable(source.getOwner());
         parents         = snapshot(source.getParents(),  rs, existing);
         children        = snapshot(source.getChildren(), rs, existing);
         referenceSystem = rs;
@@ -162,12 +160,12 @@ final class FinalLocationType extends Ab
      * @param rs        the reference system to assign to the new location types.
      * @param existing  an initially empty identity hash map for internal usage by this method.
      */
-    static List<LocationType> snapshot(final Collection<? extends LocationType> types,
-            final ReferenceSystemUsingIdentifiers rs, final Map<LocationType, FinalLocationType> existing)
+    static List<AbstractLocationType> snapshot(final Collection<? extends AbstractLocationType> types,
+            final ReferencingByIdentifiers rs, final Map<AbstractLocationType, FinalLocationType> existing)
     {
-        final LocationType[] array = types.toArray(new LocationType[types.size()]);
+        final AbstractLocationType[] array = types.toArray(new AbstractLocationType[types.size()]);
         for (int i=0; i < array.length; i++) {
-            final LocationType source = array[i];
+            final AbstractLocationType source = array[i];
             ArgumentChecks.ensureNonNullElement("types", i, source);
             FinalLocationType copy = existing.get(source);
             if (copy == null) {
@@ -280,7 +278,7 @@ final class FinalLocationType extends Ab
      * @return the reference system that comprises this location type.
      */
     @Override
-    public ReferenceSystemUsingIdentifiers getReferenceSystem() {
+    public ReferencingByIdentifiers getReferenceSystem() {
         return referenceSystem;
     }
 
@@ -290,7 +288,7 @@ final class FinalLocationType extends Ab
      * @return organization or class of organization able to create and destroy location instances.
      */
     @Override
-    public Party getOwner() {
+    public AbstractParty getOwner() {
         return owner;
     }
 
@@ -303,7 +301,7 @@ final class FinalLocationType extends Ab
      */
     @Override
     @SuppressWarnings("ReturnOfCollectionOrArrayField")         // Because unmodifiable
-    public Collection<LocationType> getParents() {
+    public Collection<AbstractLocationType> getParents() {
         return parents;
     }
 
@@ -314,7 +312,7 @@ final class FinalLocationType extends Ab
      */
     @Override
     @SuppressWarnings("ReturnOfCollectionOrArrayField")         // Because unmodifiable
-    public Collection<LocationType> getChildren() {
+    public Collection<AbstractLocationType> getChildren() {
         return children;
     }
 }

Modified: sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/LocationFormat.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/LocationFormat.java?rev=1785905&r1=1785895&r2=1785905&view=diff
==============================================================================
--- sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/LocationFormat.java [UTF-8] (original)
+++ sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/LocationFormat.java [UTF-8] Tue Mar  7 23:37:49 2017
@@ -30,15 +30,12 @@ import java.text.ParsePosition;
 import javax.measure.Unit;
 import org.opengis.util.FactoryException;
 import org.opengis.util.InternationalString;
-import org.opengis.referencing.gazetteer.Location;
-import org.opengis.referencing.gazetteer.LocationType;
 import org.opengis.referencing.operation.TransformException;
 import org.opengis.referencing.cs.CoordinateSystem;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.opengis.metadata.extent.GeographicBoundingBox;
 import org.opengis.referencing.crs.GeographicCRS;
 import org.opengis.metadata.extent.Extent;
-import org.opengis.metadata.citation.Party;
 import org.opengis.geometry.Envelope;
 import org.opengis.geometry.DirectPosition;
 import org.opengis.geometry.coordinate.Position;
@@ -63,6 +60,9 @@ import org.apache.sis.util.ArgumentCheck
 import org.apache.sis.util.resources.Errors;
 import org.apache.sis.util.resources.Vocabulary;
 
+// Branch-dependent imports
+import org.apache.sis.metadata.iso.citation.AbstractParty;
+
 
 /**
  * Formats {@link Location} instances in a tabular format.
@@ -99,7 +99,7 @@ import org.apache.sis.util.resources.Voc
  * @version 0.8
  * @module
  */
-public class LocationFormat extends TabularFormat<Location> {
+public class LocationFormat extends TabularFormat<AbstractLocation> {
     /**
      * For cross-version compatibility.
      */
@@ -140,8 +140,8 @@ public class LocationFormat extends Tabu
      * @return the type of values formatted by this {@code Format} instance.
      */
     @Override
-    public Class<Location> getValueType() {
-        return Location.class;
+    public Class<AbstractLocation> getValueType() {
+        return AbstractLocation.class;
     }
 
     /**
@@ -198,13 +198,18 @@ public class LocationFormat extends Tabu
     /**
      * Writes a textual representation of the given location in the given stream or buffer.
      *
+     * <div class="warning"><b>Warning:</b>
+     * in a future SIS version, the type of {@code location} parameter may be generalized
+     * to the {@code org.opengis.referencing.gazetteer.Location} interface.
+     * This change is pending GeoAPI revision.</div>
+     *
      * @param  location    the location to format.
      * @param  toAppendTo  where to format the location.
      * @throws IOException if an error occurred while writing to the given appendable.
      */
     @Override
     @SuppressWarnings({"fallthrough", "null"})
-    public void format(final Location location, final Appendable toAppendTo) throws IOException {
+    public void format(final AbstractLocation location, final Appendable toAppendTo) throws IOException {
         ArgumentChecks.ensureNonNull("location", location);
         final Locale locale = getLocale(Locale.Category.DISPLAY);
         final Vocabulary vocabulary = Vocabulary.getResources(locale);
@@ -214,7 +219,7 @@ public class LocationFormat extends Tabu
          * Location type.
          */
         table.appendHorizontalSeparator();
-        final LocationType type = location.getLocationType();
+        final AbstractLocationType type = location.getLocationType();
         if (type != null) {
             append(table, vocabulary, Vocabulary.Keys.LocationType, toString(type.getName(), locale));
         }
@@ -415,7 +420,7 @@ public class LocationFormat extends Tabu
         /*
          * Organization responsible for defining the characteristics of the location instance.
          */
-        final Party administrator = location.getAdministrator();
+        final AbstractParty administrator = location.getAdministrator();
         if (administrator != null) {
             append(table, vocabulary, Vocabulary.Keys.Administrator, toString(administrator.getName(), locale));
         }
@@ -482,7 +487,7 @@ public class LocationFormat extends Tabu
      * @throws ParseException if an error occurred while parsing the location.
      */
     @Override
-    public Location parse(CharSequence text, ParsePosition pos) throws ParseException {
+    public AbstractLocation parse(CharSequence text, ParsePosition pos) throws ParseException {
         throw new ParseException(Errors.format(Errors.Keys.UnsupportedOperation_1, "parse"), pos.getIndex());
     }
 

Modified: sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystem.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystem.java?rev=1785905&r1=1785895&r2=1785905&view=diff
==============================================================================
--- sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystem.java [UTF-8] (original)
+++ sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystem.java [UTF-8] Tue Mar  7 23:37:49 2017
@@ -39,27 +39,21 @@ import org.apache.sis.referencing.Identi
 import org.apache.sis.referencing.crs.DefaultProjectedCRS;
 import org.apache.sis.referencing.cs.AxesConvention;
 import org.apache.sis.metadata.iso.extent.Extents;
-import org.apache.sis.metadata.sql.MetadataSource;
-import org.apache.sis.metadata.sql.MetadataStoreException;
 import org.apache.sis.math.MathFunctions;
 import org.apache.sis.util.CharSequences;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.util.StringBuilders;
 import org.apache.sis.util.Utilities;
 import org.apache.sis.util.Workaround;
-import org.apache.sis.util.logging.Logging;
 import org.apache.sis.util.resources.Errors;
 import org.apache.sis.util.resources.Vocabulary;
 import org.apache.sis.geometry.DirectPosition2D;
-import org.apache.sis.internal.system.Modules;
 import org.apache.sis.measure.Longitude;
 import org.apache.sis.measure.Latitude;
 
 // Branch-dependent imports
 import org.apache.sis.internal.jdk8.JDK8;
-import org.opengis.metadata.citation.Party;
-import org.opengis.referencing.gazetteer.Location;
-import org.opengis.referencing.gazetteer.LocationType;
+import org.apache.sis.metadata.iso.citation.AbstractParty;
 
 
 /**
@@ -253,14 +247,7 @@ public class MilitaryGridReferenceSystem
      */
     @Workaround(library="JDK", version="1.8")
     private static Map<String,?> properties() {
-        Party party;
-        try {
-            party = MetadataSource.getProvided().lookup(Party.class, "NATO");
-        } catch (MetadataStoreException e) {
-            party = null;
-            Logging.unexpectedException(Logging.getLogger(Modules.REFERENCING_BY_IDENTIFIERS),
-                    MilitaryGridReferenceSystem.class, "<init>", e);
-        }
+        AbstractParty party = new AbstractParty("North Atlantic Treaty Organization", null);
         final Map<String,Object> properties = new HashMap<>(6);
         properties.put(NAME_KEY, new NamedIdentifier(null, "NATO", Resources.formatInternational(Resources.Keys.MGRS), null, null));
         properties.put(DOMAIN_OF_VALIDITY_KEY, Extents.WORLD);
@@ -274,7 +261,7 @@ public class MilitaryGridReferenceSystem
      * ("Relax constraint on placement of this()/super() call in constructors").
      */
     @Workaround(library="JDK", version="1.8")
-    private static LocationType[] types() {
+    private static AbstractLocationType[] types() {
         final ModifiableLocationType gzd    = new ModifiableLocationType(Resources.formatInternational(Resources.Keys.GridZoneDesignator));
         final ModifiableLocationType square = new ModifiableLocationType(Resources.formatInternational(Resources.Keys.SquareIdentifier100));
         final ModifiableLocationType coord  = new ModifiableLocationType(Resources.formatInternational(Resources.Keys.GridCoordinates));
@@ -282,13 +269,13 @@ public class MilitaryGridReferenceSystem
         coord .addIdentification(Vocabulary.formatInternational(Vocabulary.Keys.Coordinate));
         square.addParent(gzd);
         coord .addParent(square);
-        return new LocationType[] {gzd};
+        return new AbstractLocationType[] {gzd};
     }
 
     /**
      * Returns the first location types, which should be the grid zone identifier.
      */
-    final LocationType rootType() {
+    final AbstractLocationType rootType() {
         return super.getLocationTypes().get(0);     // Use super.… for protecting from method overriding.
     }
 
@@ -527,11 +514,16 @@ public class MilitaryGridReferenceSystem
          * Decodes the given MGRS reference into a position and an envelope.
          * The Coordinate Reference System (CRS) associated to the returned position depends on the given reference.
          *
+         * <div class="warning"><b>Warning:</b>
+         * in a future SIS version, the type of returned elements may be generalized
+         * to the {@code org.opengis.referencing.gazetteer.Location} interface.
+         * This change is pending GeoAPI revision.</div>
+         *
          * @param  reference  MGRS string to decode.
          * @return a new position with the longitude at ordinate 0 and latitude at ordinate 1.
          * @throws TransformException if an error occurred while parsing the given string.
          */
-        public Location decode(final CharSequence reference) throws TransformException {
+        public AbstractLocation decode(final CharSequence reference) throws TransformException {
             ArgumentChecks.ensureNonNull("reference", reference);
             return new Decoder(this, reference);
         }

Modified: sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/ModifiableLocationType.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/ModifiableLocationType.java?rev=1785905&r1=1785895&r2=1785905&view=diff
==============================================================================
--- sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/ModifiableLocationType.java [UTF-8] (original)
+++ sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/ModifiableLocationType.java [UTF-8] Tue Mar  7 23:37:49 2017
@@ -34,8 +34,7 @@ import org.apache.sis.util.iso.Types;
 // Branch-dependent imports
 import org.apache.sis.internal.jdk8.JDK8;
 import org.apache.sis.internal.jdk8.Function;
-import org.opengis.metadata.citation.Party;
-import org.opengis.referencing.gazetteer.ReferenceSystemUsingIdentifiers;
+import org.apache.sis.metadata.iso.citation.AbstractParty;
 
 
 /**
@@ -144,7 +143,7 @@ public class ModifiableLocationType exte
     /**
      * Name of organization or class of organization able to create and destroy location instances.
      */
-    private Party owner;
+    private AbstractParty owner;
 
     /**
      * Parent location types (location types of which this location type is a sub-division).
@@ -369,6 +368,11 @@ public class ModifiableLocationType exte
      * If no organization has been explicitely set, then this method inherits the value from
      * the parents providing that all parents specify the same organization.
      *
+     * <div class="warning"><b>Warning:</b>
+     * in a future SIS version, the type of returned element may be generalized to the
+     * {@code org.opengis.metadata.citation.Party} interface. This change is pending
+     * GeoAPI revision for upgrade from ISO 19115:2003 to ISO 19115:2014.</div>
+     *
      * @return organization or class of organization able to create and destroy location instances,
      *         or {@code null} if no value has been defined or can be inherited.
      *
@@ -376,9 +380,9 @@ public class ModifiableLocationType exte
      * @see ReferencingByIdentifiers#getOverallOwner()
      */
     @Override
-    public Party getOwner() {
-        return (owner != null) ? owner : inherit(new Function<ModifiableLocationType, Party>() {
-            @Override public Party apply(final ModifiableLocationType type) {
+    public AbstractParty getOwner() {
+        return (owner != null) ? owner : inherit(new Function<ModifiableLocationType, AbstractParty>() {
+            @Override public AbstractParty apply(final ModifiableLocationType type) {
                 return type.getOwner();
             }
         });
@@ -389,9 +393,14 @@ public class ModifiableLocationType exte
      * The given value is typically an instance of {@link DefaultOrganisation}.
      * For an alternative where only the organization name is specified, see {@link #setOwner(CharSequence)}.
      *
+     * <div class="warning"><b>Warning:</b>
+     * in a future SIS version, the argument type may be generalized to the
+     * {@code org.opengis.metadata.citation.Party} interface. This change is pending
+     * GeoAPI revision for upgrade from ISO 19115:2003 to ISO 19115:2014.</div>
+     *
      * @param  value  the new owner.
      */
-    public void setOwner(final Party value) {
+    public void setOwner(final AbstractParty value) {
         owner = value;
     }
 
@@ -496,12 +505,17 @@ public class ModifiableLocationType exte
      * the reference system is always null. The reference system is defined when the location types are
      * given to the {@link ReferencingByIdentifiers} constructor for example.
      *
+     * <div class="warning"><b>Warning:</b>
+     * in a future SIS version, the type of returned element may be generalized to the
+     * {@code org.opengis.referencing.gazetteer.ReferenceSystemUsingIdentifiers} interface.
+     * This change is pending GeoAPI revision.</div>
+     *
      * @return {@code null}.
      *
      * @see ReferencingByIdentifiers#getLocationTypes()
      */
     @Override
-    public ReferenceSystemUsingIdentifiers getReferenceSystem() {
+    public ReferencingByIdentifiers getReferenceSystem() {
         return null;
     }
 }

Modified: sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/ReferencingByIdentifiers.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/ReferencingByIdentifiers.java?rev=1785905&r1=1785895&r2=1785905&view=diff
==============================================================================
--- sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/ReferencingByIdentifiers.java [UTF-8] (original)
+++ sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/ReferencingByIdentifiers.java [UTF-8] Tue Mar  7 23:37:49 2017
@@ -33,9 +33,7 @@ import org.apache.sis.internal.referenci
 import org.apache.sis.io.wkt.FormattableObject;
 
 // Branch-dependent imports
-import org.opengis.metadata.citation.Party;
-import org.opengis.referencing.gazetteer.LocationType;
-import org.opengis.referencing.gazetteer.ReferenceSystemUsingIdentifiers;
+import org.apache.sis.metadata.iso.citation.AbstractParty;
 
 
 /**
@@ -57,7 +55,25 @@ import org.opengis.referencing.gazetteer
  * @see AbstractLocation
  */
 @XmlTransient
-public class ReferencingByIdentifiers extends AbstractReferenceSystem implements ReferenceSystemUsingIdentifiers {
+public class ReferencingByIdentifiers extends AbstractReferenceSystem {
+    /**
+     * Key for the <code>{@value}</code> property to be given to the
+     * object factory {@code createFoo(…)} methods.
+     * This is used for setting the value to be returned by {@link #getTheme()}.
+     *
+     * @see #getTheme()
+     */
+    public static final String THEME_KEY = "theme";
+
+    /**
+     * Key for the <code>{@value}</code> property to be given to the
+     * object factory {@code createFoo(…)} methods.
+     * This is used for setting the value to be returned by {@link #getOverallOwner()}.
+     *
+     * @see #getOverallOwner()
+     */
+    public static final String OVERALL_OWNER_KEY = "overallOwner";
+
     /**
      * Serial number for inter-operability with different versions.
      */
@@ -75,7 +91,7 @@ public class ReferencingByIdentifiers ex
      *
      * @see #getOverallOwner()
      */
-    private final Party overallOwner;
+    private final AbstractParty overallOwner;
 
     /**
      * Description of location type(s) in the spatial reference system.
@@ -83,7 +99,7 @@ public class ReferencingByIdentifiers ex
      *
      * @see #getLocationTypes()
      */
-    private final List<LocationType> locationTypes;
+    private final List<AbstractLocationType> locationTypes;
 
     /**
      * Creates a reference system from the given properties.
@@ -147,14 +163,18 @@ public class ReferencingByIdentifiers ex
      * {@link ModifiableLocationType#snapshot(ReferenceSystemUsingIdentifiers, LocationType...)}.
      * Changes in the given location types after construction will not affect this {@code ReferencingByIdentifiers}.
      *
+     * <div class="warning"><b>Warning:</b> In a future SIS version, the type of array elements may be
+     * generalized to the {@code org.opengis.referencing.gazetteer.LocationType} interface.
+     * This change is pending GeoAPI revision.</div>
+     *
      * @param properties  the properties to be given to the reference system.
      * @param types       description of location type(s) in the spatial reference system.
      */
     @SuppressWarnings("ThisEscapedInObjectConstruction")
-    public ReferencingByIdentifiers(final Map<String,?> properties, final LocationType... types) {
+    public ReferencingByIdentifiers(final Map<String,?> properties, final AbstractLocationType... types) {
         super(properties);
         theme = Types.toInternationalString(properties, THEME_KEY);
-        overallOwner = Containers.property(properties, OVERALL_OWNER_KEY, Party.class);
+        overallOwner = Containers.property(properties, OVERALL_OWNER_KEY, AbstractParty.class);
         /*
          * Having the 'this' reference escaped in object construction should not be an issue here because
          * we invoke package-private method in such a way that if an exception is thrown, the whole tree
@@ -164,24 +184,12 @@ public class ReferencingByIdentifiers ex
     }
 
     /**
-     * Returns the GeoAPI interface implemented by this class.
-     * The default implementation returns {@code ReferenceSystemUsingIdentifiers.class}.
-     *
-     * @return the GeoAPI interface implemented by this class.
-     */
-    @Override
-    public Class<? extends ReferenceSystemUsingIdentifiers> getInterface() {
-        return ReferenceSystemUsingIdentifiers.class;
-    }
-
-    /**
      * Property used to characterize the spatial reference system.
      *
      * @return property used to characterize the spatial reference system.
      *
      * @see AbstractLocationType#getTheme()
      */
-    @Override
     public InternationalString getTheme() {
         return theme;
     }
@@ -189,13 +197,17 @@ public class ReferencingByIdentifiers ex
     /**
      * Authority with overall responsibility for the spatial reference system.
      *
+     * <div class="warning"><b>Warning:</b>
+     * in a future SIS version, the type of returned element may be generalized to the
+     * {@code org.opengis.metadata.citation.Party} interface. This change is pending
+     * GeoAPI revision for upgrade from ISO 19115:2003 to ISO 19115:2014.</div>
+     *
      * @return authority with overall responsibility for the spatial reference system.
      *
      * @see ModifiableLocationType#getOwner()
      * @see AbstractLocation#getAdministrator()
      */
-    @Override
-    public Party getOverallOwner() {
+    public AbstractParty getOverallOwner() {
         return overallOwner;
     }
 
@@ -207,9 +219,8 @@ public class ReferencingByIdentifiers ex
      *
      * @see ModifiableLocationType#getReferenceSystem()
      */
-    @Override
     @SuppressWarnings("ReturnOfCollectionOrArrayField")         // Because the collection is unmodifiable.
-    public List<LocationType> getLocationTypes() {
+    public List<AbstractLocationType> getLocationTypes() {
         return locationTypes;
     }
 
@@ -240,7 +251,7 @@ public class ReferencingByIdentifiers ex
                        locationTypes.equals(that.locationTypes);
             }
             case BY_CONTRACT: {
-                final ReferenceSystemUsingIdentifiers that = (ReferenceSystemUsingIdentifiers) object;
+                final ReferencingByIdentifiers that = (ReferencingByIdentifiers) object;
                 if (!Utilities.deepEquals(getTheme(),        that.getTheme(),        mode) ||
                     !Utilities.deepEquals(getOverallOwner(), that.getOverallOwner(), mode))
                 {
@@ -251,7 +262,7 @@ public class ReferencingByIdentifiers ex
             default: {
                 // Theme and owner are metadata, so they can be ignored.
                 return Utilities.deepEquals(getLocationTypes(),
-                        ((ReferenceSystemUsingIdentifiers) object).getLocationTypes(), mode);
+                        ((ReferencingByIdentifiers) object).getLocationTypes(), mode);
             }
         }
     }
@@ -287,7 +298,7 @@ public class ReferencingByIdentifiers ex
             formatter.newLine();
             formatter.append(new SubElement("Owner", overallOwner.getName()));
         }
-        for (final LocationType type : locationTypes) {
+        for (final AbstractLocationType type : locationTypes) {
             formatter.newLine();
             formatter.append(new SubElement("LocationType", type.getName()));
         }

Modified: sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/SimpleLocation.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/SimpleLocation.java?rev=1785905&r1=1785895&r2=1785905&view=diff
==============================================================================
--- sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/SimpleLocation.java [UTF-8] (original)
+++ sis/trunk/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/SimpleLocation.java [UTF-8] Tue Mar  7 23:37:49 2017
@@ -21,7 +21,6 @@ import org.opengis.geometry.DirectPositi
 import org.opengis.geometry.coordinate.Position;
 import org.opengis.metadata.extent.GeographicExtent;
 import org.opengis.metadata.extent.GeographicBoundingBox;
-import org.opengis.referencing.gazetteer.LocationType;
 import org.opengis.referencing.operation.MathTransform;
 import org.opengis.referencing.operation.TransformException;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
@@ -91,7 +90,7 @@ class SimpleLocation extends AbstractLoc
      * @param type        the description of the nature of this geographic identifier.
      * @param identifier  the geographic identifier to be returned by {@link #getGeographicIdentifier()}.
      */
-    SimpleLocation(final LocationType type, final CharSequence identifier) {
+    SimpleLocation(final AbstractLocationType type, final CharSequence identifier) {
         super(type, identifier);
     }
 
@@ -339,7 +338,7 @@ class SimpleLocation extends AbstractLoc
          * @param type        the description of the nature of this geographic identifier.
          * @param identifier  the geographic identifier to be returned by {@link #getGeographicIdentifier()}.
          */
-        Projected(final LocationType type, final CharSequence identifier) {
+        Projected(final AbstractLocationType type, final CharSequence identifier) {
             super(type, identifier);
         }
 

Modified: sis/trunk/core/sis-referencing-by-identifiers/src/test/java/org/apache/sis/referencing/gazetteer/LocationTypeTest.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-referencing-by-identifiers/src/test/java/org/apache/sis/referencing/gazetteer/LocationTypeTest.java?rev=1785905&r1=1785895&r2=1785905&view=diff
==============================================================================
--- sis/trunk/core/sis-referencing-by-identifiers/src/test/java/org/apache/sis/referencing/gazetteer/LocationTypeTest.java [UTF-8] (original)
+++ sis/trunk/core/sis-referencing-by-identifiers/src/test/java/org/apache/sis/referencing/gazetteer/LocationTypeTest.java [UTF-8] Tue Mar  7 23:37:49 2017
@@ -25,9 +25,6 @@ import org.junit.Test;
 
 import static org.apache.sis.test.Assert.*;
 
-// Branch-dependent imports
-import org.opengis.referencing.gazetteer.LocationType;
-
 
 /**
  * Tests {@link AbstractLocationType}, {@link FinalLocationType} and {@link ModifiableLocationType}.
@@ -115,7 +112,7 @@ public final strictfp class LocationType
     /**
      * Verifies the value of a "administrative area" location type.
      */
-    private static void verify(final LocationType[] type) {
+    private static void verify(final AbstractLocationType[] type) {
         assertEquals(5, type.length);
         verify(type[0], "administrative area",
                         "local administration",
@@ -147,8 +144,8 @@ public final strictfp class LocationType
     /**
      * Verifies the value of a location type created by or copied from {@link #create(boolean)}.
      */
-    private static void verify(final LocationType type, final String name, final String theme, final String definition,
-            final String identification, final String owner)
+    private static void verify(final AbstractLocationType type, final String name, final String theme,
+            final String definition, final String identification, final String owner)
     {
         assertEquals("name",           name,           String.valueOf(type.getName()));
         assertEquals("theme",          theme,          String.valueOf(type.getTheme()));
@@ -183,8 +180,8 @@ public final strictfp class LocationType
     @Test
     @DependsOnMethod("testInheritance")
     public void testSnapshot() {
-        final List<LocationType> snapshot = ModifiableLocationType.snapshot(null, create(true));
-        verify(snapshot.toArray(new LocationType[snapshot.size()]));
+        final List<AbstractLocationType> snapshot = ModifiableLocationType.snapshot(null, create(true));
+        verify(snapshot.toArray(new AbstractLocationType[snapshot.size()]));
     }
 
     /**

Modified: sis/trunk/core/sis-referencing-by-identifiers/src/test/java/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystemTest.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-referencing-by-identifiers/src/test/java/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystemTest.java?rev=1785905&r1=1785895&r2=1785905&view=diff
==============================================================================
--- sis/trunk/core/sis-referencing-by-identifiers/src/test/java/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystemTest.java [UTF-8] (original)
+++ sis/trunk/core/sis-referencing-by-identifiers/src/test/java/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystemTest.java [UTF-8] Tue Mar  7 23:37:49 2017
@@ -35,10 +35,6 @@ import org.junit.Test;
 
 import static org.junit.Assert.*;
 
-// Branch-dependent imports
-import org.opengis.referencing.gazetteer.Location;
-import org.opengis.referencing.gazetteer.LocationType;
-
 
 /**
  * Tests {@link MilitaryGridReferenceSystem}.
@@ -59,15 +55,15 @@ public final strictfp class MilitaryGrid
         assertEquals("theme", "Mapping",      rs.getTheme().toString(Locale.ENGLISH));
         assertEquals("theme", "Cartographie", rs.getTheme().toString(Locale.FRENCH));
 
-        final LocationType gzd = TestUtilities.getSingleton(rs.getLocationTypes());
+        final AbstractLocationType gzd = TestUtilities.getSingleton(rs.getLocationTypes());
         assertEquals("type", "Grid zone designator", gzd.getName().toString(Locale.ENGLISH));
         assertEquals("parent", 0, gzd.getParents().size());
 
-        final LocationType sid = TestUtilities.getSingleton(gzd.getChildren());
+        final AbstractLocationType sid = TestUtilities.getSingleton(gzd.getChildren());
         assertEquals("type", "100 km square identifier", sid.getName().toString(Locale.ENGLISH));
         assertSame("parent", gzd, TestUtilities.getSingleton(sid.getParents()));
 
-        final LocationType gc = TestUtilities.getSingleton(sid.getChildren());
+        final AbstractLocationType gc = TestUtilities.getSingleton(sid.getChildren());
         assertEquals("type", "Grid coordinate", gc.getName().toString(Locale.ENGLISH));
         assertSame("parent", sid, TestUtilities.getSingleton(gc.getParents()));
     }
@@ -205,7 +201,7 @@ public final strictfp class MilitaryGrid
     private static DirectPosition decode(final MilitaryGridReferenceSystem.Coder coder, final String reference)
             throws TransformException
     {
-        final Location loc = coder.decode(reference);
+        final AbstractLocation loc = coder.decode(reference);
         final Envelope2D envelope = new Envelope2D(loc.getEnvelope());
         final DirectPosition2D pos = new DirectPosition2D(loc.getPosition().getDirectPosition());
         assertTrue(reference, envelope.contains(pos));

Modified: sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/GeodeticObjectBuilder.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/GeodeticObjectBuilder.java?rev=1785905&r1=1785904&r2=1785905&view=diff
==============================================================================
--- sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/GeodeticObjectBuilder.java [UTF-8] (original)
+++ sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/GeodeticObjectBuilder.java [UTF-8] Tue Mar  7 23:37:49 2017
@@ -44,6 +44,7 @@ import org.apache.sis.util.ArgumentCheck
 import org.apache.sis.util.resources.Errors;
 import org.apache.sis.internal.system.DefaultFactories;
 import org.apache.sis.internal.referencing.provider.TransverseMercator;
+import org.apache.sis.internal.referencing.provider.PolarStereographicA;
 import org.apache.sis.measure.Latitude;
 import org.apache.sis.referencing.Builder;
 import org.apache.sis.referencing.CommonCRS;
@@ -232,27 +233,68 @@ public class GeodeticObjectBuilder exten
      *
      * <blockquote><table class="sis">
      *   <caption>Transverse Mercator parameters</caption>
-     *   <tr><th>Parameter name</th>                 <th>Value</th></tr>
+     *   <tr><th>Parameter name</th>                 <th>Parameter value</th></tr>
      *   <tr><td>Latitude of natural origin</td>     <td>Given latitude, snapped to 0° in the UTM case</td></tr>
      *   <tr><td>Longitude of natural origin</td>    <td>Given longitude, optionally snapped to a UTM zone</td></tr>
-     *   <tr><td>Scale factor at natural origin</td> <td>0.9996</td></tr>
-     *   <tr><td>False easting</td>                  <td>500000 metres</td></tr>
+     *   <tr><td>Scale factor at natural origin</td> <td>0.9996 in UTM case</td></tr>
+     *   <tr><td>False easting</td>                  <td>500000 metres in UTM case</td></tr>
      *   <tr><td>False northing</td>                 <td>0 (North hemisphere) or 10000000 (South hemisphere) metres</td></tr>
      * </table></blockquote>
      *
-     * @param  isUTM      if {@code true}, the given central meridian will be snapped to the central meridian of a UTM zone.
+     * Note that calculation of UTM zone contains special cases for Norway and Svalbard.
+     * If not desired, those exceptions can be avoided by making sure that the given latitude is below 56°N.
+     *
+     * <p>If the given {@code zoner} is {@link TransverseMercator.Zoner#ANY ANY}, then this method will use the given
+     * latitude and longitude verbatim (without snapping them to a zone) but will still use the UTM scale factor,
+     * false easting and false northing.
+     *
+     * @param  zoner      whether to use UTM or MTM zones, or {@code ANY} for using arbitrary central meridian.
      * @param  latitude   the latitude in the center of the desired projection.
      * @param  longitude  the longitude in the center of the desired projection.
      * @return {@code this}, for method calls chaining.
      * @throws FactoryException if the operation method for the Transverse Mercator projection can not be obtained.
+     *
+     * @see CommonCRS#UTM(double, double)
      */
-    public GeodeticObjectBuilder setTransverseMercator(boolean isUTM, double latitude, double longitude)
+    public GeodeticObjectBuilder setTransverseMercator(TransverseMercator.Zoner zoner, double latitude, double longitude)
             throws FactoryException
     {
         ArgumentChecks.ensureBetween("latitude",   Latitude.MIN_VALUE,     Latitude.MAX_VALUE,     latitude);
         ArgumentChecks.ensureBetween("longitude", -Formulas.LONGITUDE_MAX, Formulas.LONGITUDE_MAX, longitude);
         setConversionMethod(TransverseMercator.NAME);
-        setConversionName(TransverseMercator.Zoner.UTM.setParameters(parameters, isUTM, latitude, longitude));
+        setConversionName(zoner.setParameters(parameters, latitude, longitude));
+        return this;
+    }
+
+    /**
+     * Sets the operation method, parameters and conversion name for a Polar Stereographic projection.
+     * This convenience method delegates to the following methods:
+     *
+     * <ul>
+     *   <li>{@link #setConversionName(String)} with a name like <cite>"Universal Polar Stereographic North"</cite>,
+     *       depending on the argument given to this method.</li>
+     *   <li>{@link #setConversionMethod(String)} with the name of the Polar Stereographic (variant A) projection method.</li>
+     *   <li>{@link #setParameter(String, double, Unit)} for each of the parameters enumerated below:</li>
+     * </ul>
+     *
+     * <blockquote><table class="sis">
+     *   <caption>Universal Polar Stereographic parameters</caption>
+     *   <tr><th>Parameter name</th>                 <th>Parameter value</th></tr>
+     *   <tr><td>Latitude of natural origin</td>     <td>90°N or 90°S</td></tr>
+     *   <tr><td>Longitude of natural origin</td>    <td>0°</td></tr>
+     *   <tr><td>Scale factor at natural origin</td> <td>0.994</td></tr>
+     *   <tr><td>False easting</td>                  <td>2000000 metres</td></tr>
+     *   <tr><td>False northing</td>                 <td>2000000 metres</td></tr>
+     * </table></blockquote>
+     *
+     * @param  north  {@code true} for North pole, or {@code false} for South pole.
+     * @return {@code this}, for method calls chaining.
+     * @throws FactoryException if the operation method for the Polar Stereographic (variant A)
+     *         projection can not be obtained.
+     */
+    public GeodeticObjectBuilder setPolarStereographic(final boolean north) throws FactoryException {
+        setConversionMethod(PolarStereographicA.NAME);
+        setConversionName(PolarStereographicA.setParameters(parameters, north));
         return this;
     }
 

Modified: sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources.java?rev=1785905&r1=1785904&r2=1785905&view=diff
==============================================================================
--- sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources.java [UTF-8] (original)
+++ sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources.java [UTF-8] Tue Mar  7 23:37:49 2017
@@ -321,6 +321,11 @@ public final class Resources extends Ind
         public static final short NoSuchOperationMethod_1 = 50;
 
         /**
+         * No horizontal component found in the “{0}” coordinate reference system.
+         */
+        public static final short NonHorizontalCRS_1 = 71;
+
+        /**
          * Non invertible {0}×{1} matrix.
          */
         public static final short NonInvertibleMatrix_2 = 51;

Modified: sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources.properties
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources.properties?rev=1785905&r1=1785904&r2=1785905&view=diff
==============================================================================
--- sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources.properties [ISO-8859-1] (original)
+++ sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources.properties [ISO-8859-1] Tue Mar  7 23:37:49 2017
@@ -73,6 +73,7 @@ MissingSpatioTemporalDimension_1  = No s
 MissingValueForParameter_1        = Missing value for \u201c{0}\u201d parameter.
 NoConvergence                     = No convergence.
 NoConvergenceForPoints_2          = No convergence for points {0} and {1}.
+NonHorizontalCRS_1                = No horizontal component found in the \u201c{0}\u201d coordinate reference system.
 NonInvertibleMatrix_2             = Non invertible {0}\u00d7{1} matrix.
 NonInvertibleOperation_1          = Can not invert the \u201c{0}\u201d operation.
 NonInvertibleTransform            = Transform is not invertible.

Modified: sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources_fr.properties
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources_fr.properties?rev=1785905&r1=1785904&r2=1785905&view=diff
==============================================================================
--- sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources_fr.properties [ISO-8859-1] (original)
+++ sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/Resources_fr.properties [ISO-8859-1] Tue Mar  7 23:37:49 2017
@@ -78,6 +78,7 @@ MissingSpatioTemporalDimension_1  = Aucu
 MissingValueForParameter_1        = Aucune valeur n\u2019a \u00e9t\u00e9 d\u00e9finie pour le param\u00e8tre \u00ab\u202f{0}\u202f\u00bb.
 NoConvergence                     = Le calcul ne converge pas.
 NoConvergenceForPoints_2          = Le calcul ne converge pas pour les points {0} et {1}.
+NonHorizontalCRS_1                = Aucune composante horizontale n\u2019a \u00e9t\u00e9 trouv\u00e9e dans le syst\u00e8me de r\u00e9f\u00e9rence des coordonn\u00e9es \u00ab\u202f{0}\u202f\u00bb.
 NonInvertibleMatrix_2             = Matrice {0}\u00d7{1} non inversible.
 NonInvertibleOperation_1          = Ne peut pas inverser l\u2019op\u00e9ration \u00ab\u202f{0}\u202f\u00bb.
 NonInvertibleTransform            = La transformation n\u2019est pas inversible.

Modified: sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ServicesForMetadata.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ServicesForMetadata.java?rev=1785905&r1=1785904&r2=1785905&view=diff
==============================================================================
--- sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ServicesForMetadata.java [UTF-8] (original)
+++ sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ServicesForMetadata.java [UTF-8] Tue Mar  7 23:37:49 2017
@@ -22,6 +22,8 @@ import java.util.Iterator;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Locale;
+import java.util.TimeZone;
+import java.text.Format;
 import javax.measure.Unit;
 import javax.measure.quantity.Length;
 
@@ -57,9 +59,12 @@ import org.opengis.metadata.citation.Onl
 import org.opengis.metadata.extent.GeographicBoundingBox;
 import org.opengis.metadata.extent.GeographicExtent;
 import org.opengis.metadata.extent.VerticalExtent;
+import org.opengis.geometry.DirectPosition;
 import org.opengis.geometry.Envelope;
 
 import org.apache.sis.geometry.Envelopes;
+import org.apache.sis.geometry.DirectPosition2D;
+import org.apache.sis.geometry.CoordinateFormat;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.referencing.CommonCRS;
 import org.apache.sis.referencing.IdentifiedObjects;
@@ -108,7 +113,7 @@ import org.opengis.referencing.datum.Dat
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @since   0.5
- * @version 0.7
+ * @version 0.8
  * @module
  */
 public final class ServicesForMetadata extends ReferencingServices {
@@ -400,6 +405,21 @@ public final class ServicesForMetadata e
         }
     }
 
+    /**
+     * Creates a two-dimensional geographic position associated to the default geographic CRS.
+     * Axis order is (longitude, latitude).
+     *
+     * @param  λ  the longitude value.
+     * @param  φ  the latitude value.
+     * @return the direct position for the given geographic coordinate.
+     *
+     * @since 0.8
+     */
+    @Override
+    public DirectPosition geographic(final double λ, final double φ) {
+        return new DirectPosition2D(CommonCRS.defaultGeographic(), λ, φ);
+    }
+
 
 
 
@@ -639,6 +659,20 @@ public final class ServicesForMetadata e
     }
 
     /**
+     * Creates a format for {@link DirectPosition} instances.
+     *
+     * @param  locale    the locale for the new {@code Format}, or {@code null} for {@code Locale.ROOT}.
+     * @param  timezone  the timezone, or {@code null} for UTC.
+     * @return a {@link org.apache.sis.geometry.CoordinateFormat}.
+     *
+     * @since 0.8
+     */
+    @Override
+    public Format createCoordinateFormat(final Locale locale, final TimeZone timezone) {
+        return new CoordinateFormat(locale, timezone);
+    }
+
+    /**
      * Returns an axis direction from a pole along a meridian.
      * The given meridian is usually, but not necessarily, relative to the Greenwich meridian.
      *

Modified: sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/PolarStereographicA.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/PolarStereographicA.java?rev=1785905&r1=1785904&r2=1785905&view=diff
==============================================================================
--- sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/PolarStereographicA.java [UTF-8] (original)
+++ sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/PolarStereographicA.java [UTF-8] Tue Mar  7 23:37:49 2017
@@ -17,14 +17,21 @@
 package org.apache.sis.internal.referencing.provider;
 
 import javax.xml.bind.annotation.XmlTransient;
+import org.opengis.parameter.ParameterValueGroup;
 import org.opengis.parameter.ParameterDescriptor;
 import org.opengis.parameter.ParameterDescriptorGroup;
 import org.apache.sis.metadata.iso.citation.Citations;
 import org.apache.sis.parameter.ParameterBuilder;
+import org.apache.sis.internal.referencing.Formulas;
+import org.apache.sis.internal.util.Constants;
+import org.apache.sis.internal.util.Numerics;
+import org.apache.sis.measure.Latitude;
+import org.apache.sis.measure.Units;
 
 
 /**
  * The provider for <cite>"Polar Stereographic (Variant A)"</cite> projection (EPSG:9810).
+ * Also used for the definition of Universal Polar Stereographic (UPS) projection.
  *
  * @author  Rueben Schulz (UBC)
  * @author  Martin Desruisseaux (Geomatys)
@@ -101,4 +108,62 @@ public final class PolarStereographicA e
     public PolarStereographicA() {
         super(PARAMETERS);
     }
+
+    /**
+     * False Easting and false Northing value used in Universal Polar Stereographic (UPS) projections.
+     */
+    public static final double UPS_SHIFT = 2000000;
+
+    /**
+     * Sets the parameter values for a Universal Polar Stereographic projection
+     * and returns a suggested conversion name.
+     *
+     * <blockquote><table class="sis">
+     *   <caption>Universal Polar Stereographic parameters</caption>
+     *   <tr><th>Parameter name</th>                 <th>Value</th></tr>
+     *   <tr><td>Latitude of natural origin</td>     <td>90°N or 90°S</td></tr>
+     *   <tr><td>Longitude of natural origin</td>    <td>0°</td></tr>
+     *   <tr><td>Scale factor at natural origin</td> <td>0.994</td></tr>
+     *   <tr><td>False easting</td>                  <td>2000000 metres</td></tr>
+     *   <tr><td>False northing</td>                 <td>2000000 metres</td></tr>
+     * </table></blockquote>
+     *
+     * @param  group  the parameters for which to set the values.
+     * @param  north  {@code true} for North pole, or {@code false} for South pole.
+     * @return a name like <cite>"Universal Polar Stereographic North"</cite>,
+     *         depending on the arguments given to this method.
+     *
+     * @since 0.8
+     */
+    public static String setParameters(final ParameterValueGroup group, final boolean north) {
+        group.parameter(Constants.LATITUDE_OF_ORIGIN).setValue(north ? Latitude.MAX_VALUE : Latitude.MIN_VALUE, Units.DEGREE);
+        group.parameter(Constants.CENTRAL_MERIDIAN)  .setValue(0,         Units.DEGREE);
+        group.parameter(Constants.SCALE_FACTOR)      .setValue(0.994,     Units.UNITY);
+        group.parameter(Constants.FALSE_EASTING)     .setValue(UPS_SHIFT, Units.METRE);
+        group.parameter(Constants.FALSE_NORTHING)    .setValue(UPS_SHIFT, Units.METRE);
+        return "Universal Polar Stereographic " + (north ? "North" : "South");
+    }
+
+    /**
+     * If the given parameter values are those of a Universal Polar Stereographic projection,
+     * returns -1 for South pole or +1 for North pole. Otherwise returns 0. It is caller's
+     * responsibility to verify that the operation method is {@value #NAME}.
+     *
+     * @param  group  the Transverse Mercator projection parameters.
+     * @return +1 if UPS north, -1 if UPS south, or 0 if the given parameters are not for a UPS projection.
+     *
+     * @since 0.8
+     */
+    public static int isUPS(final ParameterValueGroup group) {
+        if (Numerics.epsilonEqual(group.parameter(Constants.SCALE_FACTOR)    .doubleValue(Units.UNITY),     0.994, Numerics.COMPARISON_THRESHOLD) &&
+            Numerics.epsilonEqual(group.parameter(Constants.FALSE_EASTING)   .doubleValue(Units.METRE), UPS_SHIFT, Formulas.LINEAR_TOLERANCE) &&
+            Numerics.epsilonEqual(group.parameter(Constants.FALSE_NORTHING)  .doubleValue(Units.METRE), UPS_SHIFT, Formulas.LINEAR_TOLERANCE) &&
+            Numerics.epsilonEqual(group.parameter(Constants.CENTRAL_MERIDIAN).doubleValue(Units.DEGREE),        0, Formulas.ANGULAR_TOLERANCE))
+        {
+            final double φ = group.parameter(Constants.LATITUDE_OF_ORIGIN).doubleValue(Units.DEGREE);
+            if (Numerics.epsilonEqual(φ, Latitude.MAX_VALUE, Formulas.ANGULAR_TOLERANCE)) return +1;
+            if (Numerics.epsilonEqual(φ, Latitude.MIN_VALUE, Formulas.ANGULAR_TOLERANCE)) return -1;
+        }
+        return 0;
+    }
 }

Modified: sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/TransverseMercator.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/TransverseMercator.java?rev=1785905&r1=1785904&r2=1785905&view=diff
==============================================================================
--- sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/TransverseMercator.java [UTF-8] (original)
+++ sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/TransverseMercator.java [UTF-8] Tue Mar  7 23:37:49 2017
@@ -141,7 +141,8 @@ public final class TransverseMercator ex
      */
     public static enum Zoner {
         /**
-         * Computes zones for the Universal Transverse Mercator (UTM) projections.
+         * Universal Transverse Mercator (UTM) projection zones.
+         * The zone computation includes special cases for Norway and Svalbard.
          *
          * <blockquote><table class="sis">
          *   <caption>Universal Transverse Mercator parameters</caption>
@@ -153,11 +154,37 @@ public final class TransverseMercator ex
          *   <tr><td>False northing</td>                 <td>0 (North hemisphere) or 10000000 (South hemisphere) metres</td></tr>
          * </table></blockquote>
          */
-        UTM(Longitude.MIN_VALUE, 6, 0.9996, 500000, 10000000),
+        UTM(Longitude.MIN_VALUE, 6, 0.9996, 500000, 10000000) {
+            /** Computes the zone from a meridian in the zone. */
+            @Override public int zone(final double φ, final double λ) {
+                int zone = super.zone(φ, λ);
+                switch (zone) {
+                    /*
+                     * Between 56° and 64°, zone  32 is widened to 9° at the expense of zone 31 to accommodate Norway.
+                     * Between 72° and 84°, zones 33 and 35 are widened to 12° to accommodate Svalbard. To compensate,
+                     * zones 31 and 37 are widened to 9° and zones 32, 34, and 36 are eliminated.
+                     * In this switch statement, only the zones that are reduced or eliminated needs to appear.
+                     */
+                    case 31: if (isNorway  (φ)) {if (λ >=  3) zone++;             } break;   //  3° is zone 31 central meridian.
+                    case 32: if (isSvalbard(φ)) {if (λ >=  9) zone++; else zone--;} break;   //  9° is zone 32 central meridian.
+                    case 34: if (isSvalbard(φ)) {if (λ >= 21) zone++; else zone--;} break;   // 21° is zone 34 central meridian.
+                    case 36: if (isSvalbard(φ)) {if (λ >= 33) zone++; else zone--;} break;   // 33° is zone 36 central meridian.
+                }
+                return zone;
+            }
+
+            /** Indicates whether the given zone needs to be handled in a special way for the given latitude. */
+            @Override public boolean isSpecialCase(final int zone, final double φ) {
+                if (zone >= 31 && zone <= 37) {
+                    return isSvalbard(φ) || (zone <= 32 && isNorway(φ));
+                }
+                return false;
+            }
+        },
 
         /**
-         * Computes zones for the Modified Transverse Mercator (MTM) projections.
-         * This projection is in used in Canada only.
+         * Modified Transverse Mercator (MTM) projection zones.
+         * This projection is used in Canada only.
          *
          * <blockquote><table class="sis">
          *   <caption>Modified Transverse Mercator parameters</caption>
@@ -169,13 +196,23 @@ public final class TransverseMercator ex
          *   <tr><td>False northing</td>                 <td>0 metres</td></tr>
          * </table></blockquote>
          */
-        MTM(-51.5, -3, 0.9999, 304800, Double.NaN);
+        MTM(-51.5, -3, 0.9999, 304800, Double.NaN),
+
+        /**
+         * Like UTM, but allows <cite>latitude of origin</cite> and <cite>central meridian</cite> to be anywhere.
+         * The given central meridian is not snapped to the UTM zone center and no special case is applied for
+         * Norway or Svalbard.
+         *
+         * <p>This zoner matches the behavior of {@code AUTO(2):42002} authority code specified in the
+         * OGC <cite>Web Map Service</cite> (WMS) specification.</p>
+         */
+        ANY(Longitude.MIN_VALUE, 6, 0.9996, 500000, 10000000);
 
         /**
          * Longitude of the beginning of zone 1. This is the westmost longitude if {@link #width} is positive,
          * or the eastmost longitude if {@code width} is negative.
          */
-        private final double origin;
+        public final double origin;
 
         /**
          * Width of a zone, in degrees of longitude.
@@ -184,22 +221,22 @@ public final class TransverseMercator ex
          * @see #zone(double)
          * @see #centralMeridian(int)
          */
-        private final double width;
+        public final double width;
 
         /**
-         * The scale factor of UTM projections.
+         * The scale factor of zoned projections.
          */
-        private final double scale;
+        public final double scale;
 
         /**
-         * The false easting of UTM projections, in metres.
+         * The false easting of zoned projections, in metres.
          */
-        private final double easting;
+        public final double easting;
 
         /**
-         * The false northing in South hemisphere of UTM projection, in metres.
+         * The false northing in South hemisphere of zoned projection, in metres.
          */
-        private final double northing;
+        public final double northing;
 
         /**
          * Creates a new instance for computing zones using the given parameters.
@@ -220,32 +257,34 @@ public final class TransverseMercator ex
          *   <tr><th>Parameter name</th>                 <th>Value</th></tr>
          *   <tr><td>Latitude of natural origin</td>     <td>Given latitude, or 0° if zoned projection</td></tr>
          *   <tr><td>Longitude of natural origin</td>    <td>Given longitude, optionally snapped to a zone central meridian</td></tr>
-         *   <tr><td>Scale factor at natural origin</td> <td>0.9996</td></tr>
-         *   <tr><td>False easting</td>                  <td>500000 metres</td></tr>
+         *   <tr><td>Scale factor at natural origin</td> <td>0.9996 for UTM or 0.9999 for MTM</td></tr>
+         *   <tr><td>False easting</td>                  <td>500000 metres for UTM or 304800 metres for MTM</td></tr>
          *   <tr><td>False northing</td>                 <td>0 (North hemisphere) or 10000000 (South hemisphere) metres</td></tr>
          * </table></blockquote>
          *
          * @param  group      the parameters for which to set the values.
-         * @param  zoned      {@code true} for snapping the given latitude/longitude to a zone.
          * @param  latitude   the latitude in the center of the desired projection.
          * @param  longitude  the longitude in the center of the desired projection.
          * @return a name like <cite>"Transverse Mercator"</cite> or <cite>"UTM zone 10N"</cite>,
          *         depending on the arguments given to this method.
          */
-        public String setParameters(final ParameterValueGroup group,
-                final boolean zoned, double latitude, double longitude)
-        {
+        public final String setParameters(final ParameterValueGroup group, double latitude, double longitude) {
             final boolean isSouth = MathFunctions.isNegative(latitude);
-            int zone = zone(longitude);
-            if (zoned) {
-                latitude = 0;
+            int zone = zone(latitude, longitude);
+            String name;
+            if (this == ANY) {
+                name = "UTM";
+                if (latitude != 0 || longitude != centralMeridian(zone)) {
+                    name = NAME;
+                    zone = 0;
+                }
+            } else {
+                name      = name();
+                latitude  = 0;
                 longitude = centralMeridian(zone);
-            } else if (longitude != centralMeridian(zone)) {
-                zone = 0;
             }
-            String name = NAME;
             if (zone != 0) {
-                name = name() + " zone " + zone + (isSouth ? 'S' : 'N');
+                name = name + " zone " + zone + (isSouth ? 'S' : 'N');
             }
             group.parameter(Constants.LATITUDE_OF_ORIGIN).setValue(latitude,  Units.DEGREE);
             group.parameter(Constants.CENTRAL_MERIDIAN)  .setValue(longitude, Units.DEGREE);
@@ -256,14 +295,14 @@ public final class TransverseMercator ex
         }
 
         /**
-         * If the given parameter values are those of an UTM projection, returns the zone number (negative if South).
+         * If the given parameter values are those of a zoned projection, returns the zone number (negative if South).
          * Otherwise returns 0. It is caller's responsibility to verify that the operation method is {@value #NAME}.
          *
          * @param  group  the Transverse Mercator projection parameters.
-         * @return UTM zone number (positive if North, negative if South),
-         *         or 0 if the given parameters are not for a UTM projection.
+         * @return zone number (positive if North, negative if South),
+         *         or 0 if the given parameters are not for a zoned projection.
          */
-        public int zone(final ParameterValueGroup group) {
+        public final int zone(final ParameterValueGroup group) {
             if (Numerics.epsilonEqual(group.parameter(Constants.SCALE_FACTOR)      .doubleValue(Units.UNITY), scale,   Numerics.COMPARISON_THRESHOLD) &&
                 Numerics.epsilonEqual(group.parameter(Constants.FALSE_EASTING)     .doubleValue(Units.METRE), easting, Formulas.LINEAR_TOLERANCE) &&
                 Numerics.epsilonEqual(group.parameter(Constants.LATITUDE_OF_ORIGIN).doubleValue(Units.DEGREE),      0, Formulas.ANGULAR_TOLERANCE))
@@ -272,7 +311,7 @@ public final class TransverseMercator ex
                 final boolean isNorth = Numerics.epsilonEqual(v, 0, Formulas.LINEAR_TOLERANCE);
                 if (isNorth || Numerics.epsilonEqual(v, northing, Formulas.LINEAR_TOLERANCE)) {
                     v = group.parameter(Constants.CENTRAL_MERIDIAN).doubleValue(Units.DEGREE);
-                    int zone = zone(v);
+                    int zone = zone(0, v);
                     if (Numerics.epsilonEqual(centralMeridian(zone), v, Formulas.ANGULAR_TOLERANCE)) {
                         if (!isNorth) zone = -zone;
                         return zone;
@@ -283,31 +322,95 @@ public final class TransverseMercator ex
         }
 
         /**
-         * Computes the UTM zone from a meridian in the zone.
+         * Computes the zone from a meridian in the zone.
          *
-         * @param  longitude  a meridian inside the desired zone, in degrees relative to Greenwich.
-         *                    Positive longitudes are toward east, and negative longitudes toward west.
-         * @return the UTM zone number numbered from 1 to 60 inclusive, or 0 if the given central meridian was NaN.
-         */
-        public int zone(double longitude) {
+         * @param  φ  a latitude for which to get the zone. Used for taking in account the special cases.
+         * @param  λ  a meridian inside the desired zone, in degrees relative to Greenwich.
+         *            Positive longitudes are toward east, and negative longitudes toward west.
+         * @return the zone number numbered from 1 inclusive, or 0 if the given central meridian was NaN.
+         */
+        public int zone(final double φ, final double λ) {
+            double z = (λ - origin) / width;                                              // Zone number with fractional part.
+            final double count = (Longitude.MAX_VALUE - Longitude.MIN_VALUE) / width;
+            z -= Math.floor(z / count) * count;                                           // Roll in the [0 … 60) range.
             /*
              * Casts to int are equivalent to Math.floor(double) for positive values, which is guaranteed
-             * to be the case here since we normalize the central meridian to the [MIN_VALUE … MAX_VALUE] range.
+             * to be the case here since we normalize the central meridian to the [MIN_VALUE … MAX_VALUE]
+             * range. We cast only after addition in order to handle NaN as documented.
              */
-            double z = (longitude - origin) / width;                                      // Zone number with fractional part.
-            z -= Math.floor(z / ((Longitude.MAX_VALUE - Longitude.MIN_VALUE) / width))    // Roll in the [0 … 60) range.
-                              * ((Longitude.MAX_VALUE - Longitude.MIN_VALUE) / width);
-            return (int) (z + 1);   // Cast only after addition in order to handle NaN as documented.
+            return (int) (z + 1);
         }
 
         /**
-         * Computes the central meridian of a given UTM zone.
+         * Returns the number of zones.
          *
-         * @param  zone  the UTM zone as a number in the [1 … 60] range.
-         * @return the central meridian of the given UTM zone.
+         * @return number of zones.
          */
-        public double centralMeridian(final int zone) {
+        public final int zoneCount() {
+            return (int) ((Longitude.MAX_VALUE - Longitude.MIN_VALUE) / width);
+        }
+
+        /**
+         * Computes the central meridian of a given zone.
+         *
+         * @param  zone  the zone as a number starting with 1.
+         * @return the central meridian of the given zone.
+         */
+        public final double centralMeridian(final int zone) {
             return (zone - 0.5) * width + origin;
         }
+
+        /**
+         * Indicates whether the given zone needs to be handled in a special way for the given latitude.
+         *
+         * @param  zone  the zone to test if it is a special case.
+         * @param  φ     the latitude for which to test if there is a special case.
+         * @return whether the given zone at the given latitude is a special case.
+         */
+        public boolean isSpecialCase(final int zone, final double φ) {
+            return false;
+        }
+
+        /**
+         * First exception in UTM projection, corresponding to latitude band V.
+         * This method is public for {@code MilitaryGridReferenceSystemTest.verifyZonerConsistency()} purpose only.
+         *
+         * @param  φ  the latitude in degrees to test.
+         * @return whether the given latitude is in the Norway latitude band.
+         */
+        public static boolean isNorway(final double φ) {
+            return (φ >= 56) && (φ < 64);
+        }
+
+        /**
+         * Second exception in UTM projection, corresponding to latitude band X.
+         * This method is public for {@code MilitaryGridReferenceSystemTest.verifyZonerConsistency()} purpose only.
+         *
+         * @param  φ  the latitude in degrees to test.
+         * @return whether the given latitude is in the Svalbard latitude band.
+         */
+        public static boolean isSvalbard(final double φ) {
+            return (φ >= SVALBARD_BOUNDS) && (φ < NORTH_BOUNDS);
+        }
+
+        /**
+         * Southernmost bound of the first latitude band ({@code 'C'}), inclusive.
+         *
+         * @see #NORTH_BOUNDS
+         */
+        public static final double SOUTH_BOUNDS = -80;
+
+        /**
+         * Southernmost bounds (inclusive) of the last latitude band, which contains Svalbard.
+         * This latitude band is 12° height instead of 8°.
+         */
+        public static final double SVALBARD_BOUNDS = 72;
+
+        /**
+         * Northernmost bound of the last latitude band ({@code 'X'}), exclusive.
+         *
+         * @see #SOUTH_BOUNDS
+         */
+        public static final double NORTH_BOUNDS = 84;
     }
 }

Modified: sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptor.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptor.java?rev=1785905&r1=1785904&r2=1785905&view=diff
==============================================================================
--- sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptor.java [UTF-8] (original)
+++ sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptor.java [UTF-8] Tue Mar  7 23:37:49 2017
@@ -28,6 +28,7 @@ import org.opengis.parameter.ParameterVa
 import org.opengis.parameter.ParameterDescriptor;
 import org.apache.sis.util.Classes;
 import org.apache.sis.util.Numbers;
+import org.apache.sis.util.Utilities;
 import org.apache.sis.util.ComparisonMode;
 import org.apache.sis.util.resources.Errors;
 import org.apache.sis.measure.Range;
@@ -67,7 +68,7 @@ import static org.apache.sis.util.Argume
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Johann Sorel (Geomatys)
  * @since   0.4
- * @version 0.6
+ * @version 0.8
  * @module
  *
  * @see DefaultParameterValue
@@ -468,7 +469,7 @@ public class DefaultParameterDescriptor<
                     final ParameterDescriptor<?> that = (ParameterDescriptor<?>) object;
                     return getValueClass() == that.getValueClass() &&
                            Objects.deepEquals(getDefaultValue(), that.getDefaultValue()) &&
-                           Objects.equals(getUnit(), that.getUnit()) &&
+                           Utilities.deepEquals(getUnit(), that.getUnit(), mode) &&
                            (isHeuristicMatchForName(that.getName().getCode()) ||
                             IdentifiedObjects.isHeuristicMatchForName(that, getName().getCode()));
                 }
@@ -481,7 +482,7 @@ public class DefaultParameterDescriptor<
                            Objects.    equals(getMinimumValue(), that.getMinimumValue()) &&
                            Objects.    equals(getMaximumValue(), that.getMaximumValue()) &&
                            Objects.deepEquals(getDefaultValue(), that.getDefaultValue()) &&
-                           Objects.    equals(getUnit(),         that.getUnit());
+                           Utilities.deepEquals(getUnit(),       that.getUnit(), mode);
                 }
                 case STRICT: {
                     final DefaultParameterDescriptor<?> that = (DefaultParameterDescriptor<?>) object;

Modified: sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterValue.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterValue.java?rev=1785905&r1=1785904&r2=1785905&view=diff
==============================================================================
--- sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterValue.java [UTF-8] (original)
+++ sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterValue.java [UTF-8] Tue Mar  7 23:37:49 2017
@@ -118,7 +118,7 @@ import static org.apache.sis.util.Utilit
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @since   0.4
- * @version 0.7
+ * @version 0.8
  * @module
  *
  * @see DefaultParameterDescriptor
@@ -787,8 +787,8 @@ public class DefaultParameterValue<T> ex
             } else if (object instanceof ParameterValue<?>) {
                 final ParameterValue<?> that = (ParameterValue<?>) object;
                 return deepEquals(getDescriptor(), that.getDescriptor(), mode) &&
-                       deepEquals(getValue(),      that.getValue(), mode) &&
-                       Objects.equals(getUnit(),   that.getUnit());
+                       deepEquals(getValue(),      that.getValue(),      mode) &&
+                       deepEquals(getUnit(),       that.getUnit(),       mode);
             }
         }
         return false;

Modified: sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/parameter/ParameterFormat.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/parameter/ParameterFormat.java?rev=1785905&r1=1785904&r2=1785905&view=diff
==============================================================================
--- sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/parameter/ParameterFormat.java [UTF-8] (original)
+++ sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/parameter/ParameterFormat.java [UTF-8] Tue Mar  7 23:37:49 2017
@@ -98,8 +98,11 @@ import static org.apache.sis.util.collec
  *   <tr><td><code>{@linkplain IdentifiedObject}[]</code></td><td>Accepted only for {@link ContentLevel#NAME_SUMMARY}.</td></tr>
  * </table>
  *
+ * Like most {@link java.text.Format} implementations, this class is not thread-safe.
+ * Each thread should use its own {@code ParameterFormat} instance or apply synchronization.
+ *
  * <div class="warning"><b>Limitation:</b>
- * Current implementation supports only formatting, not parsing.
+ * the current implementation can only format parameters — parsing is not yet implemented.
  * </div>
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)

Modified: sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/CRS.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/CRS.java?rev=1785905&r1=1785904&r2=1785905&view=diff
==============================================================================
--- sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/CRS.java [UTF-8] (original)
+++ sis/trunk/core/sis-referencing/src/main/java/org/apache/sis/referencing/CRS.java [UTF-8] Tue Mar  7 23:37:49 2017
@@ -140,23 +140,29 @@ public final class CRS extends Static {
      *
      * <blockquote><table class="sis">
      *   <caption>Minimal set of supported authority codes</caption>
-     *   <tr><th>Code</th>      <th>Enum</th>                            <th>CRS Type</th>      <th>Description</th></tr>
-     *   <tr><td>CRS:27</td>    <td>{@link CommonCRS#NAD27  NAD27}</td>  <td>Geographic</td>    <td>Like EPSG:4267 except for (<var>longitude</var>, <var>latitude</var>) axis order</td></tr>
-     *   <tr><td>CRS:83</td>    <td>{@link CommonCRS#NAD83  NAD83}</td>  <td>Geographic</td>    <td>Like EPSG:4269 except for (<var>longitude</var>, <var>latitude</var>) axis order</td></tr>
-     *   <tr><td>CRS:84</td>    <td>{@link CommonCRS#WGS84  WGS84}</td>  <td>Geographic</td>    <td>Like EPSG:4326 except for (<var>longitude</var>, <var>latitude</var>) axis order</td></tr>
-     *   <tr><td>EPSG:4047</td> <td>{@link CommonCRS#SPHERE SPHERE}</td> <td>Geographic</td>    <td>GRS 1980 Authalic Sphere</td></tr>
-     *   <tr><td>EPSG:4230</td> <td>{@link CommonCRS#ED50   ED50}</td>   <td>Geographic</td>    <td>European Datum 1950</td></tr>
-     *   <tr><td>EPSG:4258</td> <td>{@link CommonCRS#ETRS89 ETRS89}</td> <td>Geographic</td>    <td>European Terrestrial Reference Frame 1989</td></tr>
-     *   <tr><td>EPSG:4267</td> <td>{@link CommonCRS#NAD27  NAD27}</td>  <td>Geographic</td>    <td>North American Datum 1927</td></tr>
-     *   <tr><td>EPSG:4269</td> <td>{@link CommonCRS#NAD83  NAD83}</td>  <td>Geographic</td>    <td>North American Datum 1983</td></tr>
-     *   <tr><td>EPSG:4322</td> <td>{@link CommonCRS#WGS72  WGS72}</td>  <td>Geographic</td>    <td>World Geodetic System 1972</td></tr>
-     *   <tr><td>EPSG:4326</td> <td>{@link CommonCRS#WGS84  WGS84}</td>  <td>Geographic</td>    <td>World Geodetic System 1984</td></tr>
-     *   <tr><td>EPSG:4936</td> <td>{@link CommonCRS#ETRS89 ETRS89}</td> <td>Geocentric</td>    <td>European Terrestrial Reference Frame 1989</td></tr>
-     *   <tr><td>EPSG:4937</td> <td>{@link CommonCRS#ETRS89 ETRS89}</td> <td>Geographic 3D</td> <td>European Terrestrial Reference Frame 1989</td></tr>
-     *   <tr><td>EPSG:4978</td> <td>{@link CommonCRS#WGS84  WGS84}</td>  <td>Geocentric</td>    <td>World Geodetic System 1984</td></tr>
-     *   <tr><td>EPSG:4979</td> <td>{@link CommonCRS#WGS84  WGS84}</td>  <td>Geographic 3D</td> <td>World Geodetic System 1984</td></tr>
-     *   <tr><td>EPSG:4984</td> <td>{@link CommonCRS#WGS72  WGS72}</td>  <td>Geocentric</td>    <td>World Geodetic System 1972</td></tr>
-     *   <tr><td>EPSG:4985</td> <td>{@link CommonCRS#WGS72  WGS72}</td>  <td>Geographic 3D</td> <td>World Geodetic System 1972</td></tr>
+     *   <tr><th>Code</th>      <th>Enum</th>                            <th>CRS Type</th>        <th>Description</th></tr>
+     *   <tr><td>CRS:27</td>    <td>{@link CommonCRS#NAD27  NAD27}</td>  <td>Geographic</td>      <td>Like EPSG:4267 except for (<var>longitude</var>, <var>latitude</var>) axis order</td></tr>
+     *   <tr><td>CRS:83</td>    <td>{@link CommonCRS#NAD83  NAD83}</td>  <td>Geographic</td>      <td>Like EPSG:4269 except for (<var>longitude</var>, <var>latitude</var>) axis order</td></tr>
+     *   <tr><td>CRS:84</td>    <td>{@link CommonCRS#WGS84  WGS84}</td>  <td>Geographic</td>      <td>Like EPSG:4326 except for (<var>longitude</var>, <var>latitude</var>) axis order</td></tr>
+     *   <tr><td>EPSG:4047</td> <td>{@link CommonCRS#SPHERE SPHERE}</td> <td>Geographic</td>      <td>GRS 1980 Authalic Sphere</td></tr>
+     *   <tr><td>EPSG:4230</td> <td>{@link CommonCRS#ED50   ED50}</td>   <td>Geographic</td>      <td>European Datum 1950</td></tr>
+     *   <tr><td>EPSG:4258</td> <td>{@link CommonCRS#ETRS89 ETRS89}</td> <td>Geographic</td>      <td>European Terrestrial Reference Frame 1989</td></tr>
+     *   <tr><td>EPSG:4267</td> <td>{@link CommonCRS#NAD27  NAD27}</td>  <td>Geographic</td>      <td>North American Datum 1927</td></tr>
+     *   <tr><td>EPSG:4269</td> <td>{@link CommonCRS#NAD83  NAD83}</td>  <td>Geographic</td>      <td>North American Datum 1983</td></tr>
+     *   <tr><td>EPSG:4322</td> <td>{@link CommonCRS#WGS72  WGS72}</td>  <td>Geographic</td>      <td>World Geodetic System 1972</td></tr>
+     *   <tr><td>EPSG:4326</td> <td>{@link CommonCRS#WGS84  WGS84}</td>  <td>Geographic</td>      <td>World Geodetic System 1984</td></tr>
+     *   <tr><td>EPSG:4936</td> <td>{@link CommonCRS#ETRS89 ETRS89}</td> <td>Geocentric</td>      <td>European Terrestrial Reference Frame 1989</td></tr>
+     *   <tr><td>EPSG:4937</td> <td>{@link CommonCRS#ETRS89 ETRS89}</td> <td>Geographic 3D</td>   <td>European Terrestrial Reference Frame 1989</td></tr>
+     *   <tr><td>EPSG:4978</td> <td>{@link CommonCRS#WGS84  WGS84}</td>  <td>Geocentric</td>      <td>World Geodetic System 1984</td></tr>
+     *   <tr><td>EPSG:4979</td> <td>{@link CommonCRS#WGS84  WGS84}</td>  <td>Geographic 3D</td>   <td>World Geodetic System 1984</td></tr>
+     *   <tr><td>EPSG:4984</td> <td>{@link CommonCRS#WGS72  WGS72}</td>  <td>Geocentric</td>      <td>World Geodetic System 1972</td></tr>
+     *   <tr><td>EPSG:4985</td> <td>{@link CommonCRS#WGS72  WGS72}</td>  <td>Geographic 3D</td>   <td>World Geodetic System 1972</td></tr>
+     *   <tr><td>EPSG:5041</td> <td>{@link CommonCRS#WGS84  WGS84}</td>  <td>Projected</td>       <td>WGS 84 / UPS North (E,N)</td></tr>
+     *   <tr><td>EPSG:5042</td> <td>{@link CommonCRS#WGS84  WGS84}</td>  <td>Projected</td>       <td>WGS 84 / UPS South (E,N)</td></tr>
+     *   <tr><td>EPSG:322##</td><td>{@link CommonCRS#WGS72  WGS72}</td>  <td>Projected</td>       <td>WGS 72 / UTM zone ##N</td></tr>
+     *   <tr><td>EPSG:323##</td><td>{@link CommonCRS#WGS72  WGS72}</td>  <td>Projected</td>       <td>WGS 72 / UTM zone ##S</td></tr>
+     *   <tr><td>EPSG:326##</td><td>{@link CommonCRS#WGS84  WGS84}</td>  <td>Projected</td>       <td>WGS 84 / UTM zone ##N</td></tr>
+     *   <tr><td>EPSG:327##</td><td>{@link CommonCRS#WGS84  WGS84}</td>  <td>Projected</td>       <td>WGS 84 / UTM zone ##S</td></tr>
      *   <tr><td>EPSG:5715</td> <td>{@link CommonCRS.Vertical#DEPTH DEPTH}</td> <td>Vertical</td> <td>Mean Sea Level depth</td></tr>
      *   <tr><td>EPSG:5714</td> <td>{@link CommonCRS.Vertical#MEAN_SEA_LEVEL MEAN_SEA_LEVEL}</td> <td>Vertical</td> <td>Mean Sea Level height</td></tr>
      * </table></blockquote>



Mime
View raw message