From: Johansen P. H. <ph...@no...> - 2003-10-08 12:45:09
|
Hi, I am new to using coordinate transformations with geotools (and in = general). I have a question on how to do this using ct and cs packages. What I want to do is create a source and a target coordinate system from = WKT and then create a transformation. The WKT's are generated with = org.geotools.cs.CoordinateSystemEPSGFactory (codes 32632 and 32632). = They look like this: ngoWKT: PROJCS["NGO 1948 (Oslo) / NGO zone III", GEOGCS["NGO 1948 (Oslo)", = DATUM["NGO 1948 (Oslo)", SPHEROID["Bessel Modified", 6377492.018, = 299.1528128, AUTHORITY["EPSG","7005"]], AUTHORITY["EPSG","6817"]], = PRIMEM["Oslo", 10.722916666666666, AUTHORITY["EPSG","8913"]], = UNIT["degree of angle",0.017453292519943295], AXIS["Geodetic = latitude",NORTH], AXIS["Geodetic longitude",EAST], = AUTHORITY["EPSG","4817"]], PROJECTION["Transverse_Mercator"], = PARAMETER["semi_major", 6377492.018], PARAMETER["semi_minor", = 6356173.508712696], PARAMETER["central_meridian", 0.0], = PARAMETER["latitude_of_origin", 58.00000000000001], = PARAMETER["scale_factor", 1.0], PARAMETER["false_easting", 0.0], = PARAMETER["false_northing", 0.0], UNIT["metre",1.0], = AXIS["Northing",NORTH], AXIS["Easting",EAST], AUTHORITY["EPSG","27393"]] utmWKT: PROJCS["WGS 84 / UTM zone 32N", GEOGCS["WGS 84", DATUM["World Geodetic = System 1984", SPHEROID["WGS 84", 6378137.0, 298.257223563, = AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]], = PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], UNIT["degree of = angle",0.017453292519943295], AXIS["Geodetic latitude",NORTH], = AXIS["Geodetic longitude",EAST], AUTHORITY["EPSG","4326"]], = PROJECTION["Transverse_Mercator"], PARAMETER["semi_major", 6378137.0], = PARAMETER["semi_minor", 6356752.314245179], = PARAMETER["central_meridian", 9.0], PARAMETER["latitude_of_origin", = 0.0], PARAMETER["scale_factor", 0.9996], PARAMETER["false_easting", = 500000.0], PARAMETER["false_northing", 0.0], UNIT["metre",1.0], = AXIS["Easting",EAST], AXIS["Northing",NORTH], AUTHORITY["EPSG","32632"]] My code looks like this: CoordinateSystemFactory csFactory =3D = CoordinateSystemFactory.getDefault(); CoordinateSystem sourceCS =3D null; CoordinateSystem targetCS =3D null; try { sourceCS =3D csFactory.createFromWKT(ngoWKT.toString()); targetCS =3D csFactory.createFromWKT(utmWKT.toString()); } catch(FactoryException fe) { return null; } =09 CoordinateTransformationFactory trFactory =3D = CoordinateTransformationFactory.getDefault(); CoordinateTransformation transformation =3D null; try { transformation =3D trFactory.createFromCoordinateSystems(sourceCS, = targetCS); } catch(CannotCreateTransformException te) { te.printStackTrace(); return null; } When I execute the code it fails with the Exception:=20 org.geotools.ct.CannotCreateTransformException: Bursa wolf parameters = required. Obvioulsy I am doing something wrong, and wonder what it is. Any help is welcome. Regards, Per Henrik -- Per Henrik Johansen |
From: Martin D. <mar...@te...> - 2003-10-08 13:43:42
|
Hello Johansen Johansen Per Henrik a =E9crit : > What I want to do is create a source and a target coordinate system fro= m WKT and then create a transformation. The WKT's are generated with org= .geotools.cs.CoordinateSystemEPSGFactory (codes 32632 and 32632). They lo= ok like this: >=20 > ngoWKT: > PROJCS["NGO 1948 (Oslo) / NGO zone III", GEOGCS["NGO 1948 (Oslo)", [...= snip...], AUTHORITY["EPSG","4817"]], [...snip...], AUTHORITY["EPSG","2739= 3"]] >=20 > utmWKT: > PROJCS["WGS 84 / UTM zone 32N", GEOGCS["WGS 84", [...snip...], AUTHORIT= Y["EPSG","4326"]], [...snip...] AUTHORITY["EPSG","32632"]] >=20 >=20 > When I execute the code it fails with the Exception:=20 > org.geotools.ct.CannotCreateTransformException: Bursa wolf parameters = required. The source and target CS don't use the same ellipsoid. Consequently,=20 "Bursa wolf" parameters are required for computing the ellipsoid shift.=20 Those parameters are specified through the=20 org.geotools.cs.WGS84ConversionInfo object, or as a "TOWGS84" tag in the=20 Well Know Text (WKT). For example, try the following on the command line: java org.geotools.cs.CoordinateSystemEPSGFactory 4273 You should see the following output (reformated here): <=3D=3D=3D EPSG 4273 =3D=3D=3D> GEOGCS["NGO 1948", [...snip...], TOWGS84[278.3, 93.0, 474.5, 7.889,=20 0.05, -6.61, 6.21], [...snip...] This "TOWGS84" thing is mandatory. Unfortunatly, it is not available=20 directly for yours source CS. There is the reason: * Yours source ProjectedCS (EPSG code 27393) uses the GeographicCS 4817. * The EPSG database do not defines any TOWGS84 info for 4817. Instead, it defines a transformation to 4273. * The EPSG database defines a TOWGS84 info for 4273. In short, the EPSG database do not defines any direct path from 4817 to=20 WGS84. Instead, it defines the following path: 4817 --> 4273 --> WGS84.=20 Unfortunatly, current version of CoordinateSystemEPSGFactory is not yet=20 wise enough to resolve this kind of indirect transformation. I may try=20 to fix that in a future version. In the main time, the workaround is to=20 defines the WGS84 info explicitly, as Simon Bowen suggested (thank Simon!= ) As a side note, in order to check the WGS84 conversion info, you can try=20 the following: * Open the EPSG database with Access * Click on the "Coordinate Transformation" button. * Put yours curson on "Name and code" field, and click on the search button. * Search for "NGO". Make sure that the "Search in" option in "anywhere in the field". * Looks for "Source CRS" and "Target CRS" fields. You will see the transformation path just mentioned above. Regards Martin. |