2012-07-25 30 views
7

Enlem ve boylam gibi GPS verilerini jpeg fotoğrafına eklemek istiyorum. Fotoğraf, karta (NFC) sekerek yakalanıyor Fotoğraf defterinde doğru değerler görüntülenebilir ancak bu değerler jpg fotoğraf dosyasına yazılmaz! Aşağıda Android: EXIF ​​GPS Enlem ve Boylam JPEG üzerine yazdı Hata

benim kodudur: yöntem, enlem ve boylam olarak GPS parametreleri zaten başka alınır jpg içine EXIF ​​GPS parametreleri eklemek için kullanılır altına yöntemi kaydedilen jpg dosyaları alıp çağırmak için kullanılır aktivite.

Sonuçları görmek için Firefox'ta EXIF ​​Viewer kullanıyorum.

IO İstisnası'nın konumu önemli midir? 07-26 Kasım: 48: 30,386:

aşağıdaki yetmezliği kılabilecek önemli günlük kedi günlüğü D/NativeNfcTag (195): Etiket yoklama döngü yeniden başlatmadan, kayıp

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

    } 

} 
aşağıda

Tamam

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

Muhtemelen kodunuzu ne hakkında daha fazla bilgi gerekir ve herhangi bir araştırma size: Ben kullandım Son kez bu kod çalıştı zaten soru için yapılmış. Örneğin, bir istisna alırsanız, istisna nedir? Temel olarak, soruyu cevaplayan birisine yardımcı olabileceğini düşündüğünüz bir şey varsa, eklemek harika olur. – nil

+0

Gördüğüm, ayarlanan parametrelerin geçerli ve logcat'tan görüntülenebildiğidir, ancak Firefox EXIF ​​Viewer tarafından iamges açıldığında, bu resimde yazılan GPS verilerini göremiyorum. –

cevap

12

... yöntem aramaya pozisyondur, ben uzun zamandır bu mücadele ama sonunda anladım. (De bunun üzerinden atlama ve her satır çözüme daha yol açabilecek gelmez açıklayan)

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

Teşekkür ederim. Denerim –

+0

IOexception nerede yerleştirilmelidir? –

+0

İşiniz bittiğinde dosyayı yeniden kaydettiniz mi? Bu kod benim için çalışıyor ve EXIF ​​görüntüleyici gömülü konumu görüyor - Ben sadece test ettim. – Kaediil

İlgili konular