title: Translate Exif DMS to DD Geolocation with Python
body: <p>I am using the following code to extract the geolocation of an image taken with an iPhone:</p>
  
  <pre><code>from PIL import Image
  from PIL.ExifTags import TAGS
  
  def get_exif(fn):
      ret = {}
      i = Image.open(fn)
      info = i._getexif()
      for tag, value in info.items():
          decoded = TAGS.get(tag, tag)
          ret[decoded] = value
      return ret
  
  a = get_exif('photo2.jpg')
  print a
  </code></pre>
  
  <p>This is the result that I am returned:</p>
  
  <pre><code>    {
      'YResolution': (4718592, 65536),
      41986: 0,
      41987: 0,
      41990: 0,
      'Make': 'Apple',
      'Flash': 32,
      'ResolutionUnit': 2,
      'GPSInfo': {
          1: 'N',
          2: ((32, 1), (4571, 100), (0, 1)),
          3: 'W',
          4: ((117, 1), (878, 100), (0, 1)),
          7: ((21, 1), (47, 1), (3712, 100))
      },
      'MeteringMode': 1,
      'XResolution': (4718592, 65536),
      'ExposureProgram': 2,
      'ColorSpace': 1,
      'ExifImageWidth': 1600,
      'DateTimeDigitized': '2011:03:01 13:47:39',
      'ApertureValue': (4281, 1441),
      316: 'Mac OS X 10.6.6',
      'SensingMethod': 2,
      'FNumber': (14, 5),
      'DateTimeOriginal': '2011:03:01 13:47:39',
      'ComponentsConfiguration': '\x01\x02\x03\x00',
      'ExifOffset': 254,
      'ExifImageHeight': 1200,
      'Model': 'iPhone 3G',
      'DateTime': '2011:03:03 10:37:32',
      'Software': 'QuickTime 7.6.6',
      'Orientation': 1,
      'FlashPixVersion': '0100',
      'YCbCrPositioning': 1,
      'ExifVersion': '0220'
  }
  </code></pre>
  
  <p>So, I am wondering how I convert the GPSInfo values (DMS) to Decimal Degrees for actual coordinates? Also, there seems to be two Wests listed . . . ?</p>