Skip to content

Commit 9b4890e

Browse files
fxriraveit65
authored andcommitted
EomMetadataDetails: Improve fractional GPS coordinates support
Increase displayed coordinate resolution for Exif GPS coordinates that use fractional degrees for minutes or fractional minutes for seconds. https://bugzilla.gnome.org/show_bug.cgi?id=725416 origin commit: https://gitlab.gnome.org/GNOME/eog/commit/1b0fb6b
1 parent f965eb2 commit 9b4890e

File tree

1 file changed

+26
-7
lines changed

1 file changed

+26
-7
lines changed

src/eom-metadata-details.c

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
#include <gtk/gtk.h>
4040

4141
#include <string.h>
42+
#include <math.h>
4243

4344
typedef enum {
4445
EXIF_CATEGORY_CAMERA,
@@ -372,7 +373,7 @@ eom_exif_entry_get_value (ExifEntry *e,
372373
{
373374
gsize rational_size;
374375
ExifRational r;
375-
gfloat h = 0., m = 0.;
376+
gfloat h = 0., m = 0., s = 0.;
376377

377378

378379
rational_size = exif_format_get_size (EXIF_FORMAT_RATIONAL);
@@ -385,15 +386,33 @@ eom_exif_entry_get_value (ExifEntry *e,
385386
h = (gfloat)r.numerator / r.denominator;
386387

387388
r = exif_get_rational (e->data + rational_size, bo);
388-
if (r.denominator != 0)
389-
m = (gfloat)r.numerator / (gfloat)r.denominator;
389+
if (r.denominator != 0) {
390+
if (r.numerator != 0) {
391+
m = (gfloat)r.numerator /
392+
(gfloat)r.denominator;
393+
} else {
394+
double integ;
395+
396+
m = (gfloat)(modf (h, &integ) * 60.0);
397+
h = (gfloat) integ;
398+
}
399+
}
390400

391401
r = exif_get_rational (e->data + (2 * rational_size),
392402
bo);
393-
if (r.numerator != 0 && r.denominator != 0) {
394-
gfloat s;
395-
396-
s = (gfloat)r.numerator / (gfloat)r.denominator;
403+
if (r.denominator != 0) {
404+
if (r.numerator != 0) {
405+
s = (gfloat)r.numerator /
406+
(gfloat)r.denominator;
407+
} else {
408+
double integ;
409+
410+
s = (gfloat)(modf (m, &integ) * 60.0);
411+
m = (gfloat) integ;
412+
}
413+
}
414+
415+
if (s != 0.0) {
397416
g_snprintf (buf, n_buf,
398417
"%.0f° %.0f' %.2f\"",
399418
h, m, s);

0 commit comments

Comments
 (0)