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
Java snippet using geotools would be very helpful.
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
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)",
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.