simplify EXIF coordinate fetching, use built in functions

This commit is contained in:
tibbi 2019-07-08 15:13:26 +02:00
parent b9322d3dd6
commit 0acafd7435

View file

@ -709,28 +709,10 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
return return
} }
val lat = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE) val latLon = FloatArray(2)
val latRef = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF) if (exif.getLatLong(latLon)) {
val lon = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE) val uriBegin = "geo:${latLon[0]},${latLon[1]}"
val lonRef = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF) val query = "${latLon[0]}, ${latLon[1]}"
if (lat == null || latRef == null || lon == null || lonRef == null) {
toast(R.string.unknown_location)
} else {
val geoLat = if (latRef == "N") {
convertToDegree(lat)
} else {
-convertToDegree(lat)
}
val geoLon = if (lonRef == "E") {
convertToDegree(lon)
} else {
-convertToDegree(lon)
}
val uriBegin = "geo:$geoLat,$geoLon"
val query = "$geoLat, $geoLon"
val encodedQuery = Uri.encode(query) val encodedQuery = Uri.encode(query)
val uriString = "$uriBegin?q=$encodedQuery&z=16" val uriString = "$uriBegin?q=$encodedQuery&z=16"
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(uriString)) val intent = Intent(Intent.ACTION_VIEW, Uri.parse(uriString))
@ -740,30 +722,11 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
} else { } else {
toast(R.string.no_app_found) toast(R.string.no_app_found)
} }
} else {
toast(R.string.unknown_location)
} }
} }
private fun convertToDegree(stringDMS: String): Float {
val dms = stringDMS.split(",".toRegex(), 3).toTypedArray()
val stringD = dms[0].split("/".toRegex(), 2).toTypedArray()
val d0 = stringD[0].toDouble()
val d1 = stringD[1].toDouble()
val floatD = d0 / d1
val stringM = dms[1].split("/".toRegex(), 2).toTypedArray()
val m0 = stringM[0].toDouble()
val m1 = stringM[1].toDouble()
val floatM = m0 / m1
val stringS = dms[2].split("/".toRegex(), 2).toTypedArray()
val s0 = stringS[0].toDouble()
val s1 = stringS[1].toDouble()
val floatS = s0 / s1
return (floatD + floatM / 60 + floatS / 3600).toFloat()
}
private fun initBottomActionsLayout() { private fun initBottomActionsLayout() {
bottom_actions.layoutParams.height = resources.getDimension(R.dimen.bottom_actions_height).toInt() + navigationBarHeight bottom_actions.layoutParams.height = resources.getDimension(R.dimen.bottom_actions_height).toInt() + navigationBarHeight
if (config.bottomActions) { if (config.bottomActions) {