# List of available transformations between two coordinates system in epsg using geotools

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.

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)",
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]]],
PARAMETER["Latitude difference file", "conus.las"],
PARAMETER["Longitude difference file", "conus.los"]],