androidlatitude-longitudeutm

How to find UTM zone using current latitude and longitude in android?


how to find UTM zone and Easting/Northing using lat/long in android. i tried to google it for android but i couldn't find any solution.

so please help me here and if you have any sample code than please let me know. Or provide me any formula to convert lat/long to UTM and easting and northing.

thanks in advance


Solution

  • You also see that answer for get time utm as you want

     demo(36.7783,-119.4175);
    

    demo function

      private void demo(double Lat, double Lon)
            {
                Zone= (int) Math.floor(Lon/6+31);
    
                System.out.println("Zone"+Zone);
                if (Lat<-72)
                    Letter='C';
                else if (Lat<-64)
                    Letter='D';
                else if (Lat<-56)
                    Letter='E';
                else if (Lat<-48)
                    Letter='F';
                else if (Lat<-40)
                    Letter='G';
                else if (Lat<-32)
                    Letter='H';
                else if (Lat<-24)
                    Letter='J';
                else if (Lat<-16)
                    Letter='K';
                else if (Lat<-8)
                    Letter='L';
                else if (Lat<0)
                    Letter='M';
                else if (Lat<8)
                    Letter='N';
                else if (Lat<16)
                    Letter='P';
                else if (Lat<24)
                    Letter='Q';
                else if (Lat<32)
                    Letter='R';
                else if (Lat<40)
                    Letter='S';
                else if (Lat<48)
                    Letter='T';
                else if (Lat<56)
                    Letter='U';
                else if (Lat<64)
                    Letter='V';
                else if (Lat<72)
                    Letter='W';
                else
                    Letter='X';
                Easting=0.5*Math.log((1+Math.cos(Lat*Math.PI/180)*Math.sin(Lon*Math.PI/180-(6*Zone-183)*Math.PI/180))/(1-Math.cos(Lat*Math.PI/180)*Math.sin(Lon*Math.PI/180-(6*Zone-183)*Math.PI/180)))*0.9996*6399593.62/Math.pow((1+Math.pow(0.0820944379, 2)*Math.pow(Math.cos(Lat*Math.PI/180), 2)), 0.5)*(1+ Math.pow(0.0820944379,2)/2*Math.pow((0.5*Math.log((1+Math.cos(Lat*Math.PI/180)*Math.sin(Lon*Math.PI/180-(6*Zone-183)*Math.PI/180))/(1-Math.cos(Lat*Math.PI/180)*Math.sin(Lon*Math.PI/180-(6*Zone-183)*Math.PI/180)))),2)*Math.pow(Math.cos(Lat*Math.PI/180),2)/3)+500000;
                Easting=Math.round(Easting*100)*0.01;
    
    
                System.out.println("Easting"+Easting);
                Northing = (Math.atan(Math.tan(Lat*Math.PI/180)/Math.cos((Lon*Math.PI/180-(6*Zone -183)*Math.PI/180)))-Lat*Math.PI/180)*0.9996*6399593.625/Math.sqrt(1+0.006739496742*Math.pow(Math.cos(Lat*Math.PI/180),2))*(1+0.006739496742/2*Math.pow(0.5*Math.log((1+Math.cos(Lat*Math.PI/180)*Math.sin((Lon*Math.PI/180-(6*Zone -183)*Math.PI/180)))/(1-Math.cos(Lat*Math.PI/180)*Math.sin((Lon*Math.PI/180-(6*Zone -183)*Math.PI/180)))),2)*Math.pow(Math.cos(Lat*Math.PI/180),2))+0.9996*6399593.625*(Lat*Math.PI/180-0.005054622556*(Lat*Math.PI/180+Math.sin(2*Lat*Math.PI/180)/2)+4.258201531e-05*(3*(Lat*Math.PI/180+Math.sin(2*Lat*Math.PI/180)/2)+Math.sin(2*Lat*Math.PI/180)*Math.pow(Math.cos(Lat*Math.PI/180),2))/4-1.674057895e-07*(5*(3*(Lat*Math.PI/180+Math.sin(2*Lat*Math.PI/180)/2)+Math.sin(2*Lat*Math.PI/180)*Math.pow(Math.cos(Lat*Math.PI/180),2))/4+Math.sin(2*Lat*Math.PI/180)*Math.pow(Math.cos(Lat*Math.PI/180),2)*Math.pow(Math.cos(Lat*Math.PI/180),2))/3);
                if (Letter<'M')
                    Northing = Northing + 10000000;
    
    
                Northing=Math.round(Northing*100)*0.01;
                System.out.println("Northing"+Northing);
    
    
            }
    

    as our discussion you need to convert to utm as calfornia lat long.... Please see this link for lat long take like that.... and do this...

    https://gis.stackexchange.com/questions/120083/converting-a-california-coordinate-system-zone-6-value

    I bet those values are US survey feet, and based on the document, also on NAD 1927, not NAD 1983.

    The app you're using is using the NAD 1983 definitions of the State Plane zones. The parameters are different, so you're not going to be able to convert NAD 1927 coordinates using it.

    If I convert the given values (cropping to integers) using the NAD 1927 definition, I get

    longitude = -116.591154 latitude = 33.0709033

    Please view this Link also......

    Java, convert lat/lon to UTM

    double utmZoneCenterLongitude = ...  // Center lon of zone, example: zone 10 = -123
    int zoneNumber = ...                 // zone number, example: 10
    double latitude, longitude = ...     // lat, lon in degrees
    
    MathTransformFactory mtFactory = ReferencingFactoryFinder.getMathTransformFactory(null);
    ReferencingFactoryContainer factories = new ReferencingFactoryContainer(null);
    
    GeographicCRS geoCRS = org.geotools.referencing.crs.DefaultGeographicCRS.WGS84;
    CartesianCS cartCS = org.geotools.referencing.cs.DefaultCartesianCS.GENERIC_2D;
    
    ParameterValueGroup parameters = mtFactory.getDefaultParameters("Transverse_Mercator");
    parameters.parameter("central_meridian").setValue(utmZoneCenterLongitude);
    parameters.parameter("latitude_of_origin").setValue(0.0);
    parameters.parameter("scale_factor").setValue(0.9996);
    parameters.parameter("false_easting").setValue(500000.0);
    parameters.parameter("false_northing").setValue(0.0);
    
    Map properties = Collections.singletonMap("name", "WGS 84 / UTM Zone " + zoneNumber);
    ProjectedCRS projCRS = factories.createProjectedCRS(properties, geoCRS, null, parameters, cartCS);
    
    MathTransform transform = CRS.findMathTransform(geoCRS, projCRS);
    
    double[] dest = new double[2];
    transform.transform(new double[] {longitude, latitude}, 0, dest, 0, 1);
    
    int easting = (int)Math.round(dest[0]);
    int northing = (int)Math.round(dest[1]);