001/* 002 * GeoAPI - Java interfaces for OGC/ISO standards 003 * http://www.geoapi.org 004 * 005 * Copyright (C) 2011-2019 Open Geospatial Consortium, Inc. 006 * All Rights Reserved. http://www.opengeospatial.org/ogc/legal 007 * 008 * Permission to use, copy, and modify this software and its documentation, with 009 * or without modification, for any purpose and without fee or royalty is hereby 010 * granted, provided that you include the following on ALL copies of the software 011 * and documentation or portions thereof, including modifications, that you make: 012 * 013 * 1. The full text of this NOTICE in a location viewable to users of the 014 * redistributed or derivative work. 015 * 2. Notice of any changes or modifications to the OGC files, including the 016 * date changes were made. 017 * 018 * THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE 019 * NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 020 * TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT 021 * THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY 022 * PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. 023 * 024 * COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR 025 * CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION. 026 * 027 * The name and trademarks of copyright holders may NOT be used in advertising or 028 * publicity pertaining to the software without specific, written prior permission. 029 * Title to copyright in this software and any associated documentation will at all 030 * times remain with copyright holders. 031 */ 032package org.opengis.test.referencing.gigs; 033 034import java.util.List; 035 036import org.opengis.util.Factory; 037import org.opengis.util.FactoryException; 038import org.opengis.util.NoSuchIdentifierException; 039import org.opengis.referencing.operation.Conversion; 040import org.opengis.referencing.operation.CoordinateOperation; 041import org.opengis.referencing.operation.CoordinateOperationAuthorityFactory; 042import org.opengis.test.Configuration; 043import org.opengis.test.FactoryFilter; 044 045import org.junit.Test; 046import org.junit.runner.RunWith; 047import org.junit.runners.Parameterized; 048 049import static org.junit.Assume.*; 050import static org.opengis.test.Assert.*; 051 052 053/** 054 * Verifies reference map projections bundled with the geoscience software. 055 * 056 * <table class="gigs" summary="Test description"><tr> 057 * <th>Test method:</th> 058 * <td>Compare map projection definitions included in the software against the EPSG Dataset.</td> 059 * </tr><tr> 060 * <th>Test data:</th> 061 * <td><a href="doc-files/GIGS_2005_libProjection.csv">{@code GIGS_2005_libProjection.csv}</a> 062 * and EPSG Dataset.</td> 063 * </tr><tr> 064 * <th>Tested API:</th> 065 * <td>{@link CoordinateOperationAuthorityFactory#createCoordinateOperation(String)}.</td> 066 * </tr><tr> 067 * <th>Expected result:</th> 068 * <td>Map projection definitions bundled with the software should have the same name, method name, 069 * defining parameters and parameter values as in the EPSG Dataset. The values of the parameters 070 * should be correct to at least 10 significant figures. Map projections missing from the software 071 * or at variance with those in the EPSG Dataset should be reported.</td> 072 * </tr></table> 073 * 074 * 075 * <div class="note"><b>Usage example:</b> 076 * in order to specify their factories and run the tests in a JUnit framework, implementors can 077 * define a subclass in their own test suite as in the example below: 078 * 079 * <blockquote><pre>import org.junit.runner.RunWith; 080 *import org.junit.runners.JUnit4; 081 *import org.opengis.test.referencing.gigs.GIGS2005; 082 * 083 *@RunWith(JUnit4.class) 084 *public class MyTest extends GIGS2005 { 085 * public MyTest() { 086 * super(new MyCoordinateOperationAuthorityFactory()); 087 * } 088 *}</pre></blockquote> 089 * </div> 090 * 091 * @author GIGS (IOGP) 092 * @author Martin Desruisseaux (Geomatys) 093 * @author Alexis Manin (Geomatys) 094 * @version 3.1 095 * @since 3.1 096 */ 097@RunWith(Parameterized.class) 098public strictfp class GIGS2005 extends AuthorityFactoryTestCase<Conversion> { 099 /** 100 * The name of the expected operation method. 101 */ 102 public String methodName; 103 104 /** 105 * The coordinate conversion created by the factory, 106 * or {@code null} if not yet created or if the conversion creation failed. 107 * 108 * @see #copAuthorityFactory 109 */ 110 private Conversion conversion; 111 112 /** 113 * Factory to use for building {@link Conversion} instances, or {@code null} if none. 114 * This is the factory used by the {@link #getIdentifiedObject()} method. 115 */ 116 protected final CoordinateOperationAuthorityFactory copAuthorityFactory; 117 118 /** 119 * Returns a default set of factories to use for running the tests. Those factories are given 120 * in arguments to the constructor when this test class is instantiated directly by JUnit (for 121 * example as a {@linkplain org.junit.runners.Suite.SuiteClasses suite} element), instead than 122 * subclassed by the implementor. The factories are fetched as documented in the 123 * {@link #factories(Class[])} javadoc. 124 * 125 * @return the default set of arguments to be given to the {@code GIGS2005} constructor. 126 */ 127 @Parameterized.Parameters 128 @SuppressWarnings("unchecked") 129 public static List<Factory[]> factories() { 130 return factories(FactoryFilter.ByAuthority.EPSG, CoordinateOperationAuthorityFactory.class); 131 } 132 133 /** 134 * Creates a new test using the given factory. If a given factory is {@code null}, 135 * then the tests which depend on it will be skipped. 136 * 137 * @param copFactory factory for creating {@link CoordinateOperation} instances. 138 */ 139 public GIGS2005(final CoordinateOperationAuthorityFactory copFactory) { 140 super(copFactory); 141 copAuthorityFactory = copFactory; 142 } 143 144 /** 145 * Returns information about the configuration of the test which has been run. 146 * This method returns a map containing: 147 * 148 * <ul> 149 * <li>All the following values associated to the {@link org.opengis.test.Configuration.Key} of the same name: 150 * <ul> 151 * <li>{@link #isStandardNameSupported}</li> 152 * <li>{@link #isStandardAliasSupported}</li> 153 * <li>{@link #isDependencyIdentificationSupported}</li> 154 * <li>{@link #copAuthorityFactory}</li> 155 * </ul> 156 * </li> 157 * </ul> 158 * 159 * @return the configuration of the test being run. 160 */ 161 @Override 162 public Configuration configuration() { 163 final Configuration op = super.configuration(); 164 assertNull(op.put(Configuration.Key.copAuthorityFactory, copAuthorityFactory)); 165 return op; 166 } 167 168 /** 169 * Returns the coordinate operation instance to be tested. When this method is invoked for the first time, it creates 170 * the operation to test by invoking the {@link CoordinateOperationAuthorityFactory#createCoordinateOperation(String)} 171 * method with the current {@link #code} value in argument. The created object is then cached and returned in all 172 * subsequent invocations of this method. 173 * 174 * @return the coordinate operation instance to test. 175 * @throws FactoryException if an error occurred while creating the coordinate operation instance. 176 */ 177 @Override 178 public Conversion getIdentifiedObject() throws FactoryException { 179 if (conversion == null) { 180 assumeNotNull(copAuthorityFactory); 181 final String codeAsString = String.valueOf(code); 182 final CoordinateOperation operation; 183 try { 184 operation = copAuthorityFactory.createCoordinateOperation(codeAsString); 185 } catch (NoSuchIdentifierException e) { 186 /* 187 * Relaxed the exception type from NoSuchAuthorityCodeException because CoordinateOperation creation 188 * will typically use MathTransformFactory under the hood, which throws NoSuchIdentifierException for 189 * non-implemented operation methods (may be identified by their name rather than EPSG code). 190 */ 191 unsupportedCode(Conversion.class, code); 192 throw e; 193 } 194 if (operation != null) { // For consistency with the behavior in other classes. 195 assertInstanceOf(codeAsString, Conversion.class, operation); 196 conversion = (Conversion) operation; 197 } 198 } 199 return conversion; 200 } 201 202 /** 203 * Verifies the properties of the conversion given by {@link #getIdentifiedObject()}. 204 */ 205 private void createAndVerifyProjection(final int code) throws FactoryException { 206 this.code = code; 207 conversion = null; // For forcing the fetch of a new operation. 208 209 final Conversion conversion = getIdentifiedObject(); 210 assertNotNull("Conversion", conversion); 211 validators.validate(conversion); 212 213 // Map projection identifier. 214 assertContainsCode("Conversion.getIdentifiers()", "EPSG", code, conversion.getIdentifiers()); 215 216 // Map projection name. 217 if (isStandardNameSupported) { 218 configurationTip = Configuration.Key.isStandardNameSupported; 219 assertEquals("Conversion.getMethod().getName()", methodName, getVerifiableName(conversion.getMethod())); 220 configurationTip = null; 221 } 222 } 223 224 /** 225 * Tests “UTM” coordinate operation creation from the factory. 226 * 227 * <ul> 228 * <li>EPSG coordinate operation codes: <b>16001</b>, <b>16002</b>, <b>16003</b>, <b>16004</b>, <b>16005</b>, 229 * <b>16006</b>, <b>16007</b>, <b>16008</b>, <b>16009</b>, <b>16010</b>, <i>…110 more</i></li> 230 * <li>EPSG coordinate operation name: <b>UTM</b></li> 231 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 232 * <li>Specific usage / Remarks: <b>All 120 zones</b></li> 233 * <li>Particularly important to E&P industry.</li> 234 * </ul> 235 * 236 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 237 */ 238 @Test 239 public void testUTM() throws FactoryException { 240 important = true; 241 name = "UTM"; 242 methodName = "Transverse Mercator"; 243 for (int code = 16001; code <= 16060; code++) { // Loop over 60 codes 244 createAndVerifyProjection(code); 245 } 246 for (int code = 16101; code <= 16160; code++) { // Loop over 60 codes 247 createAndVerifyProjection(code); 248 } 249 } 250 251 /** 252 * Tests “6-degree Gauss-Kruger + zone prefix” coordinate operation creation from the factory. 253 * 254 * <ul> 255 * <li>EPSG coordinate operation codes: <b>16201</b>, <b>16202</b>, <b>16203</b>, <b>16204</b>, <b>16205</b>, 256 * <b>16206</b>, <b>16207</b>, <b>16208</b>, <b>16209</b>, <b>16210</b>, <i>…50 more</i></li> 257 * <li>EPSG coordinate operation name: <b>6-degree Gauss-Kruger</b></li> 258 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 259 * <li>Specific usage / Remarks: <b>With zone prefix in easting.</b></li> 260 * <li>Particularly important to E&P industry.</li> 261 * </ul> 262 * 263 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 264 */ 265 @Test 266 public void test6DegreeGaussKrugerWithZonePrefix() throws FactoryException { 267 important = true; 268 name = "6-degree Gauss-Kruger"; 269 methodName = "Transverse Mercator"; 270 for (int code = 16201; code <= 16260; code++) { // Loop over 60 codes 271 createAndVerifyProjection(code); 272 } 273 } 274 275 /** 276 * Tests “6-degree Gauss-Kruger” coordinate operation creation from the factory. 277 * 278 * <ul> 279 * <li>EPSG coordinate operation codes: <b>16301</b>, <b>16302</b>, <b>16303</b>, <b>16304</b>, <b>16305</b>, 280 * <b>16306</b>, <b>16307</b>, <b>16308</b>, <b>16309</b>, <b>16310</b>, <i>…50 more</i></li> 281 * <li>EPSG coordinate operation name: <b>6-degree Gauss-Kruger</b></li> 282 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 283 * <li>Specific usage / Remarks: <b>Without zone prefix in easting.</b></li> 284 * <li>Particularly important to E&P industry.</li> 285 * </ul> 286 * 287 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 288 */ 289 @Test 290 public void test6DegreeGaussKruger() throws FactoryException { 291 important = true; 292 name = "6-degree Gauss-Kruger"; 293 methodName = "Transverse Mercator"; 294 for (int code = 16301; code <= 16360; code++) { // Loop over 60 codes 295 createAndVerifyProjection(code); 296 } 297 } 298 299 /** 300 * Tests “3-degree Gauss-Kruger + zone prefix” coordinate operation creation from the factory. 301 * 302 * <ul> 303 * <li>EPSG coordinate operation codes: <b>16261</b>, <b>16262</b>, <b>16263</b>, <b>16264</b>, <b>16265</b>, 304 * <b>16266</b>, <b>16267</b>, <b>16268</b>, <b>16269</b>, <b>16270</b>, <i>…54 more</i></li> 305 * <li>EPSG coordinate operation name: <b>3-degree Gauss-Kruger</b></li> 306 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 307 * <li>Specific usage / Remarks: <b>With zone prefix in easting.</b></li> 308 * <li>Particularly important to E&P industry.</li> 309 * </ul> 310 * 311 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 312 */ 313 @Test 314 public void test3DegreeGaussKrugerWithZonePrefix() throws FactoryException { 315 important = true; 316 name = "3-degree Gauss-Kruger"; 317 methodName = "Transverse Mercator"; 318 for (int code = 16261; code <= 16299; code++) { // Loop over 39 codes 319 createAndVerifyProjection(code); 320 } 321 for (int code = 16070; code <= 16089; code++) { // Loop over 20 codes 322 createAndVerifyProjection(code); 323 } 324 createAndVerifyProjection(16099); 325 for (int code = 16091; code <= 16094; code++) { // Loop over 4 codes 326 createAndVerifyProjection(code); 327 } 328 } 329 330 /** 331 * Tests “3-degree Gauss-Kruger” coordinate operation creation from the factory. 332 * 333 * <ul> 334 * <li>EPSG coordinate operation codes: <b>16362</b>, <b>16364</b>, <b>16366</b>, <b>16368</b>, <b>16370</b>, 335 * <b>16372</b>, <b>16374</b>, <b>16376</b>, <b>16378</b>, <b>16380</b>, <i>…22 more</i></li> 336 * <li>EPSG coordinate operation name: <b>3-degree Gauss-Kruger</b></li> 337 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 338 * <li>Specific usage / Remarks: <b>Without zone prefix in easting.</b></li> 339 * <li>Particularly important to E&P industry.</li> 340 * </ul> 341 * 342 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 343 */ 344 @Test 345 public void test3DegreeGaussKruger() throws FactoryException { 346 important = true; 347 name = "3-degree Gauss-Kruger"; 348 methodName = "Transverse Mercator"; 349 for (int code = 16362; code <= 16398; code += 2) { // Loop over 19 codes 350 createAndVerifyProjection(code); 351 } 352 for (int code = 16170; code <= 16194; code += 2) { // Loop over 13 codes 353 createAndVerifyProjection(code); 354 } 355 } 356 357 /** 358 * Tests “Aramco Lambert” coordinate operation creation from the factory. 359 * 360 * <ul> 361 * <li>EPSG coordinate operation codes: <b>19977</b></li> 362 * <li>EPSG coordinate operation name: <b>Aramco Lambert</b></li> 363 * <li>Coordinate operation method: <b>Lambert Conic Conformal (2SP)</b></li> 364 * <li>Particularly important to E&P industry.</li> 365 * </ul> 366 * 367 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 368 */ 369 @Test 370 public void testAramcoLambert() throws FactoryException { 371 important = true; 372 name = "Aramco Lambert"; 373 methodName = "Lambert Conic Conformal (2SP)"; 374 createAndVerifyProjection(19977); 375 } 376 377 /** 378 * Tests “Argentina zones” coordinate operation creation from the factory. 379 * 380 * <ul> 381 * <li>EPSG coordinate operation codes: <b>18031</b>, <b>18032</b>, <b>18033</b>, <b>18034</b>, <b>18035</b>, <b>18036</b>, <b>18037</b></li> 382 * <li>EPSG coordinate operation name: <b>Argentina zones</b></li> 383 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 384 * <li>Particularly important to E&P industry.</li> 385 * </ul> 386 * 387 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 388 */ 389 @Test 390 public void testArgentinaZones() throws FactoryException { 391 important = true; 392 name = "Argentina zones"; 393 methodName = "Transverse Mercator"; 394 for (int code = 18031; code <= 18037; code++) { // Loop over 7 codes 395 createAndVerifyProjection(code); 396 } 397 } 398 399 /** 400 * Tests “Australian Map Grid zones” coordinate operation creation from the factory. 401 * 402 * <ul> 403 * <li>EPSG coordinate operation codes: <b>17448</b> (see note), <b>17449</b>, <b>17450</b>, <b>17451</b>, <b>17452</b>, 404 * <b>17453</b>, <b>17454</b>, <b>17455</b>, <b>17456</b>, <b>17457</b>, <b>17458</b></li> 405 * <li>EPSG coordinate operation name: <b>Australian Map Grid zones</b></li> 406 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 407 * <li>Particularly important to E&P industry.</li> 408 * </ul> 409 * 410 * <b>Note:</b> EPSG:17448 is tested only if {@link #isDeprecatedObjectCreationSupported} is {@code true}. 411 * Raison is: Falls outside EEZ area. 412 * 413 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 414 */ 415 @Test 416 public void testAustralianMapGridZones() throws FactoryException { 417 important = true; 418 name = "Australian Map Grid zones"; 419 methodName = "Transverse Mercator"; 420 for (int code = 17449; code <= 17458; code++) { // Loop over 10 codes 421 createAndVerifyProjection(code); 422 } 423 if (isDeprecatedObjectCreationSupported) { 424 createAndVerifyProjection(17448); 425 } 426 } 427 428 /** 429 * Tests “BLM zones” coordinate operation creation from the factory. 430 * 431 * <ul> 432 * <li>EPSG coordinate operation codes: <b>15914</b>, <b>15915</b>, <b>15916</b>, <b>15917</b></li> 433 * <li>EPSG coordinate operation name: <b>BLM zones</b></li> 434 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 435 * <li>Specific usage / Remarks: <b>UTM in ftUS</b></li> 436 * <li>Particularly important to E&P industry.</li> 437 * </ul> 438 * 439 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 440 */ 441 @Test 442 public void testBLMZones() throws FactoryException { 443 important = true; 444 name = "BLM zones"; 445 methodName = "Transverse Mercator"; 446 for (int code = 15914; code <= 15917; code++) { // Loop over 4 codes 447 createAndVerifyProjection(code); 448 } 449 } 450 451 /** 452 * Tests “British National Grid” coordinate operation creation from the factory. 453 * 454 * <ul> 455 * <li>EPSG coordinate operation codes: <b>19916</b></li> 456 * <li>EPSG coordinate operation name: <b>British National Grid</b></li> 457 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 458 * <li>Particularly important to E&P industry.</li> 459 * </ul> 460 * 461 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 462 */ 463 @Test 464 public void testBritishNationalGrid() throws FactoryException { 465 important = true; 466 name = "British National Grid"; 467 methodName = "Transverse Mercator"; 468 createAndVerifyProjection(19916); 469 } 470 471 /** 472 * Tests “Brazil Polyconic” coordinate operation creation from the factory. 473 * 474 * <ul> 475 * <li>EPSG coordinate operation codes: <b>19941</b></li> 476 * <li>EPSG coordinate operation name: <b>Brazil Polyconic</b></li> 477 * <li>Coordinate operation method: <b>American Polyconic</b></li> 478 * <li>Particularly important to E&P industry.</li> 479 * </ul> 480 * 481 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 482 */ 483 @Test 484 public void testBrazilPolyconic() throws FactoryException { 485 important = true; 486 name = "Brazil Polyconic"; 487 methodName = "American Polyconic"; 488 createAndVerifyProjection(19941); 489 } 490 491 /** 492 * Tests “Colombia zones” coordinate operation creation from the factory. 493 * 494 * <ul> 495 * <li>EPSG coordinate operation codes: <b>18051</b>, <b>18052</b>, <b>18053</b>, <b>18054</b>, <b>18055</b>, 496 * <b>18056</b>, <b>18057</b>, <b>18058</b>, <b>18059</b></li> 497 * <li>EPSG coordinate operation name: <b>Colombia zones</b></li> 498 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 499 * <li>Particularly important to E&P industry.</li> 500 * </ul> 501 * 502 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 503 */ 504 @Test 505 public void testColombiaZones() throws FactoryException { 506 important = true; 507 name = "Colombia zones"; 508 methodName = "Transverse Mercator"; 509 for (int code = 18051; code <= 18059; code++) { // Loop over 9 codes 510 createAndVerifyProjection(code); 511 } 512 } 513 514 /** 515 * Tests “Egypt belts” coordinate operation creation from the factory. 516 * 517 * <ul> 518 * <li>EPSG coordinate operation codes: <b>18071</b>, <b>18072</b>, <b>18073</b>, <b>18074</b></li> 519 * <li>EPSG coordinate operation name: <b>Egypt belts</b></li> 520 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 521 * <li>Particularly important to E&P industry.</li> 522 * </ul> 523 * 524 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 525 */ 526 @Test 527 public void testEgyptBelts() throws FactoryException { 528 important = true; 529 name = "Egypt belts"; 530 methodName = "Transverse Mercator"; 531 for (int code = 18071; code <= 18074; code++) { // Loop over 4 codes 532 createAndVerifyProjection(code); 533 } 534 } 535 536 /** 537 * Tests “EOV” coordinate operation creation from the factory. 538 * 539 * <ul> 540 * <li>EPSG coordinate operation codes: <b>19931</b></li> 541 * <li>EPSG coordinate operation name: <b>EOV</b></li> 542 * <li>Coordinate operation method: <b>Hotine Oblique Mercator (variant B)</b></li> 543 * <li>Particularly important to E&P industry.</li> 544 * </ul> 545 * 546 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 547 */ 548 @Test 549 public void testEOV() throws FactoryException { 550 important = true; 551 name = "EOV"; 552 methodName = "Hotine Oblique Mercator (variant B)"; 553 createAndVerifyProjection(19931); 554 } 555 556 /** 557 * Tests “France mainland zones” coordinate operation creation from the factory. 558 * 559 * <ul> 560 * <li>EPSG coordinate operation codes: <b>18081</b>, <b>18082</b>, <b>18083</b></li> 561 * <li>EPSG coordinate operation name: <b>France mainland zones</b></li> 562 * <li>Coordinate operation method: <b>Lambert Conic Conformal (1SP)</b></li> 563 * <li>Specific usage / Remarks: <b>Use grads</b></li> 564 * <li>Particularly important to E&P industry.</li> 565 * </ul> 566 * 567 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 568 */ 569 @Test 570 public void testFranceMainlandZones() throws FactoryException { 571 important = true; 572 name = "France mainland zones"; 573 methodName = "Lambert Conic Conformal (1SP)"; 574 createAndVerifyProjection(18081); 575 createAndVerifyProjection(18082); 576 createAndVerifyProjection(18083); 577 } 578 579 /** 580 * Tests “Lambert-93” coordinate operation creation from the factory. 581 * 582 * <ul> 583 * <li>EPSG coordinate operation codes: <b>18085</b></li> 584 * <li>EPSG coordinate operation name: <b>Lambert-93</b></li> 585 * <li>Coordinate operation method: <b>Lambert Conic Conformal (2SP)</b></li> 586 * <li>Specific usage / Remarks: <b>Use grads</b></li> 587 * <li>Particularly important to E&P industry.</li> 588 * </ul> 589 * 590 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 591 */ 592 @Test 593 public void testLambert93() throws FactoryException { 594 important = true; 595 name = "Lambert-93"; 596 methodName = "Lambert Conic Conformal (2SP)"; 597 createAndVerifyProjection(18085); 598 } 599 600 /** 601 * Tests “Ghana National Grid” coordinate operation creation from the factory. 602 * 603 * <ul> 604 * <li>EPSG coordinate operation codes: <b>19959</b></li> 605 * <li>EPSG coordinate operation name: <b>Ghana National Grid</b></li> 606 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 607 * <li>Particularly important to E&P industry.</li> 608 * </ul> 609 * 610 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 611 */ 612 @Test 613 public void testGhanaNationalGrid() throws FactoryException { 614 important = true; 615 name = "Ghana National Grid"; 616 methodName = "Transverse Mercator"; 617 createAndVerifyProjection(19959); 618 } 619 620 /** 621 * Tests “India zones” coordinate operation creation from the factory. 622 * 623 * <ul> 624 * <li>EPSG coordinate operation codes: <b>18231</b>, <b>18232</b>, <b>18233</b>, <b>18234</b>, <b>18235</b>, 625 * <b>18236</b>, <b>18237</b>, <b>18238</b></li> 626 * <li>EPSG coordinate operation name: <b>India zones</b></li> 627 * <li>Coordinate operation method: <b>Lambert Conic Conformal (1SP)</b></li> 628 * <li>Particularly important to E&P industry.</li> 629 * </ul> 630 * 631 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 632 */ 633 @Test 634 public void testIndiaZones() throws FactoryException { 635 important = true; 636 name = "India zones"; 637 methodName = "Lambert Conic Conformal (1SP)"; 638 for (int code = 18231; code <= 18238; code++) { // Loop over 8 codes 639 createAndVerifyProjection(code); 640 } 641 } 642 643 /** 644 * Tests “Iraq zone” coordinate operation creation from the factory. 645 * 646 * <ul> 647 * <li>EPSG coordinate operation codes: <b>19906</b></li> 648 * <li>EPSG coordinate operation name: <b>Iraq zone</b></li> 649 * <li>Coordinate operation method: <b>Lambert Conic Conformal (1SP)</b></li> 650 * <li>Particularly important to E&P industry.</li> 651 * </ul> 652 * 653 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 654 */ 655 @Test 656 public void testIraqZone() throws FactoryException { 657 important = true; 658 name = "Iraq zone"; 659 methodName = "Lambert Conic Conformal (1SP)"; 660 createAndVerifyProjection(19906); 661 } 662 663 /** 664 * Tests “Italy zones” coordinate operation creation from the factory. 665 * 666 * <ul> 667 * <li>EPSG coordinate operation codes: <b>18121</b>, <b>18122</b></li> 668 * <li>EPSG coordinate operation name: <b>Italy zones</b></li> 669 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 670 * <li>Particularly important to E&P industry.</li> 671 * </ul> 672 * 673 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 674 */ 675 @Test 676 public void testItalyZones() throws FactoryException { 677 important = true; 678 name = "Italy zones"; 679 methodName = "Transverse Mercator"; 680 createAndVerifyProjection(18121); 681 createAndVerifyProjection(18122); 682 } 683 684 /** 685 * Tests “Laborde” coordinate operation creation from the factory. 686 * 687 * <ul> 688 * <li>EPSG coordinate operation codes: <b>19911</b>, <b>19861</b></li> 689 * <li>EPSG coordinate operation name: <b>Laborde Grid approximation</b>, <b>Laborde Grid</b></li> 690 * <li>Coordinate operation method: <b>Hotine Oblique Mercator (variant B)</b>, <b>Laborde Oblique Mercator</b></li> 691 * <li>Particularly important to E&P industry.</li> 692 * </ul> 693 * 694 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 695 */ 696 @Test 697 public void testLaborde() throws FactoryException { 698 important = true; 699 name = "Laborde Grid approximation"; 700 methodName = "Hotine Oblique Mercator (variant B)"; 701 createAndVerifyProjection(19911); 702 703 name = "Laborde Grid"; 704 methodName = "Laborde Oblique Mercator"; 705 createAndVerifyProjection(19861); 706 } 707 708 /** 709 * Tests “Levant zone” coordinate operation creation from the factory. 710 * 711 * <ul> 712 * <li>EPSG coordinate operation codes: <b>19940</b></li> 713 * <li>EPSG coordinate operation name: <b>Levant zone</b></li> 714 * <li>Coordinate operation method: <b>Lambert Conic Near-Conformal</b></li> 715 * <li>Particularly important to E&P industry.</li> 716 * </ul> 717 * 718 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 719 */ 720 @Test 721 public void testLevantZone() throws FactoryException { 722 important = true; 723 name = "Levant zone"; 724 methodName = "Lambert Conic Near-Conformal"; 725 createAndVerifyProjection(19940); 726 } 727 728 /** 729 * Tests “Libya zones” coordinate operation creation from the factory. 730 * 731 * <ul> 732 * <li>EPSG coordinate operation codes: <b>18240</b>, <b>18241</b>, <b>18242</b>, <b>18243</b>, <b>18244</b>, 733 * <b>18245</b>, <b>18246</b>, <b>18247</b>, <b>18248</b>, <b>18310</b>, <i>…9 more</i></li> 734 * <li>EPSG coordinate operation name: <b>Libya zones</b></li> 735 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 736 * <li>Particularly important to E&P industry.</li> 737 * </ul> 738 * 739 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 740 */ 741 @Test 742 public void testLibyaZones() throws FactoryException { 743 important = true; 744 name = "Libya zones"; 745 methodName = "Transverse Mercator"; 746 for (int code = 18240; code <= 18248; code++) { // Loop over 9 codes 747 createAndVerifyProjection(code); 748 } 749 for (int code = 18310; code <= 18319; code++) { // Loop over 10 codes 750 createAndVerifyProjection(code); 751 } 752 } 753 754 /** 755 * Tests “SW Africa Survey Grid” coordinate operation creation from the factory. 756 * 757 * <ul> 758 * <li>EPSG coordinate operation codes: <b>17611</b></li> 759 * <li>EPSG coordinate operation name: <b>SW Africa Survey Grid</b></li> 760 * <li>Coordinate operation method: <b>Transverse Mercator (South Orientated)</b></li> 761 * <li>Particularly important to E&P industry.</li> 762 * </ul> 763 * 764 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 765 */ 766 @Test 767 public void testSWAfricaSurveyGrid() throws FactoryException { 768 important = true; 769 name = "SW Africa Survey Grid"; 770 methodName = "Transverse Mercator (South Orientated)"; 771 createAndVerifyProjection(17611); 772 } 773 774 /** 775 * Tests “NEIEZ” coordinate operation creation from the factory. 776 * 777 * <ul> 778 * <li>EPSG coordinate operation codes: <b>19905</b></li> 779 * <li>EPSG coordinate operation name: <b>NEIEZ</b></li> 780 * <li>Coordinate operation method: <b>Mercator (variant A)</b></li> 781 * <li>Particularly important to E&P industry.</li> 782 * </ul> 783 * 784 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 785 */ 786 @Test 787 public void testNEIEZ() throws FactoryException { 788 important = true; 789 name = "NEIEZ"; 790 methodName = "Mercator (variant A)"; 791 createAndVerifyProjection(19905); 792 } 793 794 /** 795 * Tests “Nigeria belts” coordinate operation creation from the factory. 796 * 797 * <ul> 798 * <li>EPSG coordinate operation codes: <b>18151</b>, <b>18152</b>, <b>18153</b></li> 799 * <li>EPSG coordinate operation name: <b>Nigeria belts</b></li> 800 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 801 * <li>Particularly important to E&P industry.</li> 802 * </ul> 803 * 804 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 805 */ 806 @Test 807 public void testNigeriaBelts() throws FactoryException { 808 important = true; 809 name = "Nigeria belts"; 810 methodName = "Transverse Mercator"; 811 createAndVerifyProjection(18151); 812 createAndVerifyProjection(18152); 813 createAndVerifyProjection(18153); 814 } 815 816 /** 817 * Tests “NZ TM zones” coordinate operation creation from the factory. 818 * 819 * <ul> 820 * <li>EPSG coordinate operation codes: <b>18141</b>, <b>18142</b>, <b>19971</b></li> 821 * <li>EPSG coordinate operation name: <b>NZ TM zones</b></li> 822 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 823 * <li>Particularly important to E&P industry.</li> 824 * </ul> 825 * 826 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 827 */ 828 @Test 829 public void testNZTMZones() throws FactoryException { 830 important = true; 831 name = "NZ TM zones"; 832 methodName = "Transverse Mercator"; 833 createAndVerifyProjection(18141); 834 createAndVerifyProjection(18142); 835 createAndVerifyProjection(19971); 836 } 837 838 /** 839 * Tests “NZMG” coordinate operation creation from the factory. 840 * 841 * <ul> 842 * <li>EPSG coordinate operation codes: <b>19917</b></li> 843 * <li>EPSG coordinate operation name: <b>NZMG</b></li> 844 * <li>Coordinate operation method: <b>New Zealand Map Grid</b></li> 845 * <li>Particularly important to E&P industry.</li> 846 * </ul> 847 * 848 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 849 */ 850 @Test 851 public void testNZMG() throws FactoryException { 852 important = true; 853 name = "NZMG"; 854 methodName = "New Zealand Map Grid"; 855 createAndVerifyProjection(19917); 856 } 857 858 /** 859 * Tests “Peru zones” coordinate operation creation from the factory. 860 * 861 * <ul> 862 * <li>EPSG coordinate operation codes: <b>18161</b>, <b>18162</b>, <b>18163</b></li> 863 * <li>EPSG coordinate operation name: <b>Peru zones</b></li> 864 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 865 * <li>Particularly important to E&P industry.</li> 866 * </ul> 867 * 868 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 869 */ 870 @Test 871 public void testPeruZones() throws FactoryException { 872 important = true; 873 name = "Peru zones"; 874 methodName = "Transverse Mercator"; 875 createAndVerifyProjection(18161); 876 createAndVerifyProjection(18162); 877 createAndVerifyProjection(18163); 878 } 879 880 /** 881 * Tests “Philippine zones” coordinate operation creation from the factory. 882 * 883 * <ul> 884 * <li>EPSG coordinate operation codes: <b>18171</b>, <b>18172</b>, <b>18173</b>, <b>18174</b>, <b>18175</b></li> 885 * <li>EPSG coordinate operation name: <b>Philippine zones</b></li> 886 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 887 * <li>Particularly important to E&P industry.</li> 888 * </ul> 889 * 890 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 891 */ 892 @Test 893 public void testPhilippineZones() throws FactoryException { 894 important = true; 895 name = "Philippine zones"; 896 methodName = "Transverse Mercator"; 897 for (int code = 18171; code <= 18175; code++) { // Loop over 5 codes 898 createAndVerifyProjection(code); 899 } 900 } 901 902 /** 903 * Tests “Qatar Grid” coordinate operation creation from the factory. 904 * 905 * <ul> 906 * <li>EPSG coordinate operation codes: <b>19953</b></li> 907 * <li>EPSG coordinate operation name: <b>Qatar Grid</b></li> 908 * <li>Coordinate operation method: <b>Cassini-Soldner</b></li> 909 * <li>Particularly important to E&P industry.</li> 910 * </ul> 911 * 912 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 913 */ 914 @Test 915 public void testQatarGrid() throws FactoryException { 916 important = true; 917 name = "Qatar Grid"; 918 methodName = "Cassini-Soldner"; 919 createAndVerifyProjection(19953); 920 } 921 922 /** 923 * Tests “Qatar National Grid” coordinate operation creation from the factory. 924 * 925 * <ul> 926 * <li>EPSG coordinate operation codes: <b>19919</b></li> 927 * <li>EPSG coordinate operation name: <b>Qatar National Grid</b></li> 928 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 929 * <li>Particularly important to E&P industry.</li> 930 * </ul> 931 * 932 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 933 */ 934 @Test 935 public void testQatarNationalGrid() throws FactoryException { 936 important = true; 937 name = "Qatar National Grid"; 938 methodName = "Transverse Mercator"; 939 createAndVerifyProjection(19919); 940 } 941 942 /** 943 * Tests “RD New” coordinate operation creation from the factory. 944 * 945 * <ul> 946 * <li>EPSG coordinate operation codes: <b>19914</b></li> 947 * <li>EPSG coordinate operation name: <b>RD New</b></li> 948 * <li>Coordinate operation method: <b>Oblique Stereographic</b></li> 949 * <li>Particularly important to E&P industry.</li> 950 * </ul> 951 * 952 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 953 */ 954 @Test 955 public void testRDNew() throws FactoryException { 956 important = true; 957 name = "RD New"; 958 methodName = "Oblique Stereographic"; 959 createAndVerifyProjection(19914); 960 } 961 962 /** 963 * Tests “Malaysia RSO grids” coordinate operation creation from the factory. 964 * 965 * <ul> 966 * <li>EPSG coordinate operation codes: <b>19956</b>, <b>19957</b>, <b>19958</b></li> 967 * <li>EPSG coordinate operation name: <b>Malaysia RSO grids</b></li> 968 * <li>Coordinate operation method: <b>Hotine Oblique Mercator (variant B)</b></li> 969 * <li>Particularly important to E&P industry.</li> 970 * </ul> 971 * 972 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 973 */ 974 @Test 975 public void testMalaysiaRSOGrids_VariantB() throws FactoryException { 976 important = true; 977 name = "Malaysia RSO grids"; 978 methodName = "Hotine Oblique Mercator (variant B)"; 979 createAndVerifyProjection(19956); 980 createAndVerifyProjection(19957); 981 createAndVerifyProjection(19958); 982 } 983 984 /** 985 * Tests “Malaysia RSO grids” coordinate operation creation from the factory. 986 * 987 * <ul> 988 * <li>EPSG coordinate operation codes: <b>19871</b>, <b>19872</b>, <b>19894</b>, <b>19895</b></li> 989 * <li>EPSG coordinate operation name: <b>Malaysia RSO grids</b></li> 990 * <li>Coordinate operation method: <b>Hotine Oblique Mercator (variant A)</b></li> 991 * <li>Particularly important to E&P industry.</li> 992 * </ul> 993 * 994 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 995 */ 996 @Test 997 public void testMalaysiaRSOGrids_VariantA() throws FactoryException { 998 important = true; 999 name = "Malaysia RSO grids"; 1000 methodName = "Hotine Oblique Mercator (variant A)"; 1001 createAndVerifyProjection(19871); 1002 createAndVerifyProjection(19872); 1003 createAndVerifyProjection(19894); 1004 createAndVerifyProjection(19895); 1005 } 1006 1007 /** 1008 * Tests “US State Plane zones” coordinate operation creation from the factory. 1009 * 1010 * <ul> 1011 * <li>EPSG coordinate operation codes: <b>15002</b>, <b>15003</b>, <b>15004</b>, <b>15005</b>, <b>15006</b>, 1012 * <b>15007</b>, <b>15008</b>, <b>15009</b>, <b>15032</b>, <b>15033</b>, <i>…12 more</i></li> 1013 * <li>EPSG coordinate operation name: <b>US State Plane zones</b></li> 1014 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 1015 * <li>Specific usage / Remarks: <b>SPCS27 and SPCS83. Check especially FE/FN units. 1016 * Concentrate on states with E&P interest: AK; CA; LA; MI; NM; OK; TX; WY</b></li> 1017 * <li>Particularly important to E&P industry.</li> 1018 * </ul> 1019 * 1020 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 1021 */ 1022 @Test 1023 public void testUSStatePlaneZones_TM() throws FactoryException { 1024 important = true; 1025 name = "US State Plane zones"; 1026 methodName = "Transverse Mercator"; 1027 for (int code = 15002; code <= 15009; code++) { // Loop over 8 codes 1028 createAndVerifyProjection(code); 1029 } 1030 for (int code = 15032; code <= 15039; code++) { // Loop over 8 codes 1031 createAndVerifyProjection(code); 1032 } 1033 createAndVerifyProjection(13001); 1034 createAndVerifyProjection(13031); 1035 createAndVerifyProjection(15339); 1036 createAndVerifyProjection(14903); 1037 createAndVerifyProjection(14933); 1038 createAndVerifyProjection(14937); 1039 } 1040 1041 /** 1042 * Tests “US State Plane zones” coordinate operation creation from the factory. 1043 * 1044 * <ul> 1045 * <li>EPSG coordinate operation codes: <b>10404</b>, <b>10405</b>, <b>10406</b>, <b>10408</b>, <b>10434</b>, 1046 * <b>10435</b>, <b>10436</b>, <b>15310</b>, <b>15311</b>, <b>15312</b>, <i>…33 more</i></li> 1047 * <li>EPSG coordinate operation name: <b>US State Plane zones</b></li> 1048 * <li>Coordinate operation method: <b>Lambert Conic Conformal (2SP)</b></li> 1049 * <li>Specific usage / Remarks: <b>SPCS27 and SPCS83. Check especially FE/FN units. 1050 * Concentrate on states with E&P interest: AK; CA; LA; MI; NM; OK; TX; WY</b></li> 1051 * <li>Particularly important to E&P industry.</li> 1052 * </ul> 1053 * 1054 * <b>Note:</b> EPSG:12112 and 12113 are tested only if {@link #isDeprecatedObjectCreationSupported} is {@code true}. 1055 * Raison is: Method changed to accord with NGS practice. 1056 * 1057 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 1058 */ 1059 @Test 1060 public void testUSStatePlaneZones_LCC() throws FactoryException { 1061 important = true; 1062 name = "US State Plane zones"; 1063 methodName = "Lambert Conic Conformal (2SP)"; 1064 createAndVerifyProjection(10404); 1065 createAndVerifyProjection(10405); 1066 createAndVerifyProjection(10406); 1067 createAndVerifyProjection(10408); 1068 createAndVerifyProjection(10434); 1069 createAndVerifyProjection(10435); 1070 createAndVerifyProjection(10436); 1071 createAndVerifyProjection(15310); 1072 createAndVerifyProjection(15311); 1073 createAndVerifyProjection(15312); 1074 createAndVerifyProjection(11701); 1075 createAndVerifyProjection(11702); 1076 createAndVerifyProjection(11731); 1077 createAndVerifyProjection(11732); 1078 createAndVerifyProjection(15391); 1079 createAndVerifyProjection(15392); 1080 createAndVerifyProjection(12142); 1081 createAndVerifyProjection(12143); 1082 createAndVerifyProjection(15334); 1083 createAndVerifyProjection(15335); 1084 createAndVerifyProjection(13501); 1085 createAndVerifyProjection(13502); 1086 createAndVerifyProjection(13531); 1087 createAndVerifyProjection(13532); 1088 createAndVerifyProjection(15349); 1089 createAndVerifyProjection(15350); 1090 for (int code = 14201; code <= 14205; code++) { // Loop over 5 codes 1091 createAndVerifyProjection(code); 1092 } 1093 for (int code = 14231; code <= 14235; code++) { // Loop over 5 codes 1094 createAndVerifyProjection(code); 1095 } 1096 for (int code = 15357; code <= 15361; code++) { // Loop over 5 codes 1097 createAndVerifyProjection(code); 1098 } 1099 if (isDeprecatedObjectCreationSupported) { 1100 createAndVerifyProjection(12112); 1101 createAndVerifyProjection(12113); 1102 } 1103 } 1104 1105 /** 1106 * Tests “Stereo33” coordinate operation creation from the factory. 1107 * 1108 * <ul> 1109 * <li>EPSG coordinate operation codes: <b>19927</b></li> 1110 * <li>EPSG coordinate operation name: <b>Stereo33</b></li> 1111 * <li>Coordinate operation method: <b>Oblique Stereographic</b></li> 1112 * <li>Particularly important to E&P industry.</li> 1113 * </ul> 1114 * 1115 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 1116 */ 1117 @Test 1118 public void testStereo33() throws FactoryException { 1119 important = true; 1120 name = "Stereo33"; 1121 methodName = "Oblique Stereographic"; 1122 createAndVerifyProjection(19927); 1123 } 1124 1125 /** 1126 * Tests “Stereo70” coordinate operation creation from the factory. 1127 * 1128 * <ul> 1129 * <li>EPSG coordinate operation codes: <b>19926</b></li> 1130 * <li>EPSG coordinate operation name: <b>Stereo70</b></li> 1131 * <li>Coordinate operation method: <b>Oblique Stereographic</b></li> 1132 * <li>Particularly important to E&P industry.</li> 1133 * </ul> 1134 * 1135 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 1136 */ 1137 @Test 1138 public void testStereo70() throws FactoryException { 1139 important = true; 1140 name = "Stereo70"; 1141 methodName = "Oblique Stereographic"; 1142 createAndVerifyProjection(19926); 1143 } 1144 1145 /** 1146 * Tests “Syria Lambert” coordinate operation creation from the factory. 1147 * 1148 * <ul> 1149 * <li>EPSG coordinate operation codes: <b>19948</b></li> 1150 * <li>EPSG coordinate operation name: <b>Syria Lambert</b></li> 1151 * <li>Coordinate operation method: <b>Lambert Conic Conformal (1SP)</b></li> 1152 * <li>Particularly important to E&P industry.</li> 1153 * </ul> 1154 * 1155 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 1156 */ 1157 @Test 1158 public void testSyriaLambert() throws FactoryException { 1159 important = true; 1160 name = "Syria Lambert"; 1161 methodName = "Lambert Conic Conformal (1SP)"; 1162 createAndVerifyProjection(19948); 1163 } 1164 1165 /** 1166 * Tests “TM 0 N” coordinate operation creation from the factory. 1167 * 1168 * <ul> 1169 * <li>EPSG coordinate operation codes: <b>16400</b></li> 1170 * <li>EPSG coordinate operation name: <b>TM 0 N</b></li> 1171 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 1172 * <li>Particularly important to E&P industry.</li> 1173 * </ul> 1174 * 1175 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 1176 */ 1177 @Test 1178 public void testTM0N() throws FactoryException { 1179 important = true; 1180 name = "TM 0 N"; 1181 methodName = "Transverse Mercator"; 1182 createAndVerifyProjection(16400); 1183 } 1184 1185 /** 1186 * Tests “TM 1 NW” coordinate operation creation from the factory. 1187 * 1188 * <ul> 1189 * <li>EPSG coordinate operation codes: <b>17001</b></li> 1190 * <li>EPSG coordinate operation name: <b>TM 1 NW</b></li> 1191 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 1192 * <li>Particularly important to E&P industry.</li> 1193 * </ul> 1194 * 1195 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 1196 */ 1197 @Test 1198 public void testTM1NW() throws FactoryException { 1199 important = true; 1200 name = "TM 1 NW"; 1201 methodName = "Transverse Mercator"; 1202 createAndVerifyProjection(17001); 1203 } 1204 1205 /** 1206 * Tests “TM 109 SE” coordinate operation creation from the factory. 1207 * 1208 * <ul> 1209 * <li>EPSG coordinate operation codes: <b>16709</b></li> 1210 * <li>EPSG coordinate operation name: <b>TM 109 SE</b></li> 1211 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 1212 * <li>Particularly important to E&P industry.</li> 1213 * </ul> 1214 * 1215 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 1216 */ 1217 @Test 1218 public void testTM109SE() throws FactoryException { 1219 important = true; 1220 name = "TM 109 SE"; 1221 methodName = "Transverse Mercator"; 1222 createAndVerifyProjection(16709); 1223 } 1224 1225 /** 1226 * Tests “TM 11.30 SE” coordinate operation creation from the factory. 1227 * 1228 * <ul> 1229 * <li>EPSG coordinate operation codes: <b>16611</b></li> 1230 * <li>EPSG coordinate operation name: <b>TM 11.30 SE</b></li> 1231 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 1232 * <li>Particularly important to E&P industry.</li> 1233 * </ul> 1234 * 1235 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 1236 */ 1237 @Test 1238 public void testTM1130SE() throws FactoryException { 1239 important = true; 1240 name = "TM 11.30 SE"; 1241 methodName = "Transverse Mercator"; 1242 createAndVerifyProjection(16611); 1243 } 1244 1245 /** 1246 * Tests “TM 12 SE” coordinate operation creation from the factory. 1247 * 1248 * <ul> 1249 * <li>EPSG coordinate operation codes: <b>16612</b></li> 1250 * <li>EPSG coordinate operation name: <b>TM 12 SE</b></li> 1251 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 1252 * <li>Particularly important to E&P industry.</li> 1253 * </ul> 1254 * 1255 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 1256 */ 1257 @Test 1258 public void testTM12SE() throws FactoryException { 1259 important = true; 1260 name = "TM 12 SE"; 1261 methodName = "Transverse Mercator"; 1262 createAndVerifyProjection(16612); 1263 } 1264 1265 /** 1266 * Tests “TM 5 NE” coordinate operation creation from the factory. 1267 * 1268 * <ul> 1269 * <li>EPSG coordinate operation codes: <b>16405</b></li> 1270 * <li>EPSG coordinate operation name: <b>TM 5 NE</b></li> 1271 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 1272 * <li>Particularly important to E&P industry.</li> 1273 * </ul> 1274 * 1275 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 1276 */ 1277 @Test 1278 public void testTM5NE() throws FactoryException { 1279 important = true; 1280 name = "TM 5 NE"; 1281 methodName = "Transverse Mercator"; 1282 createAndVerifyProjection(16405); 1283 } 1284 1285 /** 1286 * Tests “TM 5 NW” coordinate operation creation from the factory. 1287 * 1288 * <ul> 1289 * <li>EPSG coordinate operation codes: <b>17005</b></li> 1290 * <li>EPSG coordinate operation name: <b>TM 5 NW</b></li> 1291 * <li>Coordinate operation method: <b>Transverse Mercator</b></li> 1292 * <li>Particularly important to E&P industry.</li> 1293 * </ul> 1294 * 1295 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 1296 */ 1297 @Test 1298 public void testTM5NW() throws FactoryException { 1299 important = true; 1300 name = "TM 5 NW"; 1301 methodName = "Transverse Mercator"; 1302 createAndVerifyProjection(17005); 1303 } 1304 1305 /** 1306 * Tests “Trinidad grid” coordinate operation creation from the factory. 1307 * 1308 * <ul> 1309 * <li>EPSG coordinate operation codes: <b>19925</b>, <b>19975</b></li> 1310 * <li>EPSG coordinate operation name: <b>Trinidad grid</b></li> 1311 * <li>Coordinate operation method: <b>Cassini-Soldner</b></li> 1312 * <li>Particularly important to E&P industry.</li> 1313 * </ul> 1314 * 1315 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 1316 */ 1317 @Test 1318 public void testTrinidadGrid() throws FactoryException { 1319 important = true; 1320 name = "Trinidad grid"; 1321 methodName = "Cassini-Soldner"; 1322 createAndVerifyProjection(19925); 1323 createAndVerifyProjection(19975); 1324 } 1325 1326 /** 1327 * Tests “Tunisia zones” coordinate operation creation from the factory. 1328 * 1329 * <ul> 1330 * <li>EPSG coordinate operation codes: <b>18181</b>, <b>18182</b></li> 1331 * <li>EPSG coordinate operation name: <b>Tunisia zones</b></li> 1332 * <li>Coordinate operation method: <b>Lambert Conic Conformal (1SP)</b></li> 1333 * <li>Particularly important to E&P industry.</li> 1334 * </ul> 1335 * 1336 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 1337 */ 1338 @Test 1339 public void testTunisiaZones() throws FactoryException { 1340 important = true; 1341 name = "Tunisia zones"; 1342 methodName = "Lambert Conic Conformal (1SP)"; 1343 createAndVerifyProjection(18181); 1344 createAndVerifyProjection(18182); 1345 } 1346 1347 /** 1348 * Tests “Voirol Unifie” coordinate operation creation from the factory. 1349 * 1350 * <ul> 1351 * <li>EPSG coordinate operation codes: <b>18021</b>, <b>18022</b></li> 1352 * <li>EPSG coordinate operation name: <b>Voirol Unifie</b></li> 1353 * <li>Coordinate operation method: <b>Lambert Conic Conformal (1SP)</b></li> 1354 * <li>Specific usage / Remarks: <b>Check not old parameters (codes 18011-18012)</b></li> 1355 * <li>Particularly important to E&P industry.</li> 1356 * </ul> 1357 * 1358 * @throws FactoryException if an error occurred while creating the coordinate operation from the EPSG code. 1359 */ 1360 @Test 1361 public void testVoirolUnifie() throws FactoryException { 1362 important = true; 1363 name = "Voirol Unifie"; 1364 methodName = "Lambert Conic Conformal (1SP)"; 1365 createAndVerifyProjection(18021); 1366 createAndVerifyProjection(18022); 1367 } 1368}