Dalla mia domanda posso aprire gallery.Is Esiste un modo per ottenere latitudine e longitudine di qualsiasi immagine selezionata nella galleria per le mie idee application.Any si prega di aiuto me.Thanks in anticipoCome ottenere la latitudine e la longitudine di un'immagine in sdcard nella mia applicazione?
5
A
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);
}
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.
puoi dirmi cosa è getExitTag ...? – SREEJITH
@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. –
Ricevo un valore 10/1,16/1,3/1 invece di latitudine. – SREEJITH