精华内容
下载资源
问答
  • image其实你可以这样套路女朋友,假装自己在家很无聊,可以帮她修图,让她微信原图你,拿到「微信原图」后,你就可以利用 Python 快速获取到女友的具体位置了。准 备 工 作首先,在虚拟环境中安装识别图片元数据...

    image

    目 标 场 景

    有时候女朋友一个人在外面玩耍,问她在哪个地方,就是不告诉我。但是,你又很想知道女朋友的「位置」,这该如何是好?

    image

    其实你可以这样套路女朋友,假装自己在家很无聊,可以帮她修图,让她微信发原图给你,拿到「微信原图」后,你就可以利用 Python 快速获取到女友的具体位置了。

    准 备 工 作

    首先,在虚拟环境中安装识别图片元数据的库。

    pip3 install exifread

    然后,进入高德开放平台,申请一个 Web 服务的应用,获取到一个 「Key」用于逆地理编码 API。

    image

    编 写 脚 本

    整个操作分为 3 步骤,分别是获取图片的经度和纬度、对经度和纬度进行数据矫正、调用高德逆地理编码 API 获取具体位置。

    第 1 步,获取图片的「经度和纬度」。

    使用 exifread 库可以直接读取图片文件,获取到图片的元数据,包含经度、纬度、南北纬方向、东西经方向和拍摄时间。

    # 使用 exifread 获取图片的元数据

    img_exif = exifread.process_file(open(self.img_path, 'rb'))

    # 能够读取到属性

    if img_exif:

    # 纬度数

    latitude_gps = img_exif['GPS GPSLatitude']

    # N,S 南北纬方向

    latitude_direction = img_exif['GPS GPSLatitudeRef']

    # 经度数

    longitude_gps = img_exif['GPS GPSLongitude']

    # E,W 东西经方向

    longitude_direction = img_exif['GPS GPSLongitudeRef']

    # 拍摄时间

    take_time = img_exif['EXIF DateTimeOriginal']

    如果元数据存在,然后判断拍摄时间是否合理。如果拍摄时间不在今天,那只能很遗憾地通知你,你的女朋友在向你撒谎「撒谎」。

    def judge_time_met(self, take_time):

    """

    判断拍摄时间是否是在今天

    :param take_time:

    :return:

    """

    # 拍摄时间

    format_time = str(take_time).split(" ")[0].replace(":", "-")

    # 当天日期

    today = str(datetime.date.today())

    if format_time == today:

    return False

    else:

    return True

    if is_lie:

    print('很遗憾的通知你,你的女朋友在撒谎!!!')

    return

    如果女友没有撒谎,那么可以进行第 2 步的操作。

    因为通过 GPS 获取的经度、纬度和高德地图的坐标存在一定的误差,这里需要把坐标转换为「火星坐标系」。

    x_pi = 3.14159265358979324 * 3000.0 / 180.0

    pi = 3.1415926535897932384626 # π

    a = 6378245.0 # 长半轴

    ee = 0.00669342162296594323 # 扁率

    def wgs84togcj02(lng, lat):

    """

    WGS84转GCJ02(火星坐标系)

    :param lng:WGS84坐标系的经度

    :param lat:WGS84坐标系的纬度

    :return:

    """

    if out_of_china(lng, lat): # 判断是否在国内

    return lng, lat

    dlat = transformlat(lng - 105.0, lat - 35.0)

    dlng = transformlng(lng - 105.0, lat - 35.0)

    radlat = lat / 180.0 * pi

    magic = math.sin(radlat)

    magic = 1 - ee * magic * magic

    sqrtmagic = 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 + dlat

    mglng = lng + dlng

    return [mglng, mglat]

    另外需要注意的是,接口中经度、纬度参数只能识别小数点后 6 位,需要对经纬度中的度、分、秒做一定的数据处理,然后再进行四舍五入。

    def __format_lati_long_data(self, data):

    """

    对经度和纬度数据做处理,保留6位小数

    :param data: 原始经度和纬度值

    :return:

    """

    # 删除左右括号和空格

    data_list_tmp = str(data).replace('[', '').replace(']', '').split(',')

    data_list = [data.strip() for data in data_list_tmp]

    # 替换秒的值

    data_tmp = data_list[-1].split('/')

    # 秒的值

    data_sec = int(data_tmp[0]) / int(data_tmp[1]) / 3600

    # 替换分的值

    data_tmp = data_list[-2]

    # 分的值

    data_minute = int(data_tmp) / 60

    # 度的值

    data_degree = int(data_list[0])

    # 由于高德API只能识别到小数点后的6位

    # 需要转换为浮点数,并保留为6位小数

    result = "%.6f" % (data_degree + data_minute + data_sec)

    return float(result)

    第 3 步,调用高德的反地理编码 API,传入申请的应用 Key,就能拿到女朋友的详细地址。

    def __get_address(self, location):

    """

    根据坐标得到详细地址

    :param location: 经纬度值

    :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')

    return address

    结 果 结 论

    确保图片是原图的基础上,可以快速帮你判断女朋友是否在撒谎;如果女朋友没有撒谎,就返回女朋友具体的位置。

    本文首发于公众号「 AirPython 」,关注公众号后,回复「 图片定位 」即可获得。

    如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。

    推荐阅读:

    展开全文
  • 想不想知道和你正在聊天的现在在哪里,比如我正在微信聊天,对方了几张照片 大家猜猜我这三张照片都是在哪照的? 我们用代码执行一下: 这张就不放具体位置了…… 答案揭晓,第一张是在重庆朝天门码头...
  • asp.net知识库

    2015-06-18 08:45:45
    页面一postback,它就显示页面的最顶端,怎样让它定位在某一位置如何保证页面刷新后的滚动条位置 清除网页历史记录,屏蔽后退按钮! 如何传值在2个页面之间 :要求不刷新父页面,并且不能用Querystring传值 Asp...
  • 如何让代码变得更加容易让维护? 直接看我这篇博客:https://juejin.im/post/5c46e6fb6fb9a049a5713bcc 4.6 存在待解决问题 动态的管理组件,所以每个组件添加几个生命周期状态:加载、卸载和降维。为此...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
     //客户一个感谢消息,消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener  在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息...
  • java源码包2

    千次下载 热门讨论 2013-04-20 11:28:17
     //客户一个感谢消息,消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener  在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息...
  • Visual C++ 2008入门经典--详细书签版

    热门讨论 2013-02-02 16:07:15
    本书延续了ivor horton讲解编程语言的独特方法,从中读者可以学习visual c++ 2008的基础知识,了解如何使用mfc进行本地iso/ansi c++ windows应用程序开发以及如何使用windows forms进行c++/cli windows应用程序开发...
  • java源码包3

    千次下载 热门讨论 2013-04-20 11:30:13
     //客户一个感谢消息,消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener  在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息...
  • Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //客户一个感谢...
  • Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //客户一个感谢...
  • java源码包

    2015-12-01 16:29:37
     //客户一个感谢消息,消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener  在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息...
  • 软件界面设计工具_3款合集

    千次下载 热门讨论 2010-06-29 03:52:47
    可以用命令行进行导出操作,这样就能让我写个脚本,从svn里checkout某个目录下的所有设计文件后,导出图片,打包后用邮件到项目经理,工程师甚至客户那; 跨平台,Balsamiq Mokups是用Flex和Air实现的,所以在Mac...
  • 传说有天,几位Java成员组的会员正在讨论这个新的语言取什么名字,当时他们止在 咖啡馆喝着Java(爪哇)咖啡,有一个灵机一动说就叫Java怎杵,得到了其他的赞同, 于是,Java这个名字就这样传开了。当然对于传说,了解...
  • 本书延续了ivor horton讲解编程语言的独特方法,从中读者可以学习visual c++ 2008的基础知识,了解如何使用mfc进行本地iso/ansi c++ windows应用程序开发以及如何使用windows forms进行c++/cli windows应用程序开发...
  • Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //客户一个感谢...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     //客户一个感谢消息,消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener  在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息...
  • 如果没有发现你需要的容器类,那么你就真的需要自行扩展了,当然如果你完成了扩展,可以个PR,或者让我知道,我可以加入到 autolayout-widget中方便他人,ps:需要用到哪个copy就好了,不要直接引用autolayout-...
  • 如何用友好的方式去展现沉闷繁冗的数据</li><li>下个月就年终奖!!!</li><li>为了说明可视化的方式,用一个简单的log举例子</li></ul> <p><img alt="" src=...
  • 本书的目的就是帮助读者了解c++是如何支持编程技术的,使读者能从中获得新的理解,从而成为一名优秀的编程人员和设计人员。适合做高校面向对象编程课程的教科书,也可作为c++爱好者的参考书。 [center] [a href=...
  • c语言编写单片机技巧

    2009-04-19 12:15:17
    而且单片机开发应用需要软硬件结合,所以不能只满足于编程技巧如何完美,平时也要注意硬件知识的积累,多上上电子论坛网站,买一些相关杂志。可能的话,可以到ic37去买一些小零件,自己搭一个小系统让它工作起来。 ...
  • C++程序设计语言(特别版)--源代码

    热门讨论 2012-04-23 07:33:51
    本书的目的就是帮助读者了解c++是如何支持编程技术的,使读者能从中获得新的理解,从而成为一名优秀的编程人员和设计人员。适合做高校面向对象编程课程的教科书,也可作为c++爱好者的参考书。 [center] [a href=...
  • 本书的目的就是帮助读者了解c++是如何支持编程技术的,使读者能从中获得新的理解,从而成为一名优秀的编程人员和设计人员。适合做高校面向对象编程课程的教科书,也可作为c++爱好者的参考书。 [center] [a href=...
  • 释放某话路设备中的继电誉或改变控制电位,以执行据铃、码等功能 控制泵统的一般逻辑结构包括哪儿部分? 答: 接口存储番和主处理器三部分 32.垄制系统的电路结构组成奶何? 答:接口、存储器、总线、CPU 33.呼叫处理件...
  • 都会有人给你抱怨:要是这里支持 xxx 参数就好了。 毕竟使用了组件,就一定不如自己定制的拓展性更强,节省了劳动力,就要付出被约束的代价,Fit 作为一个大量被业务线使用的组件库&#...
  • 又考虑到目前很多使用第三方工具用Vue或React写小程序,我就在思考:“反正本质上就是一个网页,那为什么不原生内置Vue让用户直接用Vue的语法写小程序呢?”。 所以当时定了一个基本方向&...
  • •进程管理:又称处理机管理,实质上是对处理机执行“时间”的管理,即如何将CPU真正合理地分配每个任务。 4、表征操作系统的属性 主要有:响应比,并发性,信息的共享、保密与保护,可扩充性、可移植...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    2.3 开 工 具 .17 2.4 小 结 .19 第三章 编写第一个应用程序 .20 3.1 Welcome 程序 .20 3.2 代 码 分 析 .20 3.3 运 行 程 序 .23 .4 添 加 注 释 .25 3.5 小 结 .27 第二部分 C#程序设计基础.28 ...
  • C#微软培训资料

    2014-01-22 14:10:17
    2.3 开 工 具 .17 2.4 小 结 .19 第三章 编写第一个应用程序 .20 3.1 Welcome 程序 .20 3.2 代 码 分 析 .20 3.3 运 行 程 序 .23 .4 添 加 注 释 .25 3.5 小 结 .27 第二部分 C#程序设计基础.28 ...
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    知道的不多,但提起国内的暴风影音,我想知道的就多了,其实暴风影音就是Media Player Classic,暴风影音只是同我一样从Gabest官方下载到了Media Player Classic的源码,不同的是,暴风影音将Media Player Classic改成...

空空如也

空空如也

1 2
收藏数 35
精华内容 14
关键字:

如何发位置定位给人