1。目标场景有时候女朋友一个人在外面玩,我问她在哪,她也不说。然而,你真的很想知道你女朋友的“位置”,怎么办呢?其实你可以这样骗女朋友,假装你在家无聊,你可以帮她修图,让她把微信原图发给你,拿到“微信原图”后,你可以使用Python快速获取女友的具体位置。2.准备工作首先,安装一个用于在虚拟环境中识别图像元数据的库。pip3installexifread然后,进入高德开放平台,申请一个web服务应用,获取一个反向地理编码API的“Key”。3.编写脚本。整个操作分为3步,获取图片的经纬度,修正经纬度数据,调用高德反向地理编码API获取具体位置。第一步,获取图像的“经纬度”。使用exifread库,可以直接读取图片文件,获取图片的元数据,包括经度、纬度、南北纬方向、东西经方向、拍摄时间。#使用exifread获取图片的元数据img_exif=exifread.process_file(open(self.img_path,'rb'))#可以读取ifimg_exif的属性:#纬度数latitude_gps=img_exif['GPSGPSLatitude']#N,S南北纬方向latitude_direction=img_exif['GPGPSLatitudeRef']#经度经度longitude_gps=img_exif['GPGPPSLongitude']#E,W东西经方向longitude_direction=img_exif['GPGPPSLongitudeRef']#取时take_time=img_exif['EXIFDateTimeOriginal']如果元数据存在,再判断拍摄时间是否合理。如果拍摄时间不是今天,我只能遗憾地通知你,你女朋友在骗你“说谎”。defjudge_time_met(self,take_time):"""判断拍摄时间是否为今天:paramtake_time::return:"""#拍摄时间format_time=str(take_time).split("")[0].replace(":""-")#今天的日期=str(datetime.date.today())ifformat_time==today:returnTrueelse:returnFalseifis_lie:print('很遗憾地通知你,你的女朋友在说谎!!!')return如果女朋友没有说谎,那么可以进行第2步。由于通过GPS获取的经纬度和高德地图坐标存在一定的误差,需要将坐标转换成“火星坐标系”。x_pi=3.14159265358979324*3000.0/180.0pi=3.1415926535897932384626#πa=6378245.0#长半轴ee=0.00669342162296594323#扁率defwgs84togcj02(lng,lat):"""WGS84转GCJ02(火星坐标系):paramlng:WGS84坐标系的经度:paramlat:WGS84坐标系纬度:return:"""ifout_of_china(lng,lat):#判断是否在中国returnlng,latdlat=transformlat(lng-105.0,lat-35.0)dlng=transformlng(lng-105.0,lat-35.0)radlat=lat/180.0*pimagic=math.sin(radlat)magic=1-ee*magic*magicsqrtmagic=math.sqrt(magic)dlat=(dlat*180.0)/((a*(1-ee))/(magic*sqrtmagic)*pi)dlng=(dlng*180.0)/(a/sqrtmagic*math.cos(radlat)*pi)mglat=lat+dlatmglng=lng+dlngreturn[mglng,mglat]另一件事注意,界面中的经纬度参数只能识别小数点后6位。需要对经纬度中的度分秒做一些数据处理,然后取整。def__format_lati_long_data(self,data):"""处理经纬度数据,保留6位小数:paramdata:原始经纬度值:return:"""#删除左右括号和空格data_list_tmp=str(data).replace('[','').replace(']','').split(',')data_list=[data.strip()fordataindata_list_tmp]#替换第二个值data_tmp=data_list[-1].split('/')#秒的值data_sec=int(data_tmp[0])/int(data_tmp[1])/3600#替换分钟的值data_tmp=data_list[-2]#的值oftheminutedata_minute=int(data_tmp)/60#度数data_degree=int(data_list[0])#因为高德API只能识别小数点后6位#需要转成浮点数保存as6位小数result="%.6f"%(data_degree+data_minute+data_sec)returnfloat(result)第三步,调用高德的反地理编码API,传入应用的applicationKey,即可得到详细地址你女朋友。def__get_address(self,location):"""根据坐标获取详细地址:paramlocation:经纬度值:return:"""resp=requests.get(self.url_get_position.format(self.api_key,location))location_data=json.loads(resp.text)address=location_data.get('regeocode').get('formatted_address')returnaddress4.结果与结论确保图片是原图,可以快速帮助你判断女朋友是否在撒谎;如果你的女朋友没有说谎,请返回你女朋友的具体位置。
