2011-06-23 24 views
5

Tôi đang sử dụng đoạn mã sau để trích xuất các định vị của một hình ảnh chụp với một chiếc iPhone:Dịch Exif DMS DD Định vị với 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 

Đây là kết quả mà tôi đang trở lại:

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

Vì vậy, tôi tự hỏi làm cách nào tôi chuyển đổi các giá trị GPSInfo (DMS) thành Độ thập phân cho các tọa độ thực tế? Ngoài ra, có vẻ như có hai Wests được liệt kê. . . ?

Trả lời

8

Đây là một cách để làm điều đó, điều chỉnh cho một kịch bản tôi đã viết một số months ago sử dụng 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 

này mang lại cho tôi những vĩ độ sau và kinh độ cho hình ảnh của bạn: 32,7618333, -117,146333 (kết quả tương tự như Lance Lee).

Mục nhập cuối cùng của GPSInfo có thể là tiêu đề của hình ảnh. Bạn có thể kiểm tra điều này bằng cách sử dụng công cụ cung cấp tên riêng cho các giá trị EXIF ​​khác nhau như exiv2 hoặc exiftools.

1

http://www.exiv2.org/tags.html tìm chuỗi 'Exif.GPSInfo.GPSLatitude' trong trang đó. Có vẻ như bạn nhận được 3 cặp (đại diện cho số hợp lý) và số thứ hai trong cặp là mẫu số. Tôi mong đợi điều sau Kinh độ là độ cao, tuy nhiên nó phù hợp hơn với dấu thời gian GPS.

Trong ví dụ này:

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

Đã được ảnh này được thực hiện gần 4646 Park Blvd, San Diego, CA 92.116? Nếu không thì bỏ qua câu trả lời này.

Các vấn đề liên quan