这是一个基本的gps应用程序,我从这个格式28“41'44.13597中获取图片元数据的纬度信息。
我需要将相同的信息转换为十进制,out将以十进制格式显示数据,如28.705450。
请通过代码或任何参考帮助
提前致谢
答案 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
}