2010-05-06 15 views
6

Questo è un GPS fondamentalmente applicazione in cui sto ottenendo le informazioni di latitudine dai metadati di una foto in questo formato 28" 41'44.13597.Come convertire minuti di laurea secondo in decimale in java

La mia necessità è quella di convertire le stesse informazioni in decimale e il fuori mostrerà i dati in formato decimale come 28,705,45 mila.

si prega di aiutare con il codice o qualsiasi riferimento

Grazie in anticipo

risposta

6
/** answer=hour+minutes/60+seconds/3600 */ 
public double convertHourToDecimal(String degree) { 
    if(!degree.matches("(-)?[0-6][0-9]\"[0-6][0-9]\'[0-6][0-9](.[0-9]{1,5})?") 
     throw new IllegalArgumentException(); 
    String[] strArray=degree.split("[\"']"); 
    return Double.parseDouble(strArray[0])+Double.parseDouble(strArray[1])/60+Double.parseDouble(strArray[2])/3600; 
} 
+0

Se si desidera assicurarsi che i dati siano formattati correttamente, il programma non deve verificare che "segua i gradi e" segua i minuti? – LandonSchropp

+0

@helixed, codice di controllo formato aggiunto – TiansHUo

+0

Il codice di controllo formato non funziona (68 "62'65.9 passaggi, ma -82" 30'0. Fallisce) –

6

Dividere i minuti di 60. e i secondi di 3600., quindi aggiungere i tre insieme.

5

Non so di qualsiasi libreria Java che farà questo per voi, ma la formula per la conversione da gradi in gradi decimali è: gradi + (minuti/60) + (secondi/(60 * 60))

-1
package newstract; 

import java.io.File; 
import java.util.Date; 
import com.drew.imaging.jpeg.JpegMetadataReader; 
import com.drew.metadata.Directory; 
import com.drew.metadata.Metadata; 
import com.drew.metadata.exif.ExifDirectory; 
import java.text.SimpleDateFormat; 
import com.drew.metadata.exif.GpsDirectory; 

public class GetTagInfo { 
    public static void main(String[] args) 
    { 
     System.out.println("Picture Tagged Details"); 
     try{ 
     File jpegFile = new File("DSC_0060.JPG"); 
     Metadata metadata = JpegMetadataReader.readMetadata(jpegFile); 
     Directory exifDirectory = metadata.getDirectory(ExifDirectory.class); 
     SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss"); 
     Date myDate = exifDirectory.getDate(ExifDirectory.TAG_DATETIME); 
     System.out.println(sdf.format(myDate)); 
     SimpleDateFormat sdf1 = new SimpleDateFormat("MM/dd/yyyy"); 
     Date myDate1 = exifDirectory.getDate(ExifDirectory.TAG_DATETIME); 
     System.out.println(sdf1.format(myDate1)); 
     SimpleDateFormat sdf2 = new SimpleDateFormat("hh:mm:ss"); 
     Date myDate3 = exifDirectory.getDate(ExifDirectory.TAG_DATETIME); 
     System.out.println(sdf2.format(myDate3)); 


     Directory gpsDirectory = metadata.getDirectory(GpsDirectory.class); 
     // Boolean b = (gpsDirectory.containsTag(GpsDirectory.TAG_GPS_LATITUDE)); 
     // System.out.println(GpsDirectory.TAG_GPS_LATITUDE);+ 
     String s = gpsDirectory.getDescription(2); 
     System.out.println(s); 
     SplitString1 w = new SplitString1(); 
     w.doit(s); 



     Iterator directories = metadata.getDirectoryIterator(); 
     while (directories.hasNext()) { 
     GpsDescriptor directory = (GpsDescriptor) directories.next(); 
     System.out.print(directory.getGpsLatitudeDescription()); 
     } 

     } // close of catch 
     catch (Exception e) { 
      System.err.println(e.getMessage()); 
      //System.err.println(tag.getDirectoryName() + " " + tag.getTagName() + " (error)"); 
     } 

} 

} 

class SplitString1 { 

    public void doit(String lat) { 

     String str = lat; 
     String [] temp = null; 
     String dtemp = null; 
     //temp = str.split("[\"]|\"[\']"); 
     temp = str.split("[\"]|[\']"); 
     dtemp = str.replace("\"", "°"); 
     System.out.println("Formated DCM : "+dtemp); 
     dump(temp); 


    } 

    public void dump(String []s) { 
     for (int i = 0 ; i < s.length ; i++) { 
      System.out.println("\ndegree : "+s[0]); 
      System.out.println("\nminutes : "+s[1]); 
      System.out.println("\nsecond : "+s[2]); 

      String deg = s[0] ; 
      int ndeg = Integer.parseInt(deg); 
      String min = s[1] ; 
      double nmin = Double.parseDouble(min); 
      String sec = s[2] ; 
      double nsec = Double.parseDouble(sec); 
      double decimaldms = (ndeg+(nmin/60)+(nsec/3600)); 
      System.out.println("\nfinaldecimal : "+decimaldms); 
     } 
    } 

    // Decimal degrees = whole number of degrees, plus minutes divided by 60, 
    //plus seconds divided by 3600 
} 
Problemi correlati