Android 如何在我的应用程序中获取SD卡中图像的经纬度?
从我的应用程序,我可以打开画廊。有没有办法将gallery中任何选定图像的纬度和经度获取到我的应用程序中?您应该使用类从图像中读取各种EXIF元数据: 例如:Android 如何在我的应用程序中获取SD卡中图像的经纬度?,android,gps,Android,Gps,从我的应用程序,我可以打开画廊。有没有办法将gallery中任何选定图像的纬度和经度获取到我的应用程序中?您应该使用类从图像中读取各种EXIF元数据: 例如: ExifInterface exif = new ExifInterface(filepath); exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE); exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF); exif.getAttrib
ExifInterface exif = new ExifInterface(filepath);
exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE);
exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF);
exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE);
exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF);
编辑:
现在,您将得到如下格式的lat长
lat=30/1,12/1,34/1,
长=81/1,22/1,41/1
将其转化为真正的价值观对我很有帮助
我们需要从度、分、秒形式转换到地点形式
通过下面的方法你可以做到
String LATITUDE = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE);
String LATITUDE_REF = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF);
String LONGITUDE = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE);
String LONGITUDE_REF = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF);
// your Final lat Long Values
Float Latitude, Longitude;
if((LATITUDE !=null)
&& (LATITUDE_REF !=null)
&& (LONGITUDE != null)
&& (LONGITUDE_REF !=null))
{
if(LATITUDE_REF.equals("N")){
Latitude = convertToDegree(LATITUDE);
}
else{
Latitude = 0 - convertToDegree(LATITUDE);
}
if(LONGITUDE_REF.equals("E")){
Longitude = convertToDegree(LONGITUDE);
}
else{
Longitude = 0 - convertToDegree(LONGITUDE);
}
}
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;
};
@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);
}
实际上,您可以使用“buildin”函数:
ExifInterface exif = new ExifInterface(path);
float[] latLong = new float[2];
boolean hasLatLong = exif.getLatLong(latLong)
if (hasLatLong) {
System.out.println("Latitude: " + latLong[0]);
System.out.println("Longitude: " + latLong[1]);
}
也许是新的,但我认为比公认的答案方便得多。exif.getLatLong(float[])现在已被弃用,您可以使用更好的方法返回一个双[]
:
ExifInterface exifInterface = new ExifInterface(file);
double[] latlng = exifInterface.getLatLong();
if (latlng != null) {
Double currentLatitude = latlng[0];
Double currentLongitude = latlng[1];
Log.d("Debug", "Exif : latitude: " + currentLatitude + ", longitude: " + currentLongitude)
}
快乐编码。你能告诉我什么是getExitTag…?@SREEJITH:噢,谢谢你指出这一点。实际上,我在这里使用了getExitTag(..)方法。但是编辑了我的答案。只需使用exif.getAttribute(TYPE);方法。我得到的值是10/1,16/1,3/1,而不是纬度。请告诉我为什么是这样this@SREEJITH:编辑了我的答案,你可以查看。让我知道它是否适合你。