2013-03-14 12 views

risposta

9

si dovrebbe andare con ExifInterface classe a leggere vari metadati EXIF ​​dalle immagini:

Esempio:

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

Modificato:

Ora Qui g et lat-long come sotto format.

Lat = 30/1,12/1,34/1, lungo = 81/1,22/1,41/1

per convertire questo in valori reali this Blog mi ha aiutato.

abbiamo bisogno di fare la conversione da gradi, minuti, secondo modulo al modulo GeoPoint.

In basso puoi farlo.

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

puoi dirmi cosa è getExitTag ...? – SREEJITH

+1

@SREEJITH: Oh.grazie per averlo fatto notare. In realtà ho usato il metodo getExitTag (..) qui. ma ha modificato la mia risposta. devi solo usare exif.getAttribute (TYPE); Metodo. –

+0

Ricevo un valore 10/1,16/1,3/1 invece di latitudine. – SREEJITH

5

si può effettivamente utilizzare una funzione "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]); 
} 

Forse è qualcosa di nuovo, ma penso che è molto più conveniente che la risposta accettata.

Problemi correlati