2012-04-23 11 views
5

Tengo un problema con la transformación de coordenadas querida con la ayuda de GeoTools: me gustaría convertir un conjunto de coordenadas de Gauss-Kruger (zona 5, EPSG 31469) en coordenadas ordinarias WGS84 (EPSG 4326).Transformación de coordenadas incorrecta Gauss-Kruger - WGS84 usando GeoTools

he construido un código con un ejemplo simple (un solo par de coordenadas para tratar):

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 

El resultado después de la depuración es el siguiente: 48.791886921764345, 17,16525096311777

Cuando a continuación, comprobar obtuve las coordenadas WGS84 (solo las puse en Google Maps) termino en algún lugar de la República Checa cerca de Austria, aunque este par de coordenadas debería estar en algún lugar del este de Alemania (seguro, lo comprobé con un descodificador html):

---> debería ser el resultado: 51.0609167, 13.6900142.

No puedo imaginar ningún motivo por el que se produzca esta falla. GeoTools obtiene los dos CRS deseados (adjunté un extracto de la respuesta de la consola java)

¿Alguien puede explicar esto? ¡Agradecería cualquier ayuda!

Muchos saluda, Sebastián


**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]]] 

Respuesta

2

que obtener el resultado correcto (13,690015717822922, 51,06089012028224) cuando trato de reproducir el problema con el código y las últimas Geotools (8.0). Con lon, lat intercambiado, eso es.

El mal resultado (17,16525096311777, 48,791886921764345) viene cuando de intercambio y coordXcoordY. Esto te coloca en el desierto yemenita en lugar de Dresde.

Tal vez suponga implícitamente un orden incorrecto de los ejes. Podría decirse que poner latitud antes de longitud viola de algún modo el acuerdo general de coordenadas cartesianas para poner X antes de Y.

Aunque no puedo reproducir su problema, una de las soluciones en this tutorial, donde se analiza el orden de ejes puede ayudarle.

+0

Sí, esto me volvió loco también aquí. Curiosamente, 'CRS.decode (" EPSG: 4326 ")' utiliza de alguna manera una orientación de eje diferente a la de 'DefaultGeographicCRS.WGS84' ¿quizás un error? – Karussell

+0

Oh, no tiene nada que ver con Geotools: "Entonces, si ve algunos datos en" EPSG: 4326 ", no tiene idea de si están en orden x/y o en orden y/x". Consulte la sección "orden de ejes" aquí http://docs.geotools.org/latest/userguide/tutorial/geometry/geometrycrs.html – Karussell

Cuestiones relacionadas