如何在java中将度数分钟转换为十进制

时间:2010-05-06 07:58:21

标签: java

这是一个基本的gps应用程序,我从这个格式28“41'44.13597中获取图片元数据的纬度信息。

我需要将相同的信息转换为十进制,out将以十进制格式显示数据,如28.705450。

请通过代码或任何参考帮助

提前致谢

4 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:6)

将分钟数除以60.,将秒数除以3600.,然后将三者加在一起。

答案 2 :(得分:5)

我不知道任何会为你做这个的java库,但是从度数转换为十进制度的公式是: 度+(分/ 60)+(秒/(60 * 60))

答案 3 :(得分:-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
}