无法将 gps 位置写入 exif

Posted

技术标签:

【中文标题】无法将 gps 位置写入 exif【英文标题】:Unable to write gps location to exif 【发布时间】:2012-11-15 07:59:55 【问题描述】:

我有一个使用 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】:

你可以试试这个:

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 度

【讨论】:

以上是关于无法将 gps 位置写入 exif的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android中将exif数据写入图像?

Java获取照片的Exif信息,并解析GPS

使用C ++修改EXIF数据

使用 C++ 修改 EXIF 数据

web获取照片EXIF信息(例如:拍照方向相机设备型号拍摄时间ISO 感光度GPS 地理位置等数据)

web获取照片EXIF信息(例如:拍照方向相机设备型号拍摄时间ISO 感光度GPS 地理位置等数据)