2012-04-23 14 views
5

Sto avendo un problema riguardante la trasformazione delle coordinate molto amata con l'aiuto di GeoTools: vorrei convertire un insieme di coordinate da Gauss-Kruger (zona 5, EPSG 31469) in coordinate WGS84 ordinarie (EPSG 4326).Trasformazione coordinate errata Gauss-Kruger - WGS84 utilizzando GeoTools

Ive costruito un codice con un semplice esempio (solo una coppia di coordinate per provare):

double coordX = 5408301.53; 
double coordY = 5659230.5; 
double[] punt = new double[2]; 

CoordinateReferenceSystem sourceCRS = CRS.decode("EPSG:31469"); 
CoordinateReferenceSystem targetCRS = CRS.decode("EPSG:4326"); 

MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS, true); 

DirectPosition expPt = new GeneralDirectPosition(coordX, coordY); 
expPt = transform.transform(expPt, null); 
punt = expPt.getCoordinate(); 

System.out.println(punt[0] + ", " + punt[1]); //lon, lat 

Il risultato dopo debugging è il seguente: 48,791886921764345, 17,16525096311777

Quando poi controllare ho ottenuto le coordinate WGS84 (le ho appena scaricate su Google Maps). Finisco da qualche parte nella Repubblica Ceca, vicino all'Austria, anche se questa coppia di coordinate dovrebbe essere da qualche parte nell'est della Germania (di sicuro l'ho controllato con un decodificatore html):

---> dovrebbe essere il risultato: 51.0609167, 13.6900142.

Non riesco a immaginare alcun motivo per cui si verifichi questo errore. GeoTools ottiene entrambi i CRS ricercati (ho allegato un estratto dalla risposta della console java)

Qualcuno è in grado di spiegarlo? Apprezzerei qualsiasi aiuto!

Molti saluta, Sebastian


**sourceCRS:** 
PROJCS["DHDN/3-degree Gauss-Kruger zone 5", 
    GEOGCS["DHDN", 
    DATUM["Deutsches Hauptdreiecksnetz", 
     SPHEROID["Bessel 1841", 6377397.155, 299.1528128, AUTHORITY["EPSG","7004"]], 
     TOWGS84[612.4, 77.0, 440.2, -0.054, 0.057, -2.797, 2.55], 
     AUTHORITY["EPSG","6314"]], 
    PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], 
    UNIT["degree", 0.017453292519943295], 
    AXIS["Geodetic latitude", NORTH], 
    AXIS["Geodetic longitude", EAST], 
    AUTHORITY["EPSG","4314"]], 
    PROJECTION["Transverse_Mercator", AUTHORITY["EPSG","9807"]], 
    PARAMETER["central_meridian", 15.0], 
    PARAMETER["latitude_of_origin", 0.0], 
    PARAMETER["scale_factor", 1.0], 
    PARAMETER["false_easting", 5500000.0], 
    PARAMETER["false_northing", 0.0], 
    UNIT["m", 1.0], 
    AXIS["Northing", NORTH], 
    AXIS["Easting", EAST], 
    AUTHORITY["EPSG","31469"]] 

**targetCRS:** 
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", 0.017453292519943295], 
    AXIS["Geodetic latitude", NORTH], 
    AXIS["Geodetic longitude", EAST], 
    AUTHORITY["EPSG","4326"]] 
CONCAT_MT[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]], 
    INVERSE_MT[PARAM_MT["Transverse_Mercator", 
     PARAMETER["semi_major", 6377397.155], 
     PARAMETER["semi_minor", 6356078.962818189], 
     PARAMETER["central_meridian", 15.0], 
     PARAMETER["latitude_of_origin", 0.0], 
     PARAMETER["scale_factor", 1.0], 
     PARAMETER["false_easting", 5500000.0], 
     PARAMETER["false_northing", 0.0]]], 
    PARAM_MT["Ellipsoid_To_Geocentric", 
    PARAMETER["dim", 2], 
    PARAMETER["semi_major", 6377397.155], 
    PARAMETER["semi_minor", 6356078.962818189]], 
    PARAM_MT["Position Vector transformation (geog2D domain)", 
    PARAMETER["dx", 612.4], 
    PARAMETER["dy", 77.0], 
    PARAMETER["dz", 440.2], 
    PARAMETER["ex", -0.054], 
    PARAMETER["ey", 0.057], 
    PARAMETER["ez", -2.797], 
    PARAMETER["ppm", 2.5500000000455714]], 
    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]]] 

risposta

2

ottengo il risultato corretto (13,690015717822922, 51,06089012028224) quando cerco di riprodurre il problema con il codice e le ultime GeoTools (8.0). Con lon, lat scambiato, cioè.

Il cattivo risultato (17,16525096311777, 48,791886921764345) arriva quando ho di swap coordX e coordY. Questo ti mette nel deserto yemenita invece di Dresda.

Forse si presuppone implicitamente un ordine errato degli assi. Probabilmente, mettendo la latitudine prima della longitudine in qualche modo viola l'accordo generale per le coordinate cartesiane di mettere X prima di Y.

Mentre non riesco a riprodurre il problema, una delle soluzioni alternative in this tutorial, in cui viene discusso l'ordine degli assi può essere d'aiuto.

+0

Sì, questo mi ha fatto impazzire anche qui. Stranamente 'CRS.decode (" EPSG: 4326 ")' usa in qualche modo un diverso orientamento dell'asse rispetto a 'DefaultGeographicCRS.WGS84', forse un bug? – Karussell

+0

Oh, non ha nulla a che fare con Geotools: "Quindi se vedi alcuni dati in" EPSG: 4326 "non hai idea se è in ordine x/y o in ordine y/x." Vedere la sezione "Ordine degli assi" qui http://docs.geotools.org/latest/userguide/tutorial/geometry/geometrycrs.html – Karussell

Problemi correlati