java中如何将度分秒转换为十进制

java中如何将度分秒转换为十进制,java,Java,这是一个基本的gps应用程序,我从28“41'44.13597格式的图片元数据中获取纬度信息 我需要将相同的信息转换为十进制,输出将以十进制格式显示数据,如28.705450 请通过代码或任何参考资料提供帮助 提前感谢将分钟除以60。将秒除以3600。,然后将三者相加。我不知道有哪个java库可以为您这样做,但从度转换为十进制度的公式是: /** answer=hour+minutes/60+seconds/3600 */ public double convertHourToDecimal(S

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

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

请通过代码或任何参考资料提供帮助


提前感谢

将分钟除以
60。
将秒除以
3600。
,然后将三者相加。

我不知道有哪个java库可以为您这样做,但从度转换为十进制度的公式是:
/** 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;
}
学位+(分/60)+(秒/(60*60))

packagenewstract;
导入java.io.File;
导入java.util.Date;
导入com.drew.imaging.jpeg.jpeg MetadataReader;
导入com.drew.metadata.Directory;
导入com.drew.metadata.metadata;
导入com.drew.metadata.exif.ExifDirectory;
导入java.text.simpleDataFormat;
导入com.drew.metadata.exif.gps目录;
公共类GetTagInfo{
公共静态void main(字符串[]args)
{
System.out.println(“图片标记细节”);
试一试{
文件jpegFile=新文件(“DSC_0060.JPG”);
元数据元数据=JpegMetadataReader.readMetadata(JPEG文件);
目录exifDirectory=metadata.getDirectory(exifDirectory.class);
SimpleDataFormat sdf=新的SimpleDataFormat(“MM/dd/yyyy hh:MM:ss”);
Date myDate=exifDirectory.getDate(exifDirectory.TAG_DATETIME);
System.out.println(sdf.format(myDate));
SimpleDataFormat sdf1=新的SimpleDataFormat(“MM/dd/yyyy”);
Date myDate1=exifDirectory.getDate(exifDirectory.TAG_DATETIME);
System.out.println(sdf1.format(myDate1));
SimpleDataFormat sdf2=新的SimpleDataFormat(“hh:mm:ss”);
Date myDate3=exifDirectory.getDate(exifDirectory.TAG_DATETIME);
System.out.println(sdf2.format(myDate3));
目录gpsDirectory=metadata.getDirectory(gpsDirectory.class);
//布尔值b=(gpsDirectory.containsTag(gpsDirectory.TAG_GPS_lation));
//System.out.println(GpsDirectory.TAG\uGPS\uLatitude)+
字符串s=gpsDirectory.getDescription(2);
系统输出打印项次;
SplitString1 w=新的SplitString1();
w、 多伊特(s);
迭代器目录=metadata.getDirectoryIterator();
while(directories.hasNext()){
GpsDescriptor目录=(GpsDescriptor)目录。下一步();
System.out.print(directory.getgpslatiteddescription());
}
}//渔获物关闭
捕获(例外e){
System.err.println(e.getMessage());
//System.err.println(tag.getDirectoryName()+“”+tag.getTagName()+“(错误)”);
}
}
}
类SplitString1{
公共void doit(字符串lat){
字符串str=lat;
字符串[]temp=null;
字符串dtemp=null;
//temp=str.split(“[\”]\\“[\']”);
temp=str.split(“[\”]|[\']”);
dtemp=str.replace(“\”,“”);
System.out.println(“格式化DCM:+dtemp”);
转储(临时);
}
公共无效转储(字符串[]s){
对于(int i=0;i
如果要确保数据格式正确,程序是否应该检查以确保“遵循度数”和“遵循分钟数”?格式检查代码不起作用(68“62”65.9通过,但-82“30”0.失败)。谢谢。我将regexp简化为:“-?\\d+\\\”\\d{2}\\'\\d{1,2}.?\\d*”。另外,如果latRef=S或lngRef=W,请不要忘记乘以-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
}