Interpreting GPS info of exif data from photo in python Interpreting GPS info of exif data from photo in python python python

Interpreting GPS info of exif data from photo in python


Late answer, but as of 2021 you can use GPSPhoto, i.e.:

from GPSPhoto import gpsphoto# Get the data from image file and return a dictionarydata = gpsphoto.getGPSData('IMG_20181224_201933.jpg')print(data['Latitude'], data['Longitude'])

Output:

38.71615498471598 -9.148730635643007


Installation:

pip3 install piexifpip3 install gpsphoto


Use exifread module.

Here is a very helpful gist

import exifread as ef# barrowed from # https://gist.github.com/snakeye/fdc372dbf11370fe29eb def _convert_to_degress(value):    """    Helper function to convert the GPS coordinates stored in the EXIF to degress in float format    :param value:    :type value: exifread.utils.Ratio    :rtype: float    """    d = float(value.values[0].num) / float(value.values[0].den)    m = float(value.values[1].num) / float(value.values[1].den)    s = float(value.values[2].num) / float(value.values[2].den)    return d + (m / 60.0) + (s / 3600.0)def getGPS(filepath):    '''    returns gps data if present other wise returns empty dictionary    '''    with open(filepath, 'rb') as f:        tags = ef.process_file(f)        latitude = tags.get('GPS GPSLatitude')        latitude_ref = tags.get('GPS GPSLatitudeRef')        longitude = tags.get('GPS GPSLongitude')        longitude_ref = tags.get('GPS GPSLongitudeRef')        if latitude:            lat_value = _convert_to_degress(latitude)            if latitude_ref.values != 'N':                lat_value = -lat_value        else:            return {}        if longitude:            lon_value = _convert_to_degress(longitude)            if longitude_ref.values != 'E':                lon_value = -lon_value        else:            return {}        return {'latitude': lat_value, 'longitude': lon_value}    return {}file_path = 'file path of the file'    gps = getGPS(file_path)print gps                    


OP, has already posted a solution using PIL. If you wants to just get GPS info from Python, you can get it by using exifread

Install package using pip

$ pip install exifread

and get GPS data

In [10]: import exifreadIn [11]: tags = exifread.process_file(open('./tests/demo-project/content/test.jpg', 'rb'))                                              In [12]: geo = {i:tags[i] for i in tags.keys() if i.startswith('GPS')}In [13]: geoOut[13]: {'GPS GPSAltitude': (0x0006) Ratio=186188/239 @ 898, 'GPS GPSAltitudeRef': (0x0005) Byte=0 @ 722, 'GPS GPSDate': (0x001D) ASCII=2015:12:06 @ 954, 'GPS GPSDestBearing': (0x0018) Ratio=43771/526 @ 946, 'GPS GPSDestBearingRef': (0x0017) ASCII=T @ 806, 'GPS GPSImgDirection': (0x0011) Ratio=43771/526 @ 938, 'GPS GPSImgDirectionRef': (0x0010) ASCII=T @ 782, 'GPS GPSLatitude': (0x0002) Ratio=[46, 3803/100, 0] @ 850, 'GPS GPSLatitudeRef': (0x0001) ASCII=N @ 674, 'GPS GPSLongitude': (0x0004) Ratio=[13, 2429/100, 0] @ 874, 'GPS GPSLongitudeRef': (0x0003) ASCII=E @ 698, 'GPS GPSSpeed': (0x000D) Ratio=139/50 @ 930, 'GPS GPSSpeedRef': (0x000C) ASCII=K @ 758, 'GPS GPSTimeStamp': (0x0007) Ratio=[10, 37, 33] @ 906, 'GPS Tag 0x001F': (0x001F) Ratio=30 @ 966}