Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在我的应用程序中获取SD卡中图像的经纬度?_Android_Gps - Fatal编程技术网

Android 如何在我的应用程序中获取SD卡中图像的经纬度?

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

从我的应用程序,我可以打开画廊。有没有办法将gallery中任何选定图像的纬度和经度获取到我的应用程序中?

您应该使用类从图像中读取各种EXIF元数据:

例如:

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:编辑了我的答案,你可以查看。让我知道它是否适合你。