Coverage Report - org.geotoolkit.referencing.operation.provider.TransverseMercator
 
Classes in this File Line Coverage Branch Coverage Complexity
TransverseMercator
100 %
13/13
N/A
1
TransverseMercator$SouthOrientated
100 %
6/6
N/A
1
 
 1  
 /*
 2  
  *    Geotoolkit.org - An Open Source Java GIS Toolkit
 3  
  *    http://www.geotoolkit.org
 4  
  *
 5  
  *    (C) 1999-2012, Open Source Geospatial Foundation (OSGeo)
 6  
  *    (C) 2009-2012, Geomatys
 7  
  *
 8  
  *    This library is free software; you can redistribute it and/or
 9  
  *    modify it under the terms of the GNU Lesser General Public
 10  
  *    License as published by the Free Software Foundation;
 11  
  *    version 2.1 of the License.
 12  
  *
 13  
  *    This library is distributed in the hope that it will be useful,
 14  
  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 15  
  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 16  
  *    Lesser General Public License for more details.
 17  
  */
 18  
 package org.geotoolkit.referencing.operation.provider;
 19  
 
 20  
 import net.jcip.annotations.Immutable;
 21  
 
 22  
 import org.opengis.metadata.citation.Citation;
 23  
 import org.opengis.parameter.ParameterValueGroup;
 24  
 import org.opengis.parameter.ParameterDescriptor;
 25  
 import org.opengis.parameter.ParameterDescriptorGroup;
 26  
 import org.opengis.referencing.ReferenceIdentifier;
 27  
 import org.opengis.referencing.operation.MathTransform2D;
 28  
 import org.opengis.referencing.operation.CylindricalProjection;
 29  
 
 30  
 import org.geotoolkit.resources.Vocabulary;
 31  
 import org.geotoolkit.referencing.NamedIdentifier;
 32  
 import org.geotoolkit.metadata.iso.citation.Citations;
 33  
 
 34  
 
 35  
 /**
 36  
  * The provider for "<cite>Transverse Mercator</cite>" projection (EPSG:9807).
 37  
  * The math transform implementations instantiated by this provider may be any of the following classes:
 38  
  * <p>
 39  
  * <ul>
 40  
  *   <li>{@link org.geotoolkit.referencing.operation.projection.TransverseMercator}</li>
 41  
  * </ul>
 42  
  *
 43  
  * <!-- PARAMETERS TransverseMercator -->
 44  
  * <p>The following table summarizes the parameters recognized by this provider.
 45  
  * For a more detailed parameter list, see the {@link #PARAMETERS} constant.</p>
 46  
  * <blockquote><p><b>Operation name:</b> {@code Transverse_Mercator}
 47  
  * <br><b>Area of use:</b> <font size="-1">(union of CRS domains of validity in EPSG database)</font></p>
 48  
  * <blockquote><table class="compact">
 49  
  *   <tr><td><b>in latitudes:</b></td><td class="onright">80°00.0′S</td><td>to</td><td class="onright">84°00.0′N</td></tr>
 50  
  *   <tr><td><b>in longitudes:</b></td><td class="onright">180°00.0′W</td><td>to</td><td class="onright">180°00.0′E</td></tr>
 51  
  * </table></blockquote>
 52  
  * <table class="geotk">
 53  
  *   <tr><th>Parameter name</th><th>Default value</th></tr>
 54  
  *   <tr><td>{@code semi_major}</td><td></td></tr>
 55  
  *   <tr><td>{@code semi_minor}</td><td></td></tr>
 56  
  *   <tr><td>{@code roll_longitude}</td><td>false</td></tr>
 57  
  *   <tr><td>{@code central_meridian}</td><td>0°</td></tr>
 58  
  *   <tr><td>{@code latitude_of_origin}</td><td>0°</td></tr>
 59  
  *   <tr><td>{@code scale_factor}</td><td>1</td></tr>
 60  
  *   <tr><td>{@code false_easting}</td><td>0 metres</td></tr>
 61  
  *   <tr><td>{@code false_northing}</td><td>0 metres</td></tr>
 62  
  * </table></blockquote>
 63  
  * <!-- END OF PARAMETERS -->
 64  
  *
 65  
  * @author Martin Desruisseaux (MPO, IRD, Geomatys)
 66  
  * @author Rueben Schulz (UBC)
 67  
  * @version 3.20
 68  
  *
 69  
  * @see <A HREF="http://www.remotesensing.org/geotiff/proj_list/transverse_mercator.html">Transverse Mercator on RemoteSensing.org</A>
 70  
  * @see <a href="{@docRoot}/../modules/referencing/operation-parameters.html">Geotk coordinate operations matrix</a>
 71  
  *
 72  
  * @since 2.1
 73  
  * @module
 74  
  */
 75  2229
 @Immutable
 76  
 public class TransverseMercator extends MapProjection {
 77  
     /**
 78  
      * For cross-version compatibility.
 79  
      */
 80  
     private static final long serialVersionUID = -3386587506686432398L;
 81  
 
 82  
     /**
 83  
      * The operation parameter descriptor for the {@linkplain
 84  
      * org.geotoolkit.referencing.operation.projection.UnitaryProjection.Parameters#centralMeridian
 85  
      * central meridian} parameter value.
 86  
      *
 87  
      * This parameter is <a href="package-summary.html#Obligation">mandatory</a>.
 88  
      * Valid values range is [-180 &hellip; 180]&deg; and default value is 0&deg;.
 89  
      *
 90  
      * @deprecated Invoke <code>{@linkplain #PARAMETERS}.{@linkplain ParameterDescriptorGroup#descriptor(String)
 91  
      * descriptor(String)}</code> instead.
 92  
      */
 93  
     @Deprecated
 94  1
     public static final ParameterDescriptor<Double> CENTRAL_MERIDIAN =
 95  
             UniversalParameters.CENTRAL_MERIDIAN.select(null,
 96  
                 "Longitude of natural origin",    // EPSG
 97  
                 "central_meridian",               // OGC
 98  
                 "Central_Meridian",               // ESRI
 99  
                 "longitude_of_central_meridian",  // NetCDF
 100  
                 "NatOriginLong");                 // GeoTIFF
 101  
 
 102  
     /**
 103  
      * The operation parameter descriptor for the {@linkplain
 104  
      * org.geotoolkit.referencing.operation.projection.UnitaryProjection.Parameters#latitudeOfOrigin
 105  
      * latitude of origin} parameter value.
 106  
      *
 107  
      * This parameter is <a href="package-summary.html#Obligation">mandatory</a>.
 108  
      * Valid values range is [-90 &hellip; 90]&deg; and default value is 0&deg;.
 109  
      *
 110  
      * @deprecated Invoke <code>{@linkplain #PARAMETERS}.{@linkplain ParameterDescriptorGroup#descriptor(String)
 111  
      * descriptor(String)}</code> instead.
 112  
      */
 113  
     @Deprecated
 114  1
     public static final ParameterDescriptor<Double> LATITUDE_OF_ORIGIN = Mercator2SP.LATITUDE_OF_ORIGIN;
 115  
 
 116  
     /**
 117  
      * The operation parameter descriptor for the {@linkplain
 118  
      * org.geotoolkit.referencing.operation.projection.UnitaryProjection.Parameters#scaleFactor
 119  
      * scale factor} parameter value.
 120  
      *
 121  
      * This parameter is <a href="package-summary.html#Obligation">mandatory</a>.
 122  
      * Valid values range is (0 &hellip; &infin;) and default value is 1.
 123  
      *
 124  
      * @deprecated Invoke <code>{@linkplain #PARAMETERS}.{@linkplain ParameterDescriptorGroup#descriptor(String)
 125  
      * descriptor(String)}</code> instead.
 126  
      */
 127  
     @Deprecated
 128  1
     public static final ParameterDescriptor<Double> SCALE_FACTOR =
 129  
             UniversalParameters.SCALE_FACTOR.select(null,
 130  
                 "Scale factor at natural origin",   // EPSG
 131  
                 "scale_factor_at_central_meridian", // NetCDF
 132  
                 "ScaleAtNatOrigin");                // GeoTIFF
 133  
 
 134  
     /**
 135  
      * The operation parameter descriptor for the {@linkplain
 136  
      * org.geotoolkit.referencing.operation.projection.UnitaryProjection.Parameters#falseEasting
 137  
      * false easting} parameter value.
 138  
      *
 139  
      * This parameter is <a href="package-summary.html#Obligation">mandatory</a>.
 140  
      * Valid values range is unrestricted and default value is 0 metre.
 141  
      *
 142  
      * @deprecated Invoke <code>{@linkplain #PARAMETERS}.{@linkplain ParameterDescriptorGroup#descriptor(String)
 143  
      * descriptor(String)}</code> instead.
 144  
      */
 145  
     @Deprecated
 146  1
     public static final ParameterDescriptor<Double> FALSE_EASTING = Mercator2SP.FALSE_EASTING;
 147  
 
 148  
     /**
 149  
      * The operation parameter descriptor for the {@linkplain
 150  
      * org.geotoolkit.referencing.operation.projection.UnitaryProjection.Parameters#falseNorthing
 151  
      * false northing} parameter value.
 152  
      *
 153  
      * This parameter is <a href="package-summary.html#Obligation">mandatory</a>.
 154  
      * Valid values range is unrestricted and default value is 0 metre.
 155  
      *
 156  
      * @deprecated Invoke <code>{@linkplain #PARAMETERS}.{@linkplain ParameterDescriptorGroup#descriptor(String)
 157  
      * descriptor(String)}</code> instead.
 158  
      */
 159  
     @Deprecated
 160  1
     public static final ParameterDescriptor<Double> FALSE_NORTHING = Mercator2SP.FALSE_NORTHING;
 161  
 
 162  
     /**
 163  
      * The group of all parameters expected by this coordinate operation.
 164  
      * The following table lists the operation names and the parameters recognized by Geotk:
 165  
      * <p>
 166  
      * <!-- GENERATED PARAMETERS - inserted by ProjectionParametersJavadoc -->
 167  
      * <table class="geotk" border="1">
 168  
      *   <tr><th colspan="2">
 169  
      *     <table class="compact">
 170  
      *       <tr><td><b>Name:</b></td><td class="onright"><code>OGC</code>:</td><td class="onleft"><code>Transverse_Mercator</code></td></tr>
 171  
      *       <tr><td><b>Alias:</b></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>Transverse Mercator</code></td></tr>
 172  
      *       <tr><td></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>Gauss-Kruger</code></td></tr>
 173  
      *       <tr><td></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>Gauss-Boaga</code></td></tr>
 174  
      *       <tr><td></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>TM</code></td></tr>
 175  
      *       <tr><td></td><td class="onright"><code>ESRI</code>:</td><td class="onleft"><code>Transverse_Mercator</code></td></tr>
 176  
      *       <tr><td></td><td class="onright"><code>ESRI</code>:</td><td class="onleft"><code>Gauss_Kruger</code></td></tr>
 177  
      *       <tr><td></td><td class="onright"><code>NetCDF</code>:</td><td class="onleft"><code>TransverseMercator</code></td></tr>
 178  
      *       <tr><td></td><td class="onright"><code>GeoTIFF</code>:</td><td class="onleft"><code>CT_TransverseMercator</code></td></tr>
 179  
      *       <tr><td></td><td class="onright"><code>PROJ4</code>:</td><td class="onleft"><code>tmerc</code></td></tr>
 180  
      *       <tr><td></td><td class="onright"><code>Geotk</code>:</td><td class="onleft"><code>Transverse Mercator projection</code></td></tr>
 181  
      *       <tr><td><b>Identifier:</b></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>9807</code></td></tr>
 182  
      *       <tr><td></td><td class="onright"><code>GeoTIFF</code>:</td><td class="onleft"><code>1</code></td></tr>
 183  
      *     </table>
 184  
      *   </th></tr>
 185  
      *   <tr><td>
 186  
      *     <table class="compact">
 187  
      *       <tr><td><b>Name:</b></td><td class="onright"><code>OGC</code>:</td><td class="onleft"><code>semi_major</code></td></tr>
 188  
      *       <tr><td><b>Alias:</b></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>Semi-major axis</code></td></tr>
 189  
      *       <tr><td></td><td class="onright"><code>ESRI</code>:</td><td class="onleft"><code>Semi_Major</code></td></tr>
 190  
      *       <tr><td></td><td class="onright"><code>NetCDF</code>:</td><td class="onleft"><code>semi_major_axis</code></td></tr>
 191  
      *       <tr><td></td><td class="onright"><code>GeoTIFF</code>:</td><td class="onleft"><code>SemiMajor</code></td></tr>
 192  
      *       <tr><td></td><td class="onright"><code>PROJ4</code>:</td><td class="onleft"><code>a</code></td></tr>
 193  
      *     </table>
 194  
      *   </td><td>
 195  
      *     <table class="compact">
 196  
      *       <tr><td><b>Type:</b></td><td>{@code Double}</td></tr>
 197  
      *       <tr><td><b>Obligation:</b></td><td>mandatory</td></tr>
 198  
      *       <tr><td><b>Value range:</b></td><td>[0…∞) metres</td></tr>
 199  
      *     </table>
 200  
      *   </td></tr>
 201  
      *   <tr><td>
 202  
      *     <table class="compact">
 203  
      *       <tr><td><b>Name:</b></td><td class="onright"><code>OGC</code>:</td><td class="onleft"><code>semi_minor</code></td></tr>
 204  
      *       <tr><td><b>Alias:</b></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>Semi-minor axis</code></td></tr>
 205  
      *       <tr><td></td><td class="onright"><code>ESRI</code>:</td><td class="onleft"><code>Semi_Minor</code></td></tr>
 206  
      *       <tr><td></td><td class="onright"><code>NetCDF</code>:</td><td class="onleft"><code>semi_minor_axis</code></td></tr>
 207  
      *       <tr><td></td><td class="onright"><code>GeoTIFF</code>:</td><td class="onleft"><code>SemiMinor</code></td></tr>
 208  
      *       <tr><td></td><td class="onright"><code>PROJ4</code>:</td><td class="onleft"><code>b</code></td></tr>
 209  
      *     </table>
 210  
      *   </td><td>
 211  
      *     <table class="compact">
 212  
      *       <tr><td><b>Type:</b></td><td>{@code Double}</td></tr>
 213  
      *       <tr><td><b>Obligation:</b></td><td>mandatory</td></tr>
 214  
      *       <tr><td><b>Value range:</b></td><td>[0…∞) metres</td></tr>
 215  
      *     </table>
 216  
      *   </td></tr>
 217  
      *   <tr><td>
 218  
      *     <table class="compact">
 219  
      *       <tr><td><b>Name:</b></td><td class="onright"><code>Geotk</code>:</td><td class="onleft"><code>roll_longitude</code></td></tr>
 220  
      *     </table>
 221  
      *   </td><td>
 222  
      *     <table class="compact">
 223  
      *       <tr><td><b>Type:</b></td><td>{@code Boolean}</td></tr>
 224  
      *       <tr><td><b>Obligation:</b></td><td>optional</td></tr>
 225  
      *       <tr><td><b>Default value:</b></td><td>false</td></tr>
 226  
      *     </table>
 227  
      *   </td></tr>
 228  
      *   <tr><td>
 229  
      *     <table class="compact">
 230  
      *       <tr><td><b>Name:</b></td><td class="onright"><code>OGC</code>:</td><td class="onleft"><code>central_meridian</code></td></tr>
 231  
      *       <tr><td><b>Alias:</b></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>Longitude of natural origin</code></td></tr>
 232  
      *       <tr><td></td><td class="onright"><code>ESRI</code>:</td><td class="onleft"><code>Central_Meridian</code></td></tr>
 233  
      *       <tr><td></td><td class="onright"><code>NetCDF</code>:</td><td class="onleft"><code>longitude_of_central_meridian</code></td></tr>
 234  
      *       <tr><td></td><td class="onright"><code>GeoTIFF</code>:</td><td class="onleft"><code>NatOriginLong</code></td></tr>
 235  
      *       <tr><td></td><td class="onright"><code>PROJ4</code>:</td><td class="onleft"><code>lon_0</code></td></tr>
 236  
      *     </table>
 237  
      *   </td><td>
 238  
      *     <table class="compact">
 239  
      *       <tr><td><b>Type:</b></td><td>{@code Double}</td></tr>
 240  
      *       <tr><td><b>Obligation:</b></td><td>mandatory</td></tr>
 241  
      *       <tr><td><b>Value range:</b></td><td>[-180 … 180]°</td></tr>
 242  
      *       <tr><td><b>Default value:</b></td><td>0°</td></tr>
 243  
      *     </table>
 244  
      *   </td></tr>
 245  
      *   <tr><td>
 246  
      *     <table class="compact">
 247  
      *       <tr><td><b>Name:</b></td><td class="onright"><code>OGC</code>:</td><td class="onleft"><code>latitude_of_origin</code></td></tr>
 248  
      *       <tr><td><b>Alias:</b></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>Latitude of natural origin</code></td></tr>
 249  
      *       <tr><td></td><td class="onright"><code>ESRI</code>:</td><td class="onleft"><code>Latitude_Of_Origin</code></td></tr>
 250  
      *       <tr><td></td><td class="onright"><code>NetCDF</code>:</td><td class="onleft"><code>latitude_of_projection_origin</code></td></tr>
 251  
      *       <tr><td></td><td class="onright"><code>GeoTIFF</code>:</td><td class="onleft"><code>NatOriginLat</code></td></tr>
 252  
      *       <tr><td></td><td class="onright"><code>PROJ4</code>:</td><td class="onleft"><code>lat_0</code></td></tr>
 253  
      *     </table>
 254  
      *   </td><td>
 255  
      *     <table class="compact">
 256  
      *       <tr><td><b>Type:</b></td><td>{@code Double}</td></tr>
 257  
      *       <tr><td><b>Obligation:</b></td><td>mandatory</td></tr>
 258  
      *       <tr><td><b>Value range:</b></td><td>[-90 … 90]°</td></tr>
 259  
      *       <tr><td><b>Default value:</b></td><td>0°</td></tr>
 260  
      *     </table>
 261  
      *   </td></tr>
 262  
      *   <tr><td>
 263  
      *     <table class="compact">
 264  
      *       <tr><td><b>Name:</b></td><td class="onright"><code>OGC</code>:</td><td class="onleft"><code>scale_factor</code></td></tr>
 265  
      *       <tr><td><b>Alias:</b></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>Scale factor at natural origin</code></td></tr>
 266  
      *       <tr><td></td><td class="onright"><code>ESRI</code>:</td><td class="onleft"><code>Scale_Factor</code></td></tr>
 267  
      *       <tr><td></td><td class="onright"><code>NetCDF</code>:</td><td class="onleft"><code>scale_factor_at_central_meridian</code></td></tr>
 268  
      *       <tr><td></td><td class="onright"><code>GeoTIFF</code>:</td><td class="onleft"><code>ScaleAtNatOrigin</code></td></tr>
 269  
      *       <tr><td></td><td class="onright"><code>PROJ4</code>:</td><td class="onleft"><code>k</code></td></tr>
 270  
      *     </table>
 271  
      *   </td><td>
 272  
      *     <table class="compact">
 273  
      *       <tr><td><b>Type:</b></td><td>{@code Double}</td></tr>
 274  
      *       <tr><td><b>Obligation:</b></td><td>mandatory</td></tr>
 275  
      *       <tr><td><b>Value range:</b></td><td>[0…∞)</td></tr>
 276  
      *       <tr><td><b>Default value:</b></td><td>1</td></tr>
 277  
      *     </table>
 278  
      *   </td></tr>
 279  
      *   <tr><td>
 280  
      *     <table class="compact">
 281  
      *       <tr><td><b>Name:</b></td><td class="onright"><code>OGC</code>:</td><td class="onleft"><code>false_easting</code></td></tr>
 282  
      *       <tr><td><b>Alias:</b></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>False easting</code></td></tr>
 283  
      *       <tr><td></td><td class="onright"><code>ESRI</code>:</td><td class="onleft"><code>False_Easting</code></td></tr>
 284  
      *       <tr><td></td><td class="onright"><code>NetCDF</code>:</td><td class="onleft"><code>false_easting</code></td></tr>
 285  
      *       <tr><td></td><td class="onright"><code>GeoTIFF</code>:</td><td class="onleft"><code>FalseEasting</code></td></tr>
 286  
      *       <tr><td></td><td class="onright"><code>PROJ4</code>:</td><td class="onleft"><code>x_0</code></td></tr>
 287  
      *     </table>
 288  
      *   </td><td>
 289  
      *     <table class="compact">
 290  
      *       <tr><td><b>Type:</b></td><td>{@code Double}</td></tr>
 291  
      *       <tr><td><b>Obligation:</b></td><td>mandatory</td></tr>
 292  
      *       <tr><td><b>Value range:</b></td><td>(-∞ … ∞) metres</td></tr>
 293  
      *       <tr><td><b>Default value:</b></td><td>0 metres</td></tr>
 294  
      *     </table>
 295  
      *   </td></tr>
 296  
      *   <tr><td>
 297  
      *     <table class="compact">
 298  
      *       <tr><td><b>Name:</b></td><td class="onright"><code>OGC</code>:</td><td class="onleft"><code>false_northing</code></td></tr>
 299  
      *       <tr><td><b>Alias:</b></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>False northing</code></td></tr>
 300  
      *       <tr><td></td><td class="onright"><code>ESRI</code>:</td><td class="onleft"><code>False_Northing</code></td></tr>
 301  
      *       <tr><td></td><td class="onright"><code>NetCDF</code>:</td><td class="onleft"><code>false_northing</code></td></tr>
 302  
      *       <tr><td></td><td class="onright"><code>GeoTIFF</code>:</td><td class="onleft"><code>FalseNorthing</code></td></tr>
 303  
      *       <tr><td></td><td class="onright"><code>PROJ4</code>:</td><td class="onleft"><code>y_0</code></td></tr>
 304  
      *     </table>
 305  
      *   </td><td>
 306  
      *     <table class="compact">
 307  
      *       <tr><td><b>Type:</b></td><td>{@code Double}</td></tr>
 308  
      *       <tr><td><b>Obligation:</b></td><td>mandatory</td></tr>
 309  
      *       <tr><td><b>Value range:</b></td><td>(-∞ … ∞) metres</td></tr>
 310  
      *       <tr><td><b>Default value:</b></td><td>0 metres</td></tr>
 311  
      *     </table>
 312  
      *   </td></tr>
 313  
      * </table>
 314  
      */
 315  1
     public static final ParameterDescriptorGroup PARAMETERS = UniversalParameters.createDescriptorGroup(
 316  
         new ReferenceIdentifier[] {
 317  
             new NamedIdentifier(Citations.OGC,      "Transverse_Mercator"),
 318  
             new NamedIdentifier(Citations.EPSG,     "Transverse Mercator"),
 319  
             new NamedIdentifier(Citations.EPSG,     "Gauss-Kruger"),
 320  
             new NamedIdentifier(Citations.EPSG,     "Gauss-Boaga"),
 321  
             new NamedIdentifier(Citations.EPSG,     "TM"),
 322  
             new IdentifierCode (Citations.EPSG,      9807),
 323  
             new NamedIdentifier(Citations.ESRI,     "Transverse_Mercator"),
 324  
             new NamedIdentifier(Citations.ESRI,     "Gauss_Kruger"),
 325  
             new NamedIdentifier(Citations.NETCDF,   "TransverseMercator"),
 326  
             new NamedIdentifier(Citations.GEOTIFF,  "CT_TransverseMercator"),
 327  
             new IdentifierCode (Citations.GEOTIFF,   1),
 328  
             new NamedIdentifier(Citations.PROJ4,    "tmerc"),
 329  
             new NamedIdentifier(Citations.GEOTOOLKIT, Vocabulary.formatInternational(
 330  
                                 Vocabulary.Keys.TRANSVERSE_MERCATOR_PROJECTION)),
 331  
         }, null, new ParameterDescriptor<?>[] {
 332  
             SEMI_MAJOR, SEMI_MINOR, ROLL_LONGITUDE,
 333  
             CENTRAL_MERIDIAN, LATITUDE_OF_ORIGIN,
 334  
             SCALE_FACTOR, FALSE_EASTING, FALSE_NORTHING
 335  
         }, MapProjectionDescriptor.ADD_EARTH_RADIUS);
 336  
 
 337  
     /**
 338  
      * Constructs a new provider.
 339  
      */
 340  
     public TransverseMercator() {
 341  2
         super(PARAMETERS);
 342  2
     }
 343  
 
 344  
     /**
 345  
      * Constructs a new provider with the specified parameters.
 346  
      */
 347  
     TransverseMercator(final ParameterDescriptorGroup descriptor) {
 348  2
         super(descriptor);
 349  2
     }
 350  
 
 351  
     /**
 352  
      * Returns the operation type for this map projection.
 353  
      */
 354  
     @Override
 355  
     public Class<CylindricalProjection> getOperationType() {
 356  2250
         return CylindricalProjection.class;
 357  
     }
 358  
 
 359  
     /**
 360  
      * {@inheritDoc}
 361  
      */
 362  
     @Override
 363  
     protected MathTransform2D createMathTransform(ParameterValueGroup values) {
 364  2234
         return org.geotoolkit.referencing.operation.projection.TransverseMercator.create(getParameters(), values);
 365  
     }
 366  
 
 367  
 
 368  
 
 369  
 
 370  
     /**
 371  
      * The provider for <cite>Mercator Transverse (South Orientated)</cite> projection
 372  
      * (EPSG:9808). The coordinate axes are called <cite>Westings</cite> and <cite>Southings</cite>
 373  
      * and increment to the West and South from the origin respectively.
 374  
      * <p>
 375  
      * The terms <cite>false easting</cite> (FE) and <cite>false northing</cite> (FN) increase
 376  
      * the Westing and Southing value at the natural origin. In other words they are effectively
 377  
      * <cite>false westing</cite> (FW) and <cite>false southing</cite> (FS) respectively.
 378  
      *
 379  
      * <!-- PARAMETERS SouthOrientated -->
 380  
      * <p>The following table summarizes the parameters recognized by this provider.
 381  
      * For a more detailed parameter list, see the {@link #PARAMETERS} constant.</p>
 382  
      * <blockquote><p><b>Operation name:</b> {@code Transverse Mercator (South Orientated)}
 383  
      * <br><b>Area of use:</b> <font size="-1">(union of CRS domains of validity in EPSG database)</font></p>
 384  
      * <blockquote><table class="compact">
 385  
      *   <tr><td><b>in latitudes:</b></td><td class="onright">34°51.0′S</td><td>to</td><td class="onright">16°59.4′S</td></tr>
 386  
      *   <tr><td><b>in longitudes:</b></td><td class="onright">11°36.0′E</td><td>to</td><td class="onright">32°54.0′E</td></tr>
 387  
      * </table></blockquote>
 388  
      * <table class="geotk">
 389  
      *   <tr><th>Parameter name</th><th>Default value</th></tr>
 390  
      *   <tr><td>{@code semi_major}</td><td></td></tr>
 391  
      *   <tr><td>{@code semi_minor}</td><td></td></tr>
 392  
      *   <tr><td>{@code roll_longitude}</td><td>false</td></tr>
 393  
      *   <tr><td>{@code central_meridian}</td><td>0°</td></tr>
 394  
      *   <tr><td>{@code latitude_of_origin}</td><td>0°</td></tr>
 395  
      *   <tr><td>{@code scale_factor}</td><td>1</td></tr>
 396  
      *   <tr><td>{@code false_easting}</td><td>0 metres</td></tr>
 397  
      *   <tr><td>{@code false_northing}</td><td>0 metres</td></tr>
 398  
      * </table></blockquote>
 399  
      * <!-- END OF PARAMETERS -->
 400  
      *
 401  
      * @author Martin Desruisseaux (MPO, IRD, Geomatys)
 402  
      * @version 3.20
 403  
      *
 404  
      * @see org.geotoolkit.referencing.operation.projection.TransverseMercator
 405  
      * @see <a href="{@docRoot}/../modules/referencing/operation-parameters.html">Geotk coordinate operations matrix</a>
 406  
      *
 407  
      * @since 2.2
 408  
      * @module
 409  
      */
 410  5
     @Immutable
 411  
     public static class SouthOrientated extends TransverseMercator {
 412  
         /**
 413  
          * For cross-version compatibility.
 414  
          */
 415  
         private static final long serialVersionUID = -5938929136350638347L;
 416  
 
 417  
         /**
 418  
          * The group of all parameters expected by this coordinate operation.
 419  
          * The following table lists the operation names and the parameters recognized by Geotk.
 420  
          * Note that the terms <cite>false easting</cite> (FE) and <cite>false northing</cite> (FN)
 421  
          * increase the Westing and Southing value at the natural origin. In other words they are
 422  
          * effectively <cite>false westing</cite> (FW) and <cite>false southing</cite> (FS) respectively.
 423  
          * <p>
 424  
          * <!-- GENERATED PARAMETERS - inserted by ProjectionParametersJavadoc -->
 425  
          * <table class="geotk" border="1">
 426  
          *   <tr><th colspan="2">
 427  
          *     <table class="compact">
 428  
          *       <tr><td><b>Name:</b></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>Transverse Mercator (South Orientated)</code></td></tr>
 429  
          *       <tr><td><b>Alias:</b></td><td class="onright"><code>Geotk</code>:</td><td class="onleft"><code>Transverse Mercator projection</code></td></tr>
 430  
          *       <tr><td><b>Identifier:</b></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>9808</code></td></tr>
 431  
          *     </table>
 432  
          *   </th></tr>
 433  
          *   <tr><td>
 434  
          *     <table class="compact">
 435  
          *       <tr><td><b>Name:</b></td><td class="onright"><code>OGC</code>:</td><td class="onleft"><code>semi_major</code></td></tr>
 436  
          *       <tr><td><b>Alias:</b></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>Semi-major axis</code></td></tr>
 437  
          *     </table>
 438  
          *   </td><td>
 439  
          *     <table class="compact">
 440  
          *       <tr><td><b>Type:</b></td><td>{@code Double}</td></tr>
 441  
          *       <tr><td><b>Obligation:</b></td><td>mandatory</td></tr>
 442  
          *       <tr><td><b>Value range:</b></td><td>[0…∞) metres</td></tr>
 443  
          *     </table>
 444  
          *   </td></tr>
 445  
          *   <tr><td>
 446  
          *     <table class="compact">
 447  
          *       <tr><td><b>Name:</b></td><td class="onright"><code>OGC</code>:</td><td class="onleft"><code>semi_minor</code></td></tr>
 448  
          *       <tr><td><b>Alias:</b></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>Semi-minor axis</code></td></tr>
 449  
          *     </table>
 450  
          *   </td><td>
 451  
          *     <table class="compact">
 452  
          *       <tr><td><b>Type:</b></td><td>{@code Double}</td></tr>
 453  
          *       <tr><td><b>Obligation:</b></td><td>mandatory</td></tr>
 454  
          *       <tr><td><b>Value range:</b></td><td>[0…∞) metres</td></tr>
 455  
          *     </table>
 456  
          *   </td></tr>
 457  
          *   <tr><td>
 458  
          *     <table class="compact">
 459  
          *       <tr><td><b>Name:</b></td><td class="onright"><code>Geotk</code>:</td><td class="onleft"><code>roll_longitude</code></td></tr>
 460  
          *     </table>
 461  
          *   </td><td>
 462  
          *     <table class="compact">
 463  
          *       <tr><td><b>Type:</b></td><td>{@code Boolean}</td></tr>
 464  
          *       <tr><td><b>Obligation:</b></td><td>optional</td></tr>
 465  
          *       <tr><td><b>Default value:</b></td><td>false</td></tr>
 466  
          *     </table>
 467  
          *   </td></tr>
 468  
          *   <tr><td>
 469  
          *     <table class="compact">
 470  
          *       <tr><td><b>Name:</b></td><td class="onright"><code>OGC</code>:</td><td class="onleft"><code>central_meridian</code></td></tr>
 471  
          *       <tr><td><b>Alias:</b></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>Longitude of natural origin</code></td></tr>
 472  
          *     </table>
 473  
          *   </td><td>
 474  
          *     <table class="compact">
 475  
          *       <tr><td><b>Type:</b></td><td>{@code Double}</td></tr>
 476  
          *       <tr><td><b>Obligation:</b></td><td>mandatory</td></tr>
 477  
          *       <tr><td><b>Value range:</b></td><td>[-180 … 180]°</td></tr>
 478  
          *       <tr><td><b>Default value:</b></td><td>0°</td></tr>
 479  
          *     </table>
 480  
          *   </td></tr>
 481  
          *   <tr><td>
 482  
          *     <table class="compact">
 483  
          *       <tr><td><b>Name:</b></td><td class="onright"><code>OGC</code>:</td><td class="onleft"><code>latitude_of_origin</code></td></tr>
 484  
          *       <tr><td><b>Alias:</b></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>Latitude of natural origin</code></td></tr>
 485  
          *     </table>
 486  
          *   </td><td>
 487  
          *     <table class="compact">
 488  
          *       <tr><td><b>Type:</b></td><td>{@code Double}</td></tr>
 489  
          *       <tr><td><b>Obligation:</b></td><td>mandatory</td></tr>
 490  
          *       <tr><td><b>Value range:</b></td><td>[-90 … 90]°</td></tr>
 491  
          *       <tr><td><b>Default value:</b></td><td>0°</td></tr>
 492  
          *     </table>
 493  
          *   </td></tr>
 494  
          *   <tr><td>
 495  
          *     <table class="compact">
 496  
          *       <tr><td><b>Name:</b></td><td class="onright"><code>OGC</code>:</td><td class="onleft"><code>scale_factor</code></td></tr>
 497  
          *       <tr><td><b>Alias:</b></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>Scale factor at natural origin</code></td></tr>
 498  
          *     </table>
 499  
          *   </td><td>
 500  
          *     <table class="compact">
 501  
          *       <tr><td><b>Type:</b></td><td>{@code Double}</td></tr>
 502  
          *       <tr><td><b>Obligation:</b></td><td>mandatory</td></tr>
 503  
          *       <tr><td><b>Value range:</b></td><td>[0…∞)</td></tr>
 504  
          *       <tr><td><b>Default value:</b></td><td>1</td></tr>
 505  
          *     </table>
 506  
          *   </td></tr>
 507  
          *   <tr><td>
 508  
          *     <table class="compact">
 509  
          *       <tr><td><b>Name:</b></td><td class="onright"><code>OGC</code>:</td><td class="onleft"><code>false_easting</code></td></tr>
 510  
          *       <tr><td><b>Alias:</b></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>False easting</code></td></tr>
 511  
          *     </table>
 512  
          *   </td><td>
 513  
          *     <table class="compact">
 514  
          *       <tr><td><b>Type:</b></td><td>{@code Double}</td></tr>
 515  
          *       <tr><td><b>Obligation:</b></td><td>mandatory</td></tr>
 516  
          *       <tr><td><b>Value range:</b></td><td>(-∞ … ∞) metres</td></tr>
 517  
          *       <tr><td><b>Default value:</b></td><td>0 metres</td></tr>
 518  
          *     </table>
 519  
          *   </td></tr>
 520  
          *   <tr><td>
 521  
          *     <table class="compact">
 522  
          *       <tr><td><b>Name:</b></td><td class="onright"><code>OGC</code>:</td><td class="onleft"><code>false_northing</code></td></tr>
 523  
          *       <tr><td><b>Alias:</b></td><td class="onright"><code>EPSG</code>:</td><td class="onleft"><code>False northing</code></td></tr>
 524  
          *     </table>
 525  
          *   </td><td>
 526  
          *     <table class="compact">
 527  
          *       <tr><td><b>Type:</b></td><td>{@code Double}</td></tr>
 528  
          *       <tr><td><b>Obligation:</b></td><td>mandatory</td></tr>
 529  
          *       <tr><td><b>Value range:</b></td><td>(-∞ … ∞) metres</td></tr>
 530  
          *       <tr><td><b>Default value:</b></td><td>0 metres</td></tr>
 531  
          *     </table>
 532  
          *   </td></tr>
 533  
          * </table>
 534  
          */
 535  
         @SuppressWarnings("hiding")
 536  
         public static final ParameterDescriptorGroup PARAMETERS;
 537  
         static {
 538  1
             final Citation[] excludes = {
 539  
                 Citations.ESRI, Citations.NETCDF, Citations.GEOTIFF, Citations.PROJ4
 540  
             };
 541  1
             PARAMETERS = UniversalParameters.createDescriptorGroup(
 542  
                 new ReferenceIdentifier[] {
 543  
                     new NamedIdentifier(Citations.EPSG, "Transverse Mercator (South Orientated)"),
 544  
                     new IdentifierCode (Citations.EPSG,  9808),
 545  
                     sameNameAs(Citations.GEOTOOLKIT, TransverseMercator.PARAMETERS)
 546  
             }, excludes, new ParameterDescriptor<?>[] {
 547  
                 sameParameterAs(PseudoMercator.PARAMETERS, "semi_major"),
 548  
                 sameParameterAs(PseudoMercator.PARAMETERS, "semi_minor"),
 549  
                 ROLL_LONGITUDE,
 550  
                 sameParameterAs(PseudoMercator.PARAMETERS, "central_meridian"),
 551  
                 sameParameterAs(PseudoMercator.PARAMETERS, "latitude_of_origin"),
 552  
                 SCALE_FACTOR,
 553  
                 sameParameterAs(PseudoMercator.PARAMETERS, "false_easting"),
 554  
                 sameParameterAs(PseudoMercator.PARAMETERS, "false_northing")
 555  
             }, MapProjectionDescriptor.ADD_EARTH_RADIUS);
 556  1
         }
 557  
 
 558  
         /**
 559  
          * Constructs a new provider.
 560  
          */
 561  
         public SouthOrientated() {
 562  2
             super(PARAMETERS);
 563  2
         }
 564  
     }
 565  
 }