如何将Exif long / lat转换为实际值? [英] How do I convert Exif long/lat to real values?

查看:166
本文介绍了如何将Exif long / lat转换为实际值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图从我的一些照片中获取Exif数据,这些数据是我收到的纬度和经度值。有人可以帮助我,告诉我这些数字是什么意思?

DEBUG / lat = 30 / 1,12 / 1,34 / 1(7588):lattitude > b
$ b DEBUG / long = 81 / 1,22 / 1,41 / 1(7588):经度

提前。

解决方案

我打算为这个和东西写一个转换器,但事实证明了答案已经在此博客中



以防万一链接失效:

  public class geoDegree {
private boolean valid = false;
双纬度,经度;
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);如果((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 double 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));

返回结果;


};

public boolean isValid()
{
return valid;

$ b @Override
public String toString(){
// TODO自动生成的方法存根
return(String.valueOf(Latitude)
+,
+ String.valueOf(Longitude));


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

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

}


I am trying to get the Exif data from some of my pictures and these are the latitude and longitude values that I am receiving. Can someone help me out and tell me what these numbers mean?

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

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

thanks in advance.

解决方案

I was going to write a converter for this and stuff, but it turns out the answer is already in this blog

Just in case if the link goes dead:

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 Double 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);
}

}

这篇关于如何将Exif long / lat转换为实际值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆