兄嘚群里又热闹了,有一个朋友特别深情,在时光荏苒,白驹过隙的大学里,他有幸参加了一次社团活动,在社团活动开始到一半左右,有一个长得乖巧,文静的女生上去唱起歌来,就这样这位朋友一见钟情,慢慢打听这位女生联系方式,这一追求就是多年啊,就在大学各自出社会后,今天这位朋友出来冒泡了。聊天如下:
A:朋友们救命 !我的女神同意做我女朋友了,但是有一个问题,她说还记得这张照片我是在哪里给它拍的吗?我实在不太记得了,你们帮我想想。
B:我记得你这是在体育篮球场和他告白的时候。
C:没有,我怎么记得是在长青街那边和他告白时拍的。
D:不对,肯定是在他获得歌唱比赛第二名时。
F:不是兄弟们,他这告白的次数太多了,A你这发的照片我帮你去想想办法,这女朋友一定要帮你追到手。
1.思考过程
可以分为两大部分:
- 获取图片的经纬度
- 利用高德API的逆地理编码,将经纬度识别成具体地址
2.获取KEY
首先进入网页链接https://console.amap.com/dev/key/app,如下图创建应用,创建完成后会获得一个KEY。
具体内容可参考API文档https://lbs.amap.com/api/webservice/guide/api/georegeo
3.源码如下
import exifread
import requests
from lxml import etree
# 获取经纬度
def get_gps(file):
f = open(file, 'rb')
tags = exifread.process_file(f)
for key in tags:
if key == "GPS GPSLongitude":
longtitude = float(str(tags[key])[1:-1].split(",")[0]) + float(
str(tags[key])[1:-1].split(",")[1]) / 60 + float(eval(str(tags[key])[1:-1].split(",")[2])) / 3600
print("经度 =", tags[key], tags['GPS GPSLatitudeRef'])
elif key == "GPS GPSLatitude":
latitude = float(str(tags[key])[1:-1].split(",")[0]) + float(
str(tags[key])[1:-1].split(",")[1]) / 60 + float(eval(str(tags[key])[1:-1].split(",")[2])) / 3600
print("纬度 =", tags[key], tags['GPS GPSLongitudeRef'])
print(longtitude, latitude)
return longtitude, latitude
longtitude, latitude = get_gps("这里是图片的路径")
# 通过经纬度获取地址
def get_add(longtitude, latitude):
key = "这里是在高德申请的key"
url = f"https://restapi.amap.com/v3/geocode/regeo?output=xml&location={longtitude},{latitude}&key={key}&radius=1000&extensions=all"
response = requests.get(url)
content = response.text
# 解析返回的xml(content)
xml = bytes(bytearray(content, encoding='utf-8'))
e = etree.XML(xml)
adress = e.xpath("//formatted_address/text()")
poi = e.xpath("//poi/name/text()")
print("定位地址:", adress)
print("附近兴趣点:", poi)
get_add(longtitude, latitude)
4.执行结果
注意图片素材一定要有以下两个条件:
- 未压缩过的原图
- 拍照时手机开着定位
注意啦,各位记得一定要把定位给关了,注意隐私,要用的时候再去开也不迟。
我来告诉你们结果了,这位朋友成功抱得美人归,女神被感动的热泪盈眶啊,这位朋友还仗义的说:明天带女神一起出来请我吃大餐。行呗,单身狗不就是我吗????
你们的三连(点赞,收藏,评论)是我持续输出的动力,感谢。
①有趣的源码与学习经验 ②工具安装包 ③专业解答 ④Python有关的所有电子书