6 votos

Proj4J no es preciso para las transformaciones EPSG:3857

Intento convertir unas coordenadas de "EPSG:31469" a "EPSG:3857" y viceversa.

Con el marco pesado GeoTools parece funcionar con bastante precisión.

"EPSG:31469" - 5439627.33,          5661628.09
"EPSG:3857"  - 1573655.6648492748,  6636624.730959651
"EPSG:31469" - 5439627.330626475,   5661628.099510074

Pero me gustaría utilizar la biblioteca ligera Proj4j ( https://github.com/Proj4J/proj4j ) que produce una desviación masiva:

"EPSG:31469" - 5439627.33,          5661628.09
"EPSG:3857"  - 1573659.9666159092   6603334.624358153
"EPSG:31469" - 5439626.576916553    5661585.491150079

¿Alguna idea de por qué ocurre esto?

Mi código:

import org.cts.crs.CRSException;
import org.osgeo.proj4j.CRSFactory;
import org.osgeo.proj4j.CoordinateTransform;
import org.osgeo.proj4j.CoordinateTransformFactory;
import org.osgeo.proj4j.ProjCoordinate;

public class Test
{

    public static void main(String[] args) throws CRSException
    {
        ProjCoordinate coord = new ProjCoordinate(5439627.33, 5661628.09);
        System.out.println(coord);

        ProjCoordinate target = new ProjCoordinate();
        CRSFactory crsFactory = new CRSFactory();
        CoordinateTransformFactory f = new CoordinateTransformFactory();
        CoordinateTransform t;

        t = f.createTransform(crsFactory.createFromName("EPSG:31469"),
            crsFactory.createFromName("EPSG:3857"));

        t.transform(coord, target);

        System.out.println(target);

        ProjCoordinate coord2 = new ProjCoordinate(target.x, target.y);

        t = f.createTransform(crsFactory.createFromName("EPSG:3857"),
            crsFactory.createFromName("EPSG:31469"));

        t.transform(coord2, target);

        System.out.println(target);
        System.out.println(target.x - coord.x);
        System.out.println(target.y - coord.y);

    }

}

0 votos

La biblioteca da la sensación de estar poco cuidada. Tal vez debería probar otra biblioteca java ligera github.com/orbisgis/cts en su lugar.

0 votos

La definición 3857 en la versión java puede ser errónea. Puede que esté obteniendo 3395 en su lugar. Es decir, está utilizando el elipsoide wgs84 en lugar de una esfera wgs84. Eso debería seguir funcionando en el viaje de ida y vuelta, sólo te da coordenadas 3857 malas, así que hay algo más profundo.

1 votos

No estás solo con este problema: github.com/Proj4J/proj4j/issues/5 y github.com/Proj4J/proj4j/issues/3 . Puede intentar github.com/dwins/proj4j en su lugar.

2voto

GreyCat Puntos 146

Tienes un problema con tu código, porque en Python con pyproj (interfaz de python para la biblioteca PROJ4)

from pyproj import Proj, transform
inProj  = Proj("+init=EPSG:31469")
outProj = Proj("+init=EPSG:3857")
x1,y1 =  (5439627.33,5661628.09)
x2,y2 =transform(inProj,outProj,x1,y1)
x3,y3 =  transform(outProj,inProj,x2,y2)
print x1,y1
5439627.33 5661628.09
print x2,y2
1573657.37085 6636624.40597
print x3,y3
5439627.33052 5661628.09049

El núcleo de la biblioteca OSGEO Proj4J es un puerto del PROJ.4 La biblioteca C y se especifica que:

Estado: Actualmente esta biblioteca está todavía en proceso de creación, y aún no está lista para su descarga

Hay una lista de correo Los archivos de Proj4j y el último post es de Marte 2016 (para el usuario30184)

1voto

PsychoCoder Puntos 3150

¡Gracias a AndreJ! El fork de proj4j en https://github.com/dwins/proj4j funciona precisamente en EPSG:3857

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X