基于 PyQt5 实现地图中定位相片拍摄位置

物联网

  项目简介:本次项目主要学习了如何查找相片中的 Exif 信息,并通过 Exif 信息中的 GPS 数据在百度地图中进行定位标点,以确定相片的拍摄地点。本次实验的目的旨在通过包含 GPS 信息的相片进行取证调查,当然个人娱乐也可以!

  本项目发布在 实验楼 ,完整教程及在线练习地址: 基于 PyQt5 实现地图中定位相片拍摄位置

  一、实验说明

  1. Python 版本

  Python 3.x

  2. 知识点

  实验中将会学习并实践以下知识点:

  PyQt5 框架基本GUI组件的使用

  PyQt5 中信号和槽的用法

  PyQt5 中 QWebView 的基本用法

  百度地图 URL API 标点功能的用法

  利用 piexif 库实现相片 GPS 信息的提取

  3. 效果图

物联网

  二、理论基础

  以下内容整理自百度百科、维基百科,参考链接:

  Exif

  PyQt5

  Qt

  百度地图-URI API

  1. Exif

  Exif 是一种图像文件格式,它的数据存储与 JPEG 格式是完全相同的。实际上 Exif 格式就是在 JPEG 格式头部插入了数码照片的信息,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及 GPS 全球定位系统数据、缩略图等。这节课我们只用到了 Exif 中的 GPS信息,将 GPS信息 提取出之后,我们就可以用 经纬度 来定位相片拍摄的位置了。

  2. PyQt5

  PyQt 是由 Phil Thompson 开发的一个创建 GUI 应用程序的工具包。它是 Python 编程语言和 Qt 库的成功融合。目前有两个分支,分别是 PyQt5 和 PyQt4。PyQt4 基于 Qt4 开发,PyQt5 则是 Python 基于 Qt5 开发的。由于 Qt5 相对于 Qt4 来说增加了很多新特性,所以这次实验我们将采用 PyQt5 来实现本次实验的 GUI。

  3. 信号与槽

  信号 与 槽是 Qt 中的 核心机制。在创建事件循环之后,通过建立信号与槽的连接可以实现对象之间的通信。当信号发射时,连接的槽函数将会自动执行。在 PyQt5 中信号和槽通过 object.signal.connect() 的方式连接。

  4. 百度地图-URI API

  百度地图URI API是为开发者提供直接调起百度地图产品(百度Web地图、百度地图手机客户端)以满足特定业务场景下应用需求的程序接口,我们只需按照接口规范构造一条标准的URI,就可以在PC和移动端浏览器或移动开发应用中调起百度地图产品,进行地图展示和检索、线路查询、导航等功能,无需进行复杂的地图功能开发。在本次试验中,我们只需要用到百度地图-URI API中的 反地址解析 接口,调用该接口可调起PC或Web百度地图,经过逆地理编码后,以标注形式显示出位置和地址信息,详细文档请参考 web端URI API 。

  三、环境配置

  工欲善其事,必先利其器,现在我们就来把我们的开发环境搭建起来。PyQt5 依赖 Qt5,我们先把 Qt 安装上。

  新建个下载目录:

  mkdr download & cd download

物联网

  下载 Qt 5.7.0:

  wget http://mirror.bit.edu.cn/qtproject/archive/qt/5.7/5.7.0/qt-opensource-linux-x64-5.7.0.run

物联网

  下载下来可能没有执行权限,我们更改一下权限:

  sudo chmod 777 qt-opensource-linux-x64-5.7.0.run

  开始安装,一路 next 就可以了:

  ./qt-opensource-linux-x64-5.7.0.run

物联网

  接下来安装 PyQt5:

  sudo apt-get install python3-pyqt5

  这样安装完 PyQt5 默认不带 QWebKit 模块,现在我们需要手动安装一下:

  sudo apt-get install python3-pyqt5.qtwebkit

  至此我们的开发环境就搭建好了。