java - 如何将 Exif long/lat 转换为实际值?

标签 java android geolocation latitude-longitude exif

我正在尝试从我的一些图片中获取 Exif 数据,这些是我收到的纬度和经度值。谁能帮我告诉我这些数字是什么意思?

DEBUG/lat = 30/1,12/1,34/1 (7588) : 纬度

DEBUG/long = 81/1,22/1,41/1 (7588) : 经度

提前致谢。

最佳答案

我打算为此编写一个转换器,但结果是答案 is already in this blog

以防万一链接失效:

public class geoDegree {
private boolean valid = false;
Double Latitude, Longitude; 
geoDegree(ExifInterface exif) {
 String attrLATITUDE = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE);
 String attrLATITUDE_REF = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF);
 String attrLONGITUDE = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE);
 String attrLONGITUDE_REF = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF);

 if((attrLATITUDE !=null)
   && (attrLATITUDE_REF !=null)
   && (attrLONGITUDE != null)
   && (attrLONGITUDE_REF !=null))
 {
  valid = true;

  if(attrLATITUDE_REF.equals("N")){
   Latitude = convertToDegree(attrLATITUDE);
  }
  else{
   Latitude = 0 - convertToDegree(attrLATITUDE);
  }

  if(attrLONGITUDE_REF.equals("E")){
   Longitude = convertToDegree(attrLONGITUDE);
  }
  else{
   Longitude = 0 - convertToDegree(attrLONGITUDE);
  }

 }
};

private Float convertToDegree(String stringDMS){
 Float result = null;
 String[] DMS = stringDMS.split(",", 3);

 String[] stringD = DMS[0].split("/", 2);
    Double D0 = new Double(stringD[0]);
    Double D1 = new Double(stringD[1]);
    Double FloatD = D0/D1;

 String[] stringM = DMS[1].split("/", 2);
 Double M0 = new Double(stringM[0]);
 Double M1 = new Double(stringM[1]);
 Double FloatM = M0/M1;

 String[] stringS = DMS[2].split("/", 2);
 Double S0 = new Double(stringS[0]);
 Double S1 = new Double(stringS[1]);
 Double FloatS = S0/S1;

    result = new Float(FloatD + (FloatM/60) + (FloatS/3600));

 return result;


};

public boolean isValid()
{
 return valid;
}

@Override
public String toString() {
 // TODO Auto-generated method stub
 return (String.valueOf(Latitude)
   + ", "
   + String.valueOf(Longitude));
}

public int getLatitudeE6(){
 return (int)(Latitude*1000000);
}

public int getLongitudeE6(){
 return (int)(Longitude*1000000);
}

}

关于java - 如何将 Exif long/lat 转换为实际值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5269462/

相关文章:

Java : which of these two methods is more efficient?

android - gradle依赖关系报告不显示jar文件

algorithm - 地理位置 - 如何检查 2 个圆圈是否重叠

来自位置/地区的 Android 地理点

Java Opengl 3D 渲染

java - 使用 map 集合 hibernate 多对多

java - Spring基于java的配置中非公共(public)类的使用

java - Android Multitouch - 确定举起哪个手指?

安卓内部

javascript - 从 jQuery GET JSON 响应字符串获取单个值