Thursday, January 21, 2010

Convert Exif GPS info to Degree format

In the previous exercise "Android File Explorer with JPG's Exif & Photo displayed", Exif, include GPS info, of a JPG will be retrieve and displayed.

In my own case; I have no digital camera with GPS, but I have a GPS logger. The GPS info can be added into JPG file using GPicSync. But it's in the format of degree, minute, second, not GeoPoint form, as I used in my Mapper exercise. So I have to convert it by myself.

Here I create a class geoDegree to handle the conversion from degree, minute, second form to GeoPoint form.

package com.AndroidExplorer;


public class geoDegree {
private boolean valid = false;
Float Latitude, Longitude;
geoDegree(ExifInterface exif){
String attrLATITUDE = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE);
String attrLATITUDE_REF = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF);
String attrLONGITUDE = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE);
String attrLONGITUDE_REF = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF);

if((attrLATITUDE !=null)
&& (attrLATITUDE_REF !=null)
&& (attrLONGITUDE != null)
&& (attrLONGITUDE_REF !=null))
valid = true;

Latitude = convertToDegree(attrLATITUDE);
Latitude = 0 - convertToDegree(attrLATITUDE);

Longitude = convertToDegree(attrLONGITUDE);
Longitude = 0 - convertToDegree(attrLONGITUDE);


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;


public boolean isValid()
return valid;

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


In a short comming, I will have a exercise to open a MapView locate the GPS location of a photo.


mahsanq said...

Its great thank you.

Abukaff said...

Thank you for the post. it helped me

Anonymous said...

Thanks for your post.It is very useful.