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