2011-06-23 46 views
5

我使用下面的代碼來提取與iPhone拍攝的圖像的地理位置:翻譯的Exif DMS到DD地理位置與Python

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 

這是我返回的結果:

{ 
    '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' 
} 

所以,我想知道如何將GPSInfo值(DMS)轉換爲實際座標的十進制度數?另外,似乎有兩個Wests上市。 。 。 ?

回答

8

這裏有一個辦法做到這一點,適合於劇本我寫了幾個月前使用pyexiv2:

a = get_exif('photo2.jpg') 
lat = [float(x)/float(y) for x, y in a['GPSInfo'][2]] 
latref = a['GPSInfo'][1] 
lon = [float(x)/float(y) for x, y in a['GPSInfo'][4]] 
lonref = a['GPSInfo'][3] 

lat = lat[0] + lat[1]/60 + lat[2]/3600 
lon = lon[0] + lon[1]/60 + lon[2]/3600 
if latref == 'S': 
    lat = -lat 
if lonref == 'W': 
    lon = -lon 

這給了我下面的經度和緯度爲您的照片:32.7618333,-117.146333(相同的結果。蘭斯李)。

GPSInfo的最後一項可能是圖片的標題。你可以使用一個工具來檢查它,這個工具給出了不同EXIF值的專有名稱,例如exiv2或exiftools。

1

http://www.exiv2.org/tags.html 在該頁面中找到字符串'Exif.GPSInfo.GPSLatitude'。 看起來你會得到3對(代表有理數),而這對中的第二個數字是分母。 我期望經度之後的東西是高度,但它更適合GPS時間戳。

在這個例子中:

32/1 + (4571/100)/60 + (0/1)/3600 = 32.761833 N 
117/1 + (878/100)/60 + (0/1)/3600 = 117.146333 W 

被帶到附近的公園4646大道這張照片,聖地亞哥,CA 92116?如果不是,則忽略此答案。