2012-07-25 9 views
7

मैं जेपीईजी फोटो में अक्षांश और अक्षांश जैसे जीपीएस डेटा जोड़ना चाहता हूं। फोटो को टैबबिंग करके पकड़ा जाता है (एनएफसी) लॉगकैट में सही मान प्रदर्शित किए जा सकते हैं लेकिन इन मानों को jpg फोटो फ़ाइल में नहीं लिखा जा सकता है!एंड्रॉइड लिखने जेपीईजी पर EXIF ​​जीपीएस अक्षांश और देशांतर

नीचे मेरी कोड है: यह बचाया jpg फ़ाइलें ले और नीचे विधि कॉल करने के विधि जेपीजी इस तरह के देशांतर और अक्षांश के रूप में जीपीएस मानकों को पहले से ही किसी अन्य रूप में लिया जाता है में EXIF ​​जीपीएस पैरामीटर जोड़ने के लिए प्रयोग किया जाता है प्रयोग किया जाता है गतिविधि।

मैं परिणाम देखने के लिए फ़ायरफ़ॉक्स में EXIF ​​व्यूअर का उपयोग करता हूं।

क्या आईओ अपवाद की स्थिति महत्वपूर्ण है? 07-26 नवम्बर:: 48: 30.386:

निम्नलिखित महत्वपूर्ण लॉग बिल्ली लॉग जो विफलता प्रस्तुत करना हो सकता है डी/NativeNfcTag (195): टैग खो दिया है, को पुन: प्रारंभ मतदान पाश

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

    } 

} 
नीचे

स्थिति विधि कॉल करने के लिए ... है

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

हम शायद क्या अपने कोड करता है के बारे में अधिक जानकारी की आवश्यकता होगी (यह माध्यम से कदम और क्या प्रत्येक पंक्ति की हल करने में हो सकती है समझा, भी) और आप किसी भी अनुसंधान प्रश्न के लिए पहले ही कर चुके हैं। उदाहरण के लिए, यदि आपको अपवाद मिलता है, तो अपवाद क्या है? असल में, अगर ऐसा कुछ है जो आपको लगता है कि किसी को प्रश्न का उत्तर देने में मदद मिल सकती है, तो इसे जोड़ना बहुत अच्छा होगा। – nil

+0

मैंने जो देखा है वह यह है कि पैरामीटर सेट वैध है और लॉगकैट से प्रदर्शित होने में सक्षम है, लेकिन फ़ायरफ़ॉक्स के EXIF ​​व्यूअर द्वारा iamges खोलते समय, मुझे इस तस्वीर में लिखा कोई भी GPS डेटा नहीं दिखाई दे रहा है। –

उत्तर

12

ठीक है, मैं एक लंबे समय के लिए इस के साथ संघर्ष किया लेकिन अंत में यह मिल गया। पिछली बार मैंने यह प्रयोग किया जाता इस कोड काम किया:

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

धन्यवाद। मैं इसे –

+0

कोशिश करूंगा जहां IOexception रखा जाना चाहिए? –

+0

क्या आप फ़ाइल पूरा करते समय फ़ाइल को सहेज चुके थे? यह कोड मेरे लिए काम करता है और EXIF ​​दर्शक एम्बेडेड स्थिति देखता है - मैंने अभी इसका परीक्षण किया है। – Kaediil

संबंधित मुद्दे