Hi Ian, some debugging with the following code:
public class MyGridShiftLocator implements GridShiftLocator { @Override public Citation getVendor() { return Citations.fromName( "DEG" ); } @Override public URL locateGrid( String grid ) { try { return new File( TransformTest.GSB_FILE ).toURI().toURL(); } catch ( MalformedURLException e ) { throw new RuntimeException( e ); } } } main: // MyGridShiftLocator is registered as GridShiftLocator via ServiceLoader NTv2Transform nTv2Transform = new NTv2Transform( new File( GSB_FILE ).toURI() ); Geometry g = TestHelper.toGeometry( "POINT(3427298.93 6006233.92)", new GeometryFactory() ); Geometry gTransformiert = JTS.transform( g, nTv2Transform ); // the point will not be shifted => see NTv2Transform#bidirectionalTransform // but why? System.out.println( "Result: " + gTransformiert ); System.out.println( "Expected: POINT(32427258.8317812 6004273.44478457)" ); Benjamin Von: "Ian Turton" <ijtur...@gmail.com> An: "Benjamin Sokolowski" <benjamin.sokolow...@data-experts.de> Kopie: "geotools-users" <geotools-gt2-users@lists.sourceforge.net>, "Frank Czarnikow" <frank.czarni...@data-experts.de> Datum: 08.04.2020 16:02 Betreff: Re: Re: Re: Re: Re: [Geotools-gt2-users] Coordinate Transformation OK WIndows updates still running so more digging: Using this code: CoordinateOperationFactory operationFactory = ReferencingFactoryFinder.getCoordinateOperationFactory(null); Set<CoordinateOperation> ops = operationFactory.findOperations(sourceCRS, targetCRS); for (CoordinateOperation o : ops) { System.out.println(o); } I get the following - the last one is your file (I added an epsg_operations.properties file to src/main/resources/org/geotools/referencing/factory/gridshift) - what I'm not clear on is how to force a pick of that one. ConcatenatedOperation["ProjectedCRS[DHDN / 3-degree Gauss-Kruger zone 3] ⇨ ProjectedCRS[ETRS89 / UTM zone 32N (zE-N)]", SOURCE["DHDN / 3-degree Gauss-Kruger zone 3", AUTHORITY["EPSG","31467"]], TARGET["ETRS89 / UTM zone 32N (zE-N)", AUTHORITY["EPSG","4647"]], CylindricalProjection["ProjectedCRS[DHDN / 3-degree Gauss-Kruger zone 3] ⇨ GeographicCRS[DHDN]", SOURCE["DHDN / 3-degree Gauss-Kruger zone 3", AUTHORITY["EPSG","31467"]], TARGET["DHDN", AUTHORITY["EPSG","4314"]], METHOD["Transverse_Mercator", AUTHORITY["EPSG","9807"]]], Transformation["DHDN to ETRS89 (5)", SOURCE["DHDN", AUTHORITY["EPSG","4314"]], TARGET["ETRS89", AUTHORITY["EPSG","4258"]], METHOD["Position Vector transformation (geog2D domain)", AUTHORITY["EPSG","9606"]], AUTHORITY["EPSG","1780"]], CylindricalProjection["UTM zone 32N with prefix", SOURCE["ETRS89", AUTHORITY["EPSG","4258"]], TARGET["ETRS89 / UTM zone 32N (zE-N)", AUTHORITY["EPSG","4647"]], METHOD["Transverse_Mercator", AUTHORITY["EPSG","9807"]], AUTHORITY["EPSG","4648"]]] ConcatenatedOperation["ProjectedCRS[DHDN / 3-degree Gauss-Kruger zone 3] ⇨ ProjectedCRS[ETRS89 / UTM zone 32N (zE-N)]", SOURCE["DHDN / 3-degree Gauss-Kruger zone 3", AUTHORITY["EPSG","31467"]], TARGET["ETRS89 / UTM zone 32N (zE-N)", AUTHORITY["EPSG","4647"]], CylindricalProjection["ProjectedCRS[DHDN / 3-degree Gauss-Kruger zone 3] ⇨ GeographicCRS[DHDN]", SOURCE["DHDN / 3-degree Gauss-Kruger zone 3", AUTHORITY["EPSG","31467"]], TARGET["DHDN", AUTHORITY["EPSG","4314"]], METHOD["Transverse_Mercator", AUTHORITY["EPSG","9807"]]], Transformation["DHDN to ETRS89 (4)", SOURCE["DHDN", AUTHORITY["EPSG","4314"]], TARGET["ETRS89", AUTHORITY["EPSG","4258"]], METHOD["Position Vector transformation (geog2D domain)", AUTHORITY["EPSG","9606"]], AUTHORITY["EPSG","1779"]], CylindricalProjection["UTM zone 32N with prefix", SOURCE["ETRS89", AUTHORITY["EPSG","4258"]], TARGET["ETRS89 / UTM zone 32N (zE-N)", AUTHORITY["EPSG","4647"]], METHOD["Transverse_Mercator", AUTHORITY["EPSG","9807"]], AUTHORITY["EPSG","4648"]]] ConcatenatedOperation["ProjectedCRS[DHDN / 3-degree Gauss-Kruger zone 3] ⇨ ProjectedCRS[ETRS89 / UTM zone 32N (zE-N)]", SOURCE["DHDN / 3-degree Gauss-Kruger zone 3", AUTHORITY["EPSG","31467"]], TARGET["ETRS89 / UTM zone 32N (zE-N)", AUTHORITY["EPSG","4647"]], CylindricalProjection["ProjectedCRS[DHDN / 3-degree Gauss-Kruger zone 3] ⇨ GeographicCRS[DHDN]", SOURCE["DHDN / 3-degree Gauss-Kruger zone 3", AUTHORITY["EPSG","31467"]], TARGET["DHDN", AUTHORITY["EPSG","4314"]], METHOD["Transverse_Mercator", AUTHORITY["EPSG","9807"]]], Transformation["DHDN to ETRS89 (2)", SOURCE["DHDN", AUTHORITY["EPSG","4314"]], TARGET["ETRS89", AUTHORITY["EPSG","4258"]], METHOD["Position Vector transformation (geog2D domain)", AUTHORITY["EPSG","9606"]], AUTHORITY["EPSG","1776"]], CylindricalProjection["UTM zone 32N with prefix", SOURCE["ETRS89", AUTHORITY["EPSG","4258"]], TARGET["ETRS89 / UTM zone 32N (zE-N)", AUTHORITY["EPSG","4647"]], METHOD["Transverse_Mercator", AUTHORITY["EPSG","9807"]], AUTHORITY["EPSG","4648"]]] ConcatenatedOperation["ProjectedCRS[DHDN / 3-degree Gauss-Kruger zone 3] ⇨ ProjectedCRS[ETRS89 / UTM zone 32N (zE-N)]", SOURCE["DHDN / 3-degree Gauss-Kruger zone 3", AUTHORITY["EPSG","31467"]], TARGET["ETRS89 / UTM zone 32N (zE-N)", AUTHORITY["EPSG","4647"]], CylindricalProjection["ProjectedCRS[DHDN / 3-degree Gauss-Kruger zone 3] ⇨ GeographicCRS[DHDN]", SOURCE["DHDN / 3-degree Gauss-Kruger zone 3", AUTHORITY["EPSG","31467"]], TARGET["DHDN", AUTHORITY["EPSG","4314"]], METHOD["Transverse_Mercator", AUTHORITY["EPSG","9807"]]], Transformation["DHDN to ETRS89 (3)", SOURCE["DHDN", AUTHORITY["EPSG","4314"]], TARGET["ETRS89", AUTHORITY["EPSG","4258"]], METHOD["Position Vector transformation (geog2D domain)", AUTHORITY["EPSG","9606"]], AUTHORITY["EPSG","1778"]], CylindricalProjection["UTM zone 32N with prefix", SOURCE["ETRS89", AUTHORITY["EPSG","4258"]], TARGET["ETRS89 / UTM zone 32N (zE-N)", AUTHORITY["EPSG","4647"]], METHOD["Transverse_Mercator", AUTHORITY["EPSG","9807"]], AUTHORITY["EPSG","4648"]]] ConcatenatedOperation["ProjectedCRS[DHDN / 3-degree Gauss-Kruger zone 3] ⇨ ProjectedCRS[ETRS89 / UTM zone 32N (zE-N)]", SOURCE["DHDN / 3-degree Gauss-Kruger zone 3", AUTHORITY["EPSG","31467"]], TARGET["ETRS89 / UTM zone 32N (zE-N)", AUTHORITY["EPSG","4647"]], CylindricalProjection["ProjectedCRS[DHDN / 3-degree Gauss-Kruger zone 3] ⇨ GeographicCRS[DHDN]", SOURCE["DHDN / 3-degree Gauss-Kruger zone 3", AUTHORITY["EPSG","31467"]], TARGET["DHDN", AUTHORITY["EPSG","4314"]], METHOD["Transverse_Mercator", AUTHORITY["EPSG","9807"]]], Transformation["DHDN to ETRS89 (7)", SOURCE["DHDN", AUTHORITY["EPSG","4314"]], TARGET["ETRS89", AUTHORITY["EPSG","4258"]], METHOD["Position Vector transformation (geog2D domain)", AUTHORITY["EPSG","9606"]], AUTHORITY["EPSG","1782"]], CylindricalProjection["UTM zone 32N with prefix", SOURCE["ETRS89", AUTHORITY["EPSG","4258"]], TARGET["ETRS89 / UTM zone 32N (zE-N)", AUTHORITY["EPSG","4647"]], METHOD["Transverse_Mercator", AUTHORITY["EPSG","9807"]], AUTHORITY["EPSG","4648"]]] ConcatenatedOperation["ProjectedCRS[DHDN / 3-degree Gauss-Kruger zone 3] ⇨ ProjectedCRS[ETRS89 / UTM zone 32N (zE-N)]", SOURCE["DHDN / 3-degree Gauss-Kruger zone 3", AUTHORITY["EPSG","31467"]], TARGET["ETRS89 / UTM zone 32N (zE-N)", AUTHORITY["EPSG","4647"]], CylindricalProjection["ProjectedCRS[DHDN / 3-degree Gauss-Kruger zone 3] ⇨ GeographicCRS[DHDN]", SOURCE["DHDN / 3-degree Gauss-Kruger zone 3", AUTHORITY["EPSG","31467"]], TARGET["DHDN", AUTHORITY["EPSG","4314"]], METHOD["Transverse_Mercator", AUTHORITY["EPSG","9807"]]], Transformation["DHDN to ETRS89 (1)", SOURCE["DHDN", AUTHORITY["EPSG","4314"]], TARGET["ETRS89", AUTHORITY["EPSG","4258"]], METHOD["Coordinate Frame rotation (geog2D domain)", AUTHORITY["EPSG","9607"]], AUTHORITY["EPSG","1309"]], CylindricalProjection["UTM zone 32N with prefix", SOURCE["ETRS89", AUTHORITY["EPSG","4258"]], TARGET["ETRS89 / UTM zone 32N (zE-N)", AUTHORITY["EPSG","4647"]], METHOD["Transverse_Mercator", AUTHORITY["EPSG","9807"]], AUTHORITY["EPSG","4648"]]] ConcatenatedOperation["ProjectedCRS[DHDN / 3-degree Gauss-Kruger zone 3] ⇨ ProjectedCRS[ETRS89 / UTM zone 32N (zE-N)]", SOURCE["DHDN / 3-degree Gauss-Kruger zone 3", AUTHORITY["EPSG","31467"]], TARGET["ETRS89 / UTM zone 32N (zE-N)", AUTHORITY["EPSG","4647"]], CylindricalProjection["ProjectedCRS[DHDN / 3-degree Gauss-Kruger zone 3] ⇨ GeographicCRS[DHDN]", SOURCE["DHDN / 3-degree Gauss-Kruger zone 3", AUTHORITY["EPSG","31467"]], TARGET["DHDN", AUTHORITY["EPSG","4314"]], METHOD["Transverse_Mercator", AUTHORITY["EPSG","9807"]]], Transformation["DHDN to ETRS89 (6)", SOURCE["DHDN", AUTHORITY["EPSG","4314"]], TARGET["ETRS89", AUTHORITY["EPSG","4258"]], METHOD["Position Vector transformation (geog2D domain)", AUTHORITY["EPSG","9606"]], AUTHORITY["EPSG","1781"]], CylindricalProjection["UTM zone 32N with prefix", SOURCE["ETRS89", AUTHORITY["EPSG","4258"]], TARGET["ETRS89 / UTM zone 32N (zE-N)", AUTHORITY["EPSG","4647"]], METHOD["Transverse_Mercator", AUTHORITY["EPSG","9807"]], AUTHORITY["EPSG","4648"]]] ConcatenatedOperation["ProjectedCRS[DHDN / 3-degree Gauss-Kruger zone 3] ⇨ ProjectedCRS[ETRS89 / UTM zone 32N (zE-N)]", SOURCE["DHDN / 3-degree Gauss-Kruger zone 3", AUTHORITY["EPSG","31467"]], TARGET["ETRS89 / UTM zone 32N (zE-N)", AUTHORITY["EPSG","4647"]], CylindricalProjection["ProjectedCRS[DHDN / 3-degree Gauss-Kruger zone 3] ⇨ GeographicCRS[DHDN]", SOURCE["DHDN / 3-degree Gauss-Kruger zone 3", AUTHORITY["EPSG","31467"]], TARGET["DHDN", AUTHORITY["EPSG","4314"]], METHOD["Transverse_Mercator", AUTHORITY["EPSG","9807"]]], Transformation["DHDN to ETRS89 (8)", SOURCE["DHDN", AUTHORITY["EPSG","4314"]], TARGET["ETRS89", AUTHORITY["EPSG","4258"]], METHOD["NTv2", AUTHORITY["EPSG","9615"]], AUTHORITY["EPSG","15948"]], CylindricalProjection["UTM zone 32N with prefix", SOURCE["ETRS89", AUTHORITY["EPSG","4258"]], TARGET["ETRS89 / UTM zone 32N (zE-N)", AUTHORITY["EPSG","4647"]], METHOD["Transverse_Mercator", AUTHORITY["EPSG","9807"]], AUTHORITY["EPSG","4648"]]] On Wed, 8 Apr 2020 at 14:01, Ian Turton <ijtur...@gmail.com> wrote: On Wed, 8 Apr 2020 at 13:57, Benjamin Sokolowski < benjamin.sokolow...@data-experts.de> wrote: >> Are you sure this transform is in the EPSG tables? Probably not. The grid was calculated specifically for the state of Schleswig Holstein in Germany. In my head it is like this: I register a user-defined transformation in geotools of 31467 to 4647. This is always done taking into account the grid I provide (the specific gsb file). Am I wrong? Where are you registering that? Ian -- Ian Turton
_______________________________________________ GeoTools-GT2-Users mailing list GeoTools-GT2-Users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users