Java 如何将Exif long/lat转换为实际值?
我试图从我的一些图片中获取Exif数据,这些是我正在接收的纬度和经度值。有人能帮我一下,告诉我这些数字是什么意思吗 调试/纬度=30/1,12/1,34/1(7588):纬度 调试/长=81/1,22/1,41/1(7588):经度Java 如何将Exif long/lat转换为实际值?,java,android,geolocation,latitude-longitude,exif,Java,Android,Geolocation,Latitude Longitude,Exif,我试图从我的一些图片中获取Exif数据,这些是我正在接收的纬度和经度值。有人能帮我一下,告诉我这些数字是什么意思吗 调试/纬度=30/1,12/1,34/1(7588):纬度 调试/长=81/1,22/1,41/1(7588):经度 提前谢谢。我本来打算为这类东西编写一个转换器,但结果证明答案是正确的 以防链路断开: public class geoDegree { private boolean valid = false; Double Latitude, Longitude; geoDe
提前谢谢。我本来打算为这类东西编写一个转换器,但结果证明答案是正确的 以防链路断开:
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);
}
}
我尝试过这个,它转换了,但结果似乎总是在我预期的西南50英尺左右。还有其他人发现了吗?@Craig-用于Lat和Long的原始代码
float
(单精度),不够精确-float
仅适用于约7位精度。我将其修改为double
。是的,您应该将其更改为double,加上getLongitudeE6也是错误的(如果我错了,请纠正我),如果您返回double而不是float,则不应该将其乘以1000000