pub fn exif_latitude_to_decimal(lat: &str) -> Option<f64> {
if lat.is_empty() {
return None;
}
let (lat, sign_str) = lat.split_at(lat.len() - 1);
let sign = match sign_str {
"N" => 1.0,
"S" => -1.0,
_ => {
return None;
}
};
if let Some((deg, min)) = lat.split_once(',') {
if let Ok(deg) = deg.parse::<f64>() {
if let Ok(min) = min.parse::<f64>() {
return Some((deg + (min / 60.0)) * sign);
}
}
}
None
}
pub fn exif_longitude_to_decimal(lat: &str) -> Option<f64> {
if lat.is_empty() {
return None;
}
let (lat, sign_str) = lat.split_at(lat.len() - 1);
let sign = match sign_str {
"E" => 1.0,
"W" => -1.0,
_ => {
return None;
}
};
if let Some((deg, min)) = lat.split_once(',') {
if let Ok(deg) = deg.parse::<f64>() {
if let Ok(min) = min.parse::<f64>() {
return Some((deg + (min / 60.0)) * sign);
}
}
}
None
}