Hello Thierry

No problem. Below is the code for transforming from EPSG::26716 (a projected CRS) to WGS 84 using explicitly the coordinate operation EPSG::1175. The key point is that EPSG::1175 is an operation between 2 geographic CRS, i.e. between (latitude, longitude) coordinates in degrees, while EPSG::26716 is a projected CRS, i.e. (easting, northing) coordinates in metres. So before to apply EPSG::1175, we need to convert from (easting, northing) in metres to (latitude, longitude) in degrees. Normally the CRS.findOperation(...) method does that automatically, but the following code allows to control explicitly the transformation steps:

   CRSAuthorityFactory crsFactory = CRS.getAuthorityFactory("EPSG");
   CoordinateOperationAuthorityFactory opFactory = 
(CoordinateOperationAuthorityFactory) crsFactory;
   CoordinateOperation operation = opFactory.createCoordinateOperation("1175");
   /*
     * The EPSG::1175 operation expects a geographic source CRS.
     * This can be verified with System.out.println(operation);
     * we can see: SourceCRS[GeodeticCRS["NAD27", (...snip...)]].
     * If our coordinates are in another CRS, then first we need
     * to convert them to the CRS expected by EPSG::1175 first.
     */
   CoordinateReferenceSystem mySourceCRS = 
crsFactory.createCoordinateReferenceSystem("26716");
   CoordinateOperation mySourceToOperationSource = 
CRS.findOperation(mySourceCRS, operation.getSourceCRS(), null);
   /*
     * We have two operations: from my source CRS to the CRS expected
     * by the operation as inputs, then the operation itself. We want
     * the concatenation of those two steps:
     */
   MathTransform step1 = mySourceToOperationSource.getMathTransform();
   MathTransform step2 = operation.getMathTransform();
   MathTransform completeTransform = MathTransforms.concatenate(step1, step2);
   /*
     * Then we can use completeTransform for transforming from EPSG:26716
     * to WGS 84 with EPSG::1175 as a step.
     */
   DirectPosition source = new DirectPosition2D(250072.891031813, 
4147221.68033625);
   DirectPosition target = completeTransform.transform(source, null);
   System.out.println(target);

With this code I get the following result:

   POINT(37.44000000026929 -89.82500000051678)

Martin


Reply via email to