Hi again, After digging deeper, it seems the different transformation results I observe with 21.2 are caused by differing CRS-definitions. When exporting the CRSs from 14.3 to WTK and loading those WTKs with 21.2, I get the same (valid?) transformation result I get with 14.3.
However the difference between 21.2 WTKs and 14.3 WTKs seem to be limited to rounding errors: WTK 14.3: PROJCS["MGI (Ferro) / Austria GK West Zone", GEOGCS["MGI (Ferro)", DATUM["Militar-Geographische Institut (Ferro)", SPHEROID["Bessel 1841", 6377397.155, 299.1528128, AUTHORITY["EPSG","7004"]], AUTHORITY["EPSG","6805"]], PRIMEM["Ferro", -17.666666666666668, AUTHORITY["EPSG","8909"]], UNIT["degree", 0.017453292519943295], AXIS["Geodetic longitude", EAST], AXIS["Geodetic latitude", NORTH], AUTHORITY["EPSG","4805"]], PROJECTION["Transverse_Mercator"], PARAMETER["central_meridian", 28.0], PARAMETER["latitude_of_origin", 0.0], PARAMETER["scale_factor", 1.0], PARAMETER["false_easting", 0.0], PARAMETER["false_northing", -5000000.0], UNIT["m", 1.0], AXIS["Easting", EAST], AXIS["Northing", NORTH], AUTHORITY["EPSG","31251"]] PROJCS["MGI / Austria Lambert", GEOGCS["MGI", DATUM["Militar-Geographische Institut", SPHEROID["Bessel 1841", 6377397.155, 299.1528128, AUTHORITY["EPSG","7004"]], TOWGS84[601.705, 84.263, 485.227, 4.7354, -1.3145, -5.393, -2.3887], AUTHORITY["EPSG","6312"]], PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], UNIT["degree", 0.017453292519943295], AXIS["Geodetic longitude", EAST], AXIS["Geodetic latitude", NORTH], AUTHORITY["EPSG","4312"]], PROJECTION["Lambert_Conformal_Conic_2SP"], PARAMETER["central_meridian", 13.333333333333334], PARAMETER["latitude_of_origin", 47.5], PARAMETER["standard_parallel_1", 49.0], PARAMETER["false_easting", 400000.0], PARAMETER["false_northing", 400000.0], PARAMETER["scale_factor", 1.0], PARAMETER["standard_parallel_2", 46.0], UNIT["m", 1.0], AXIS["Easting", EAST], AXIS["Northing", NORTH], AUTHORITY["EPSG","31287"]] WTK 21.2: PROJCS["MGI (Ferro) / Austria GK West Zone", GEOGCS["MGI (Ferro)", DATUM["Militar-Geographische Institut (Ferro)", SPHEROID["Bessel 1841", 6377397.155, 299.1528128, AUTHORITY["EPSG","7004"]], AUTHORITY["EPSG","6805"]], PRIMEM["Ferro", -17.666666666666668, AUTHORITY["EPSG","8909"]], UNIT["degree", 0.017453292519943295], AXIS["Geodetic latitude", NORTH], AXIS["Geodetic longitude", EAST], AUTHORITY["EPSG","4805"]], PROJECTION["Transverse_Mercator", AUTHORITY["EPSG","9807"]], PARAMETER["central_meridian", 28.0], PARAMETER["latitude_of_origin", 0.0], PARAMETER["scale_factor", 1.0], PARAMETER["false_easting", 0.0], PARAMETER["false_northing", -5000000.0], UNIT["m", 1.0], AXIS["Northing", NORTH], AXIS["Easting", EAST], AUTHORITY["EPSG","31251"]] PROJCS["MGI / Austria Lambert", GEOGCS["MGI", DATUM["Militar-Geographische Institut", SPHEROID["Bessel 1841", 6377397.155, 299.1528128, AUTHORITY["EPSG","7004"]], TOWGS84[601.705, 84.263, 485.227, 4.7354, -1.3145, -5.393, -2.3887], AUTHORITY["EPSG","6312"]], PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], UNIT["degree", 0.017453292519943295], AXIS["Geodetic latitude", NORTH], AXIS["Geodetic longitude", EAST], AUTHORITY["EPSG","4312"]], PROJECTION["Lambert_Conformal_Conic_2SP", AUTHORITY["EPSG","9802"]], PARAMETER["central_meridian", 13.333333333333336], PARAMETER["latitude_of_origin", 47.5], PARAMETER["standard_parallel_1", 48.99999999999999], PARAMETER["false_easting", 400000.0], PARAMETER["false_northing", 400000.0], PARAMETER["scale_factor", 1.0], PARAMETER["standard_parallel_2", 46.0], UNIT["m", 1.0], AXIS["Northing", NORTH], AXIS["Easting", EAST], AUTHORITY["EPSG","31287"]] Am Fr., 20. Sept. 2019 um 10:23 Uhr schrieb Clemens Eisserer <linuxhi...@gmail.com>: > > Hi, > > After upgrading an application from geotools-14.3 to 21.2 I've > observed strange behaviour when transforming points from one CRS > (EPSG:31251) to another (EPSG:31287). > The original code we had dies with an exception, however even two > other tries return different results from what I got with 14.3. > With an external tool I also get results which are identical to what > 14.3 returns. > > With 14.3 all 3 tries succeed and return the expected result: > > OldWay: POINT (259878.57433310486 377178.60575377225) > > Plain: GeneralDirectPosition[259878.57433310486, 377178.60575377225] > > JTS: POINT (259878.57433310486 377178.60575377225) > > With 21.2 the geometryBuilder-based way fails, the two others return > consistent but different (wrong?) results: > > Plain: GeneralDirectPosition[219916.12907210115, 405574.2553041743] > > JTS: POINT (219916.12907210115 405574.2553041743) > > java.lang.IllegalArgumentException: DirectPosition cannot have a null CRS > > at > > org.geotools.geometry.jts.spatialschema.geometry.DirectPositionImpl.setCRS(DirectPositionImpl.java:155) > > at > > org.geotools.geometry.jts.spatialschema.geometry.DirectPositionImpl.<init>(DirectPositionImpl.java:125) > > at > > org.geotools.geometry.jts.spatialschema.geometry.primitive.PrimitiveFactoryImpl.createDirectPosition(PrimitiveFactoryImpl.java:95) > > at > > org.geotools.geometry.jts.spatialschema.geometry.primitive.PrimitiveFactoryImpl.createPoint(PrimitiveFactoryImpl.java:103) > > at > > org.geotools.geometry.GeometryBuilder.createPoint(GeometryBuilder.java:352) > > at > > org.geotools.geometry.GeometryBuilder.createPoint(GeometryBuilder.java:320) > > Any idea whats going on here? > > Best regards, Clemens > > > public class CoordinateTransformTest { > > @Test > public void testTransform() throws FactoryException, TransformException { > CoordinateReferenceSystem gkCRS = CRS.decode("EPSG:31251"); > CoordinateReferenceSystem dbCRS = CRS.decode("EPSG:31287"); > > MathTransform transform = CRS.findMathTransform(gkCRS, dbCRS, true); > DirectPosition2D pos2D = new DirectPosition2D(86765.44, 238436.25); > > DirectPosition posTransformed = transform.transform(pos2D, null); > System.out.println("Plain: "+posTransformed); > > Point transformedPoint = (Point) > JTS.transform(JTS.toGeometry(pos2D.getDirectPosition()), transform); > System.out.println("JTS: "+transformedPoint); > } > > @Test > public void testOldWay() throws FactoryException, TransformException { > CoordinateReferenceSystem gkCRS = CRS.decode("EPSG:31251"); > CoordinateReferenceSystem dbCRS = CRS.decode("EPSG:31287"); > > GeometryBuilder geometryBuilder = new GeometryBuilder(gkCRS); > > org.opengis.geometry.primitive.Point point = > geometryBuilder.createPoint(86765.44, 238436.25); > > MathTransform mtf = CRS.findMathTransform(gkCRS, dbCRS, true); > > Point transformedPoint = (Point) > JTS.transform(JTS.toGeometry(point.getDirectPosition()), mtf); > System.out.println("OldWay: "+transformedPoint); > } > } _______________________________________________ GeoTools-GT2-Users mailing list GeoTools-GT2-Users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users