使用Python将Exif DMS转换为DD地理位置
我使用以下代码提取iPhone拍摄的图像的地理位置:使用Python将Exif DMS转换为DD地理位置,python,python-imaging-library,exif,geo,Python,Python Imaging Library,Exif,Geo,我使用以下代码提取iPhone拍摄的图像的地理位置: 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
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)转换为实际坐标的十进制度数?此外,似乎有两个西部上市
在该页面中找到字符串“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号附近拍摄的吗?如果没有,那么忽略这个答案。下面是一个方法,它适用于我几个月前使用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)提供专有名称的工具来检查这一点