python提取照片坐标信息的实例代码
python提取照片坐标信息的代码如下所示:
fromPILimportImage
fromPIL.ExifTagsimportTAGS
importos
output="Z://result.csv"
out=open(output,'a')
out.write('lat,lon\n')
fpath="Z://iphonephoto"
foriteminos.walk(fpath):
ob=item[2]
foriinob:
name=fpath+'/'+str(i)
ret={}
try:
img=Image.open(name)
ifhasattr(img,'_getexif'):
exifinfo=img._getexif()
ifexifinfo!=None:
fortag,valueinexifinfo.items():
decoded=TAGS.get(tag,tag)
ret[decoded]=value
N1=ret['GPSInfo'][2][0][0]
N2=ret['GPSInfo'][2][1][0]
N3=ret['GPSInfo'][2][2][0]
N=int(N1)+int(N2)*(1.0/60)+int(N3)*(1.0/360000)
E1=ret['GPSInfo'][4][0][0]
E2=ret['GPSInfo'][4][1][0]
E3=ret['GPSInfo'][4][2][0]
E=int(E1)+int(E2)*(1.0/60)+int(E3)*(1.0/360000)
out.write(str(N)+','+str(E)+'\n')
except:
pass
out.close()
PS:Python小列子-读取照片位置
Pythonexifread
Python利用exifread库来解析照片的经纬度,对接百度地图API显示拍摄地点。
importexifread
importre
importjson
importrequests
deflatitude_and_longitude_convert_to_decimal_system(*arg):
"""
经纬度转为小数,作者尝试适用于iphone6、ipad2以上的拍照的照片,
:paramarg:
:return:十进制小数
"""
returnfloat(arg[0])+((float(arg[1])+(float(arg[2].split('/')[0])/float(arg[2].split('/')[-1])/60))/60)
deffind_GPS_image(pic_path):
GPS={}
date=''
withopen(pic_path,'rb')asf:
tags=exifread.process_file(f)
fortag,valueintags.items():
ifre.match('GPSGPSLatitudeRef',tag):
GPS['GPSLatitudeRef']=str(value)
elifre.match('GPSGPSLongitudeRef',tag):
GPS['GPSLongitudeRef']=str(value)
elifre.match('GPSGPSAltitudeRef',tag):
GPS['GPSAltitudeRef']=str(value)
elifre.match('GPSGPSLatitude',tag):
try:
match_result=re.match('\[(\w*),(\w*),(\w.*)/(\w.*)\]',str(value)).groups()
GPS['GPSLatitude']=int(match_result[0]),int(match_result[1]),int(match_result[2])
except:
deg,min,sec=[x.replace('','')forxinstr(value)[1:-1].split(',')]
GPS['GPSLatitude']=latitude_and_longitude_convert_to_decimal_system(deg,min,sec)
elifre.match('GPSGPSLongitude',tag):
try:
match_result=re.match('\[(\w*),(\w*),(\w.*)/(\w.*)\]',str(value)).groups()
GPS['GPSLongitude']=int(match_result[0]),int(match_result[1]),int(match_result[2])
except:
deg,min,sec=[x.replace('','')forxinstr(value)[1:-1].split(',')]
GPS['GPSLongitude']=latitude_and_longitude_convert_to_decimal_system(deg,min,sec)
elifre.match('GPSGPSAltitude',tag):
GPS['GPSAltitude']=str(value)
elifre.match('.*Date.*',tag):
date=str(value)
return{'GPS_information':GPS,'date_information':date}
deffind_address_from_GPS(GPS):
print(GPS)
"""
使用GeocodingAPI把经纬度坐标转换为结构化地址。
:paramGPS:
:return:
"""
secret_key='xxxxxxxxxxxxxxxxxxxx'#百度地图创应用的秘钥
ifnotGPS['GPS_information']:
return'该照片无GPS信息'
lat,lng=GPS['GPS_information']['GPSLatitude'],GPS['GPS_information']['GPSLongitude']
baidu_map_api="http://api.map.baidu.com/geocoder/v2/?ak={0}&callback=renderReverse&location={1},{2}s&output=json&pois=0".format(
secret_key,lat,lng)
response=requests.get(baidu_map_api)
content=response.text.replace("renderReverse&&renderReverse(","")[:-1]
baidu_map_address=json.loads(content)
formatted_address=baidu_map_address["result"]["formatted_address"]
#province=baidu_map_address["result"]["addressComponent"]["province"]
#city=baidu_map_address["result"]["addressComponent"]["city"]
#district=baidu_map_address["result"]["addressComponent"]["district"]
returnformatted_address
GPS_info=find_GPS_image(pic_path='lllll.jpg')#照片
address=find_address_from_GPS(GPS=GPS_info)
print(address)
总结
以上所述是小编给大家介绍的python提取照片坐标信息的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!