2

How we can have the list of available transformation between two coordinate systems using geotools? e.g. the list provided of epsg.io between EPSG:32066 and EPSG:4326

https://epsg.io/32066

Java snippet using geotools would be very helpful.

1 Answer 1

1

I think that this is not possible (though Andrea may correct me) -

Consider the following program:

CoordinateReferenceSystem src = CRS.decode("EPSG:32066");
CoordinateReferenceSystem dest = CRS.decode("EPSG:4326");
System.out.println(src);
MathTransform transform = CRS.findMathTransform(src, dest, false);
System.out.println(transform);

Which outputs:

PROJCS["NAD27 / BLM 16N (ftUS)", 
  GEOGCS["NAD27", 
    DATUM["North American Datum 1927", 
      SPHEROID["Clarke 1866", 6378206.4, 294.9786982138982, AUTHORITY["EPSG","7008"]], 
      TOWGS84[2.478, 149.752, 197.726, 0.526, -0.498, 0.501, 0.685], 
      AUTHORITY["EPSG","6267"]], 
    PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], 
    UNIT["degree", 0.017453292519943295], 
    AXIS["Geodetic latitude", NORTH], 
    AXIS["Geodetic longitude", EAST], 
    AUTHORITY["EPSG","4267"]], 
  PROJECTION["Transverse_Mercator", AUTHORITY["EPSG","9807"]], 
  PARAMETER["central_meridian", -87.0], 
  PARAMETER["latitude_of_origin", 0.0], 
  PARAMETER["scale_factor", 0.9996], 
  PARAMETER["false_easting", 1640416.67], 
  PARAMETER["false_northing", 0.0], 
  UNIT["ft_survey_us", 0.3048006096012192], 
  AXIS["Easting", EAST], 
  AXIS["Northing", NORTH], 
  AUTHORITY["EPSG","32066"]]
CONCAT_MT[PARAM_MT["Affine", 
    PARAMETER["num_row", 3], 
    PARAMETER["num_col", 3], 
    PARAMETER["elt_0_0", 0.3048006096012192], 
    PARAMETER["elt_1_1", 0.3048006096012192]], 
  INVERSE_MT[PARAM_MT["Transverse_Mercator", 
      PARAMETER["semi_major", 6378206.4], 
      PARAMETER["semi_minor", 6356583.8], 
      PARAMETER["central_meridian", -87.0], 
      PARAMETER["latitude_of_origin", 0.0], 
      PARAMETER["scale_factor", 0.9996], 
      PARAMETER["false_easting", 500000.00101600203], 
      PARAMETER["false_northing", 0.0]]], 
  PARAM_MT["Ellipsoid_To_Geocentric", 
    PARAMETER["dim", 2], 
    PARAMETER["semi_major", 6378206.4], 
    PARAMETER["semi_minor", 6356583.8]], 
  PARAM_MT["Affine", 
    PARAMETER["num_row", 4], 
    PARAMETER["num_col", 4], 
    PARAMETER["elt_0_0", 1.000000685], 
    PARAMETER["elt_0_1", -0.00000242891820616661], 
    PARAMETER["elt_0_2", -0.0000024143737857704], 
    PARAMETER["elt_0_3", 2.478], 
    PARAMETER["elt_1_0", 0.00000242891820616661], 
    PARAMETER["elt_1_1", 1.000000685], 
    PARAMETER["elt_1_2", -0.00000255012170946833], 
    PARAMETER["elt_1_3", 149.752], 
    PARAMETER["elt_2_0", 0.0000024143737857704], 
    PARAMETER["elt_2_1", 0.00000255012170946833], 
    PARAMETER["elt_2_2", 1.000000685], 
    PARAMETER["elt_2_3", 197.726]], 
  PARAM_MT["Geocentric_To_Ellipsoid", 
    PARAMETER["dim", 2], 
    PARAMETER["semi_major", 6378137.0], 
    PARAMETER["semi_minor", 6356752.314245179]], 
  PARAM_MT["Affine", 
    PARAMETER["num_row", 3], 
    PARAMETER["num_col", 3], 
    PARAMETER["elt_0_0", 0.0], 
    PARAMETER["elt_0_1", 1.0], 
    PARAMETER["elt_1_0", 1.0], 
    PARAMETER["elt_1_1", 0.0]]]

This will have come from the EPSG (now OPG) database, note the TOWGS84 parameter which defines the Affine Transform in the middle of the transform.

If I add the NADCON transform files to my org.geotools.referencing.factory.gridshift folder - I can get the following transform:

CONCAT_MT[PARAM_MT["Affine", 
    PARAMETER["num_row", 3], 
    PARAMETER["num_col", 3], 
    PARAMETER["elt_0_0", 0.3048006096012192], 
    PARAMETER["elt_1_1", 0.3048006096012192]], 
  INVERSE_MT[PARAM_MT["Transverse_Mercator", 
      PARAMETER["semi_major", 6378206.4], 
      PARAMETER["semi_minor", 6356583.8], 
      PARAMETER["central_meridian", -87.0], 
      PARAMETER["latitude_of_origin", 0.0], 
      PARAMETER["scale_factor", 0.9996], 
      PARAMETER["false_easting", 500000.00101600203], 
      PARAMETER["false_northing", 0.0]]], 
  PARAM_MT["NADCON", 
    PARAMETER["Latitude difference file", "conus.las"], 
    PARAMETER["Longitude difference file", "conus.los"]], 
  PARAM_MT["NADCON", 
    PARAMETER["Latitude difference file", "emhpgn.las"], 
    PARAMETER["Longitude difference file", "emhpgn.los"]], 
  PARAM_MT["Affine", 
    PARAMETER["num_row", 3], 
    PARAMETER["num_col", 3], 
    PARAMETER["elt_0_0", 0.0], 
    PARAMETER["elt_0_1", 1.0], 
    PARAMETER["elt_1_0", 1.0], 
    PARAMETER["elt_1_1", 0.0]]]

It looks like you might need to define a custom transform to make sure you use a specific transformation.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.