无法将gps位置写入exif

时间:2012-11-27 16:25:36

标签: android gps latitude-longitude exif

我有一个应用程序,它使用LocationManager获取用户的位置,并尝试将该数据写入图像的Exif数据。由于某种原因,值永远不会被写入,并且位置保持为空。这是我写入Exif并转换纬度和经度的函数:

 public void geoTag(String filename){
    ExifInterface exif;

    try {
        exif = new ExifInterface(filename);
        int num1Lat = (int)Math.floor(latitude);
        int num2Lat = (int)Math.floor((latitude - num1Lat) * 60);
        double num3Lat = (latitude - ((double)num1Lat+((double)num2Lat/60))) * 3600000;

        int num1Lon = (int)Math.floor(longitude);
        int num2Lon = (int)Math.floor((longitude - num1Lon) * 60);
        double num3Lon = (longitude - ((double)num1Lon+((double)num2Lon/60))) * 3600000;

        exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, /*num1Lat+"/1,"+num2Lat+"/1,"+num3Lat+"/1000"*/);
        exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, num1Lon+"/1,"+num2Lon+"/1,"+num3Lon+"/1000");


        if (latitude > 0) {
            exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, "N"); 
        } else {
            exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, "S");
        }

        if (longitude > 0) {
            exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, "E");    
        } else {
        exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, "W");
        }

        exif.saveAttributes();
    } catch (IOException e) {
        Log.e("PictureActivity", e.getLocalizedMessage());
    } 

    }

在我目前的位置,纬度和经度值约为40.42和-81.92

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

int num1Lat = (int)Math.floor(latitude);
int num2Lat = (int)Math.floor((latitude - num1Lat) * 60);
int num3Lat = (int)Math.floor((latitude - num1Lat - ((double)num2Lat)/60) * 3600);

int num1Lon = (int)Math.floor(longitude);
int num2Lon = (int)Math.floor((longitude - num1Lon) * 60);
int num3Lon = (int)Math.floor((longitude - num1Lon - ((double)num2Lon)/60) * 3600);

exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, num1Lat+"/1,"+num2Lat+"/1,"+num3Lat+"/1");
exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, num1Lon+"/1,"+num2Lon+"/1,"+num3Lon+"/1");

这段代码对我有用。例如,我的一个EXIF标签(纬度)显示" 37 / 1,53 / 1,42 / 1",相当于37.895度