2012-07-25 12 views
7

Vorrei aggiungere i dati GPS come longitudine e latitudine nella foto jpeg. La foto viene catturata inserendo la scheda (NFC) Nel logcat è possibile visualizzare i valori corretti ma questi valori non possono essere scritti nel file di foto jpg!Android scrivere EXIF ​​GPS Latitudine e Longitudine su JPEG non riuscito

Qui di seguito è il mio codice: E 'usato per prendere i file jpg salvati e chiamare il metodo seguito Il metodo è utilizzato per aggiungere parametri EXIF ​​GPS in jpg I parametri GPS come la longitudine e la latitudine sono già occupati in un altro attività.

Io uso EXIF ​​Viewer in Firefox per vedere il risultato.

La posizione per l'eccezione I/O è importante?

Quello che segue è l'importante log gatto log che può rendere il fallimento: novembre 07-26: 48: 30,386: D/NativeNfcTag (195): Tag perso, il riavvio del ciclo di polling

public static void writeFile (File photo, double latitude, double longitude) throws IOException{ 


    ExifInterface exif = null; 

    try{ 
     Log.v("latiDouble", ""+latitude); 
     Log.v("longiDouble", ""+longitude); 
     exif = new ExifInterface(photo.getCanonicalPath()); 
     if (exif != null) { 
     double latitu = latitude; 
     double longitu = longitude; 
     double alat = Math.abs(latitu); 
     double along = Math.abs(longitu); 
     String stringLati = convertDoubleIntoDegree(alat); 
     String stringLongi = convertDoubleIntoDegree(along); 
     exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, stringLati);    
     exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, stringLongi); 
     Log.v("latiString", ""+ stringLati); 
     Log.v("longiString", ""+ stringLongi); 
     exif.saveAttributes(); 
     String lati = exif.getAttribute (ExifInterface.TAG_GPS_LATITUDE); 
     String longi = exif.getAttribute (ExifInterface.TAG_GPS_LONGITUDE); 
     Log.v("latiResult", ""+ lati); 
     Log.v("longiResult", ""+ longi); 

     } 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 

    } 

} 

Il sotto è il grado di chiamare il metodo ...

Cursor locationCursor = dbHandler.fetchGpsLocationTypeByAttendInfoID(attendInfoId); 
     if (locationCursor.getCount()>0) { 
     double latitude = dbHandler.fetchDoubleItem(locationCursor,"LATITUDE"); 
     double longitude = dbHandler.fetchDoubleItem(locationCursor,"LONGITUDE"); 


      Log.v("latitude",""+latitude); 
      Log.v("latitude",""+longitude);  

      try { 
       GpsUtils.writeFile(photoFile, latitude, longitude); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

    } 
    dbHandler.close(); 

    cameraHandler.startPreview(); 
+0

Avremo probabilmente bisogno di maggiori informazioni su ciò che il codice fa (passando attraverso di esso e spiegare ciò che ogni linea non potrebbe condurvi ad una soluzione, anche) e ogni ricerca Ho già fatto per la domanda. Ad esempio, se ottieni un'eccezione, qual è l'eccezione? Fondamentalmente, se è qualcosa che pensi possa aiutare qualcuno a rispondere alla domanda, sarebbe fantastico aggiungerla. – nil

+0

Quello che ho visto è che il set di parametri è valido e può essere visualizzato dal logcat, ma comunque quando si aprono gli iamges da EXIF ​​Viewer di Firefox, non riesco a vedere nessun dato GPS scritto in questa immagine. –

risposta

12

Ok, ho lottato con questo per un lungo periodo di tempo, ma finalmente capito. L'ultima volta che ho usato questo codice ha funzionato:

ExifInterface exif = new ExifInterface(imgFile.getCanonicalPath()); 
       //String latitudeStr = "90/1,12/1,30/1"; 
       double lat = location.getLatitude(); 
       double alat = Math.abs(lat); 
       String dms = Location.convert(alat, Location.FORMAT_SECONDS); 
       String[] splits = dms.split(":"); 
       String[] secnds = (splits[2]).split("\\."); 
       String seconds; 
       if(secnds.length==0) 
       { 
        seconds = splits[2]; 
       } 
       else 
       { 
        seconds = secnds[0]; 
       } 

       String latitudeStr = splits[0] + "/1," + splits[1] + "/1," + seconds + "/1"; 
       exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, latitudeStr); 

       exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, lat>0?"N":"S"); 

       double lon = location.getLongitude(); 
       double alon = Math.abs(lon); 


       dms = Location.convert(alon, Location.FORMAT_SECONDS); 
       splits = dms.split(":"); 
       secnds = (splits[2]).split("\\."); 

       if(secnds.length==0) 
       { 
        seconds = splits[2]; 
       } 
       else 
       { 
        seconds = secnds[0]; 
       } 
       String longitudeStr = splits[0] + "/1," + splits[1] + "/1," + seconds + "/1"; 


       exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, longitudeStr); 
       exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, lon>0?"E":"W"); 

       exif.saveAttributes(); 

      } 
+0

Grazie. Lo proverò –

+0

Dove dovrebbe essere inserito IOexception? –

+0

Hai salvato nuovamente il file quando hai finito? Questo codice funziona per me e il visualizzatore EXIF ​​vede la posizione incorporata - l'ho appena testata. – Kaediil

Problemi correlati