Passed
Branch master (929f74)
by Cyb3r
01:56
created

MetaStalk.utils.parse.gps_parse()   A

Complexity

Conditions 5

Size

Total Lines 15
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 12
CRAP Score 5.0729

Importance

Changes 0
Metric Value
cc 5
eloc 14
nop 1
dl 0
loc 15
ccs 12
cts 14
cp 0.8571
crap 5.0729
rs 9.2333
c 0
b 0
f 0
1
"""utils.parse
2
---
3
Parse needed to make exifread dictionaries easier"""
4
5
6 1
def gps_parse(tags: dict):
7
    """Returns GPS degrees"""
8 1
    latitude = tags["GPS GPSLatitude"]
9 1
    latitude_ref = tags["GPS GPSLatitudeRef"]
10 1
    longitude = tags["GPS GPSLongitude"]
11 1
    longitude_ref = tags["GPS GPSLongitudeRef"]
12 1
    if latitude:
13 1
        lat_value = _convert_to_degrees(latitude)
14 1
        if latitude_ref.values != 'N':
15
            lat_value = -lat_value
16 1
    if longitude:
17 1
        lon_value = _convert_to_degrees(longitude)
18 1
        if longitude_ref.values != 'E':
19
            lon_value = -lon_value
20 1
    return {'latitude': lat_value, 'longitude': lon_value}
21
22
23 1
def _convert_to_degrees(value) -> float:
24
    """
25
    Helper function to convert the GPS coordinates stored in the EXIF to degrees in float format
26
    :param value:
27
    :type value: exifread.utils.Ratio
28
    """
29 1
    d = float(value.values[0].num) / float(value.values[0].den)
30 1
    m = float(value.values[1].num) / float(value.values[1].den)
31 1
    s = float(value.values[2].num) / float(value.values[2].den)
32
33
    return d + (m / 60.0) + (s / 3600.0)
34