2013-03-14 9 views

Odpowiedz

9

warto przejść z klasy do zapoznania ExifInterface różne metadane EXIF ​​z obrazów:

Przykład:

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

Zmieniano:

teraz Tutaj g i długie jak w formacie Below.

lat = 30/1,12/1,34/1, długo = 81/1,22/1,41/1

konwertować to do wartości rzeczywistych this Blog pomógł mi.

Musimy wykonać konwersję z stopnia, minuty, drugiego formularza do formularza GeoPoint.

W ten sposób można to zrobić.

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

czy możesz mi powiedzieć, co to jest getExitTag ...? – SREEJITH

+1

@ SREEJITH: Och, za to, że to wskazałem. Właściwie użyłem metody getExitTag (..) tutaj. ale Edytowałem moją odpowiedź. wystarczy użyć exif.getAttribute (TYPE); Metoda. –

+0

Otrzymuję wartość 10/1,16/1,3/1 zamiast szerokości geograficznej. – SREEJITH

5

Rzeczywiście można użyć funkcji „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]); 
} 

Może to coś nowego, ale myślę, że jest o wiele wygodniejsze niż akceptowanych odpowiedź.

Powiązane problemy