am c5505f6a: Merge "Improved conversion accuracy of exif geotag data"

* commit 'c5505f6a150db8232cc275bedd400f7f5a593530':
  Improved conversion accuracy of exif geotag data
This commit is contained in:
Conley Owens
2011-04-29 10:20:34 -07:00
committed by Android Git Automerger

View File

@@ -293,12 +293,16 @@ public class ExifInterface {
String lngRef = mAttributes.get(ExifInterface.TAG_GPS_LONGITUDE_REF); String lngRef = mAttributes.get(ExifInterface.TAG_GPS_LONGITUDE_REF);
if (latValue != null && latRef != null && lngValue != null && lngRef != null) { if (latValue != null && latRef != null && lngValue != null && lngRef != null) {
output[0] = convertRationalLatLonToFloat(latValue, latRef); try {
output[1] = convertRationalLatLonToFloat(lngValue, lngRef); output[0] = convertRationalLatLonToFloat(latValue, latRef);
return true; output[1] = convertRationalLatLonToFloat(lngValue, lngRef);
} else { return true;
return false; } catch (IllegalArgumentException e) {
// if values are not parseable
}
} }
return false;
} }
/** /**
@@ -367,12 +371,12 @@ public class ExifInterface {
String [] pair; String [] pair;
pair = parts[0].split("/"); pair = parts[0].split("/");
int degrees = (int) (Float.parseFloat(pair[0].trim()) double degrees = Double.parseDouble(pair[0].trim())
/ Float.parseFloat(pair[1].trim())); / Double.parseDouble(pair[1].trim());
pair = parts[1].split("/"); pair = parts[1].split("/");
int minutes = (int) ((Float.parseFloat(pair[0].trim()) double minutes = Double.parseDouble(pair[0].trim())
/ Float.parseFloat(pair[1].trim()))); / Double.parseDouble(pair[1].trim());
pair = parts[2].split("/"); pair = parts[2].split("/");
double seconds = Double.parseDouble(pair[0].trim()) double seconds = Double.parseDouble(pair[0].trim())
@@ -383,10 +387,12 @@ public class ExifInterface {
return (float) -result; return (float) -result;
} }
return (float) result; return (float) result;
} catch (RuntimeException ex) { } catch (NumberFormatException e) {
// if for whatever reason we can't parse the lat long then return // Some of the nubmers are not valid
// null throw new IllegalArgumentException();
return 0f; } catch (ArrayIndexOutOfBoundsException e) {
// Some of the rational does not follow the correct format
throw new IllegalArgumentException();
} }
} }