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

时间:2013-03-14 07:50:37

标签: android gps

从我的应用程序中我可以打开图库。有没有办法将图库中任何选定图像的纬度和经度输入我的应用程序?

2 个答案:

答案 0 :(得分:10)

您应该使用ExifInterface课程来阅读图片中的各种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-long。

lat = 30 / 1,12 / 1,34 / 1, 长= 81 / 1,22 / 1,41 / 1

将此转换为真实值this Blog帮助我。

我们需要从度,分,秒形式转换为GeoPoint形式。

通过以下方式你可以做到。

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

答案 1 :(得分:7)

您实际上可以使用“buildin”功能:

DELETE FROM joinTable WHERE EID NOT IN (SELECT eid FROM employee)

也许是新事物,但我认为比接受的答案更方便。