Как конвертировать минуты минуты градуса в десятичную в Java - PullRequest
6 голосов
/ 06 мая 2010

Это в основном приложение GPS, где я получаю информацию о широте из метаданных изображения в этом формате 28 "41'44.13597.

Мне нужно преобразовать ту же информацию в десятичную форму, и выход будет отображать данные в десятичном формате, например, 28.705450.

Пожалуйста, помогите через код или любые ссылки

Заранее спасибо

Ответы [ 4 ]

6 голосов
/ 06 мая 2010

Разделите минуты на 60. и секунды на 3600., затем сложите все три вместе.

6 голосов
/ 06 мая 2010
/** 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;
}
5 голосов
/ 06 мая 2010

Я не знаю ни одной java-библиотеки, которая бы сделала это за вас, но формула для преобразования из градусов в десятичные градусы: градус + (минуты / 60) + (секунды / (60 * 60))

0 голосов
/ 13 мая 2010
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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...