2016-08-22 2 views
1

как найти зону UTM и Easting/Northing с использованием lat/long в android. Я пытался использовать его для Android, но я не смог найти решение.Как найти зону UTM с использованием текущей широты и долготы в android?

, пожалуйста, помогите мне здесь, и если у вас есть образец кода, чем пожалуйста, дайте мне знать. Или предложите мне любую формулу для преобразования lat/long в UTM и на восток и на север.

заранее спасибо

ответ

1

Вы также видите, что ответ на получить время UTM, как вы хотите

demo(36.7783,-119.4175); 

демонстрационная функция

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); 


     } 

как наше обсуждение вам нужно преобразовать в UTM, как Калифорния lat long .... Пожалуйста, посмотрите эту ссылку для lat long take like this .... и сделайте это ...

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

Держу пари, эти ценности США обозреть ноги, и на основании документа, а также на NAD 1927, а не 1983. NAD

приложение, которое вы используете, с помощью NAD 1983 определений State Plane зоны. Параметры разные, поэтому вы не сможете конвертировать координаты NAD 1927, используя это.

Если преобразовать данные значения (обрезку до целых чисел), используя определение NAD 1927, я получаю

долгота = -116,591154 широта = 33,0709033

Пожалуйста, просмотрите эту ссылку также ......

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]); 
+1

вы пробовали это? –

+1

попытался, но решение не найдено –

+1

получил ответ, благодарит за вашу ценную поддержку. –