Conversion de Coordenadas Geograficas a UTM

El por que de este programa es lo siguiente:
En la escuela estamos desarrollando un Robot que siga una ruta por GPS teniendo que convertir la latitud y longitud del GPS proporcionadas por el puerto serial RS232 a Coordenadas UTM("x,y"),había estado buscando haber si había códigos de programas que alguien hubiera hecho si existían pero tenias que apagar así que me decidí y hice el mío lo comparto con ustedes para mejoras al código y si quiere alguien le agregue un JTable para mostrar los detalles de la conversión.

 public void calculo() {
       
       
        BigDecimal a = new BigDecimal("6378388.0");
        BigDecimal b = new BigDecimal("6356911.946130");
       
        BigDecimal e1 = a.pow(2);
        BigDecimal e2 = b.pow(2);
        BigDecimal e3= e1.subtract(e2);
        BigDecimal e4= a.subtract(b);
       
       
        double excentricidad=Math.sqrt(e3.doubleValue())/a.doubleValue();
        double excentricidad2=Math.sqrt(e3.doubleValue())/b.doubleValue();
        double exp=Math.pow(Math.sqrt(e3.doubleValue())/b.doubleValue(),2);
        double c=Math.pow(a.doubleValue(),2)/b.doubleValue();
       
        /*double aplamiento=e4.doubleValue()/a.doubleValue();
        System.out.println(aplamiento);*/

       
        double logrados= Double.valueOf(jlogrados.getText());
        double lominutos= Double.valueOf(jlominutos.getText());
        double losegundos= Double.valueOf(jlosegundos.getText());
        String loposicion= jloposicion.getText();
       
        double lagrados= Double.valueOf(jlagrados.getText());
        double laminutos= Double.valueOf(jlaminutos.getText());
        double lasegundos= Double.valueOf(jlasegundos.getText());
        String laposicion= jlaposicion.getText();
       
       
        if(loposicion.equals("W")){
            lodecimales=-1*(logrados+lominutos/60+losegundos/60/60);
            loradianes=lodecimales*Math.PI/180;
        }
        else{
           lodecimales=logrados+lominutos/60+losegundos/60/60;
           loradianes=lodecimales*Math.PI/180;
        }
       
        if(laposicion.equals("S")){
           ladecimales=-1*(lagrados+laminutos/60+lasegundos/60/60);
           laradianes=ladecimales*Math.PI/180;
        }else{
           ladecimales=lagrados+laminutos/60+lasegundos/60/60;
           laradianes=ladecimales*Math.PI/180;
        }
       
        int huson=(int)Math.floor((lodecimales/6)+31);
        int meridianohuson=huson*6-183;
       
        double lambda=loradianes-((meridianohuson*Math.PI)/180);
        double A=Math.cos(laradianes)*Math.sin(lambda);
       
       
        BigDecimal e6= new BigDecimal(A);
        BigDecimal uno = new BigDecimal("1");
        BigDecimal e7= uno.subtract(e6);
        BigDecimal e8= uno.add(e6);
        double aux= e8.doubleValue()/e7.doubleValue();
        double xi=0.5*Math.log(aux);
       
       
       
        double ni=(c/(1+exp*Math.pow(Math.pow(Math.cos(laradianes),2),0.5))*0.9996);
        double zeta=(exp/2)*Math.pow(xi,2)*Math.pow(Math.cos(laradianes),2);
        double eta=Math.atan(Math.tan(laradianes)/Math.cos(lambda))-laradianes;
        double a1=Math.sin(2*laradianes);
        double a2=a1*Math.pow(Math.cos(laradianes),2);
        double j2=laradianes+(a1/2);
        double j4=((3*j2)+a2)/4;
        double j6=(5*j4+a2*Math.pow(Math.cos(laradianes),2))/3;
        double alfa=(0.75)*exp;
        double beta=(1.6666666)*Math.pow(alfa,2);
        double gamma=(1.2962962)*Math.pow(alfa,3);
        double bfi=0.9996*c*(laradianes-(alfa*j2)+(beta*j4)-(gamma*j6));

        X=xi*ni*(1+zeta/3)+500000;
       
        if(laposicion.equals("S")){
            Y=eta*ni*(1+zeta)+bfi+10000000;
        }
        else{
            Y=eta*ni*(1+zeta)+bfi;
        }
       
        System.out.println("Excentricidad:"+excentricidad);
        System.out.println("Excentricidad 2:"+excentricidad2);
        System.out.println("e:"+exp);
        System.out.println("Radio polar de Convatura C:"+c);
        System.out.println("Longitud Decimales:"+lodecimales);
        System.out.println("Logitud radianes:"+loradianes);
        System.out.println("Latiud Decimales:"+ladecimales);
        System.out.println("Latiud Radianes:"+laradianes);
        System.out.println("Eta:"+eta);
        System.out.println("A1:"+a1);
        System.out.println("A2:"+a2);
        System.out.println("J2:"+j2);
        System.out.println("J4:"+j4);
        System.out.println("J6:"+j6);
        System.out.println("Alfa:"+alfa);
        System.out.println("Beta:"+beta);
        System.out.println("Gamma:"+gamma);
        System.out.println("B(fi):"+bfi);
        System.out.println("Huson:"+huson);
        System.out.println("Meridiano Huson:"+meridianohuson);
        System.out.println("Lambda:"+lambda);
        System.out.println("A:"+A);
        System.out.println("Xi:"+xi);
        System.out.println("Ni:"+ni);
        System.out.println("Zeta:"+zeta);
       
        System.out.println("X->"+X);
        System.out.println("Y->"+Y);
        NumberFormat formatter = new DecimalFormat("#0.0000");
       
        jcoordenadax.setText(String.valueOf(formatter.format(X)));
        jcoordenaday.setText(String.valueOf(formatter.format(Y)));
}

Una Imagen del programa.

Uploaded with ImageShack.us

Saludos.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Estas seguro de que esta

Estas seguro de que esta correcto tu codigo, por que haciendo unas modificaciones y con tus mismos datos a mi me muestra otra solucion:

        try {
            GlobalPositioningSystem globalPositioningSystem = new GlobalPositioningSystem();
            globalPositioningSystem.setLatitude(new GeographicCoordinate(new DegreeSexagesimalSystem(3, 48, 6.7439), GeographicCoordinate.WEST));
            globalPositioningSystem.setLongitude(new GeographicCoordinate(new DegreeSexagesimalSystem(43, 29, 18.267), GeographicCoordinate.NORTH));
            UniversalTransverseMercator universalTransverseMercator = SystemConverter.toUniversalTransverseMercator(globalPositioningSystem);
            System.out.println("x: " + universalTransverseMercator.getX() + " y: " + universalTransverseMercator.getY());
        } catch (GeographicCoordinateException ex) {
            Logger.getLogger(BasicTest.class.getName()).log(Level.SEVERE, null, ex);
        }

Salida: x: 332704.43019324896 y: 420378.36405425076

Este es el codigo fuente: https://github.com/luischavez/JPS
Lo comprobe mediante esta pagina: http://home.hiwaay.net/~taylorc/toolbox/geography/geoutm.html

Corrigo esta bien tu codigo,

Corrijo esta bien tu codigo, yo pase mal los datos:

        try {
            GlobalPositioningSystem globalPositioningSystem = new GlobalPositioningSystem();
            globalPositioningSystem.setLongitude(new GeographicCoordinate(new DegreeSexagesimalSystem(3, 48, 6.7439), GeographicCoordinate.WEST));
            globalPositioningSystem.setLatitude(new GeographicCoordinate(new DegreeSexagesimalSystem(43, 29, 18.267), GeographicCoordinate.NORTH));
            UniversalTransverseMercator universalTransverseMercator = SystemConverter.toUniversalTransverseMercator(globalPositioningSystem);
            System.out.println("x: " + universalTransverseMercator.getX() + " y: " + universalTransverseMercator.getY());
        } catch (GeographicCoordinateException ex) {
            Logger.getLogger(BasicTest.class.getName()).log(Level.SEVERE, null, ex);
        }

Salida: x: 435359.59753561515 y: 4815452.653912209