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

一、实验说明

1. Python 版本Python 3.x

2. 知识点

实验中将会学习并实践以下知识点:PyQt5 框架基本GUI组件的使用

PyQt5 中信号和槽的用法

PyQt5 中 QWebView 的基本用法

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

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

3. 效果图

二、理论基础

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

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

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

四、实现步骤

在代码实现之前我们先看一下我们要实现的效果:

界面用到了 QLineEdit、QPushButton 以及 QWebView。

QLineEdit 允许用户输入或者编辑单行的纯文本,我们用它来显示我们的图片路径。

QPushButon 是一个按钮,当用户点击的时候会发射clicked()信号。我们用它来实现一个选择图片的按钮和定位的按钮。

QWebView 是一个可以显示和编辑Web文档的组件,相当于一个最简单的浏览器,我们用它来加载地图,实现定位功能。

整个过程就是使用 piexif 库获取图片 Exif 信息中的 GPS 数据,并通过 PyQt5 中的 QWebView显示百度地图,并根据百度地图提供的 URI API 在百度地图中定位我们获得的经纬度。

现在来看一下相片定位的效果,同学们最好用自己手机拍摄出的图片来测试。因为上传到网络上的图片一般都会进行处理,Exif 信息可能会丢失,也就无法完成相片拍摄位置的定位。

可以看到地图中标注了一个 红点,这个就是我测试相片的拍摄位置。

五、总结

通过本次实验我们应该对 PyQt5 这个 GUI 库有所了解,并能了解 GUI 应用程序的开发思路。同时应该了解如何从相片中获取 Exif 信息,以及如何用 QWebView 加载百度地图。当然这次实验仅仅利用了 GPS 信息,同学们还可以通过其他信息来扩展一下思路,写一个有用处的脚本。

本项目实现的完整教程和代码详解可以在实验楼查看,立即【开始实验】。

更多Python经典项目:Python全部 - 课程

如果您也想通过实验楼课程的形式分享自己的实践经验,欢迎投稿给我们:项目投稿通道

如何用python实现地图定位_基于 PyQt5 实现地图中定位相片拍摄位置相关推荐

  1. python卡尔曼滤波室内定位_基于Unscented卡尔曼滤波的室内定位

    Computer Engineering and Applications 计算机工程与应用 2014 , 50 ( 14 ) 1 引言 无线传感器网络是 21 世纪 21 个最具影响力的技术 之一, ...

  2. 多传感器融合定位 第四章 点云地图构建及基于点云地图定位

    多传感器融合定位 第四章 点云地图构建及基于点云地图定位 代码下载 https://github.com/kahowang/sensor-fusion-for-localization-and-map ...

  3. 室内定位:基于LoRa网络的蓝牙定位 BLE-2

    ①适用说明 基于LoRa网络的蓝牙定位是依赖LoRa作为数据回传网络,通过在场所内部署安装蓝牙信标设备作为定位依据,移动定位终端设备如定位胸牌或定位手表主动扫描环境中的iBeacon信号并通过LoRa ...

  4. python卡尔曼滤波室内定位_基于核函数与卡尔曼滤波的室内定位方法

    随着当今社会的发展,基于位置的服务变得越来越重要.室外定位技术以全球定位系统为基础,包括美国的GPS定位系统,俄罗斯的GLONASS定位系统以及我国自主研制的北斗卫星导航定位系统,利用这些定位系统可以 ...

  5. 如何用python做词云图_科学网—如何用Python做词云?(基础篇视频教程) - 王树义的博文...

    只需要花10几分钟,跟着教程完整做一遍,你就能自己用Python做出词云了. <如何用Python做词云?>图文版发布于2017年6月,是我数据科学系列教程中的第一篇. 目前仅简书一个平台 ...

  6. python收集数据程序_基于Python语言的互联网数据收集软件的设计

    软件建立所需的工具及其版本 编写环境与 IDE Python3.5.2 Windows10 PyCharm 2016.3 Sublime Text3 第三方库与版本号 Requests 2.12.1 ...

  7. 地图距离算法_基于权重的地图匹配技术

    文章目录 目录 地图匹配技术概览 文章目录 前言 一.地图匹配概述 二.轨迹预处理 1.降噪 1.1 中值滤波 1.2 极值滤波 1.3 分段 1.4 插值算法 三.基于权重的地图匹配算法 3.1.计 ...

  8. html5经纬度定位 源码_基于浏览器的HTML5地理定位

    地理位置(Geolocation)是 HTML5 的重要特性之一,提供了确定用户位置的功能,借助这个特性能够开发基于位置信息的应用.今天这篇文章向大家介绍一下 HTML5 地理位置定位的基本原理和一个 ...

  9. 煤矿,隧道,管廊高精度人员定位_基于UWB技术的TWR一维定位方案介绍

    针对工业/汽车.物流仓储.传统制造业.电力行业.医疗保健.高危化工业.隧道/管廊.建筑工地.公检司法的重点安保区域等高精度人员定位需求,SKYLAB推出了基于UWB技术的定位系统.通过在定位区域内部署 ...

最新文章

  1. python简介怎么写-python中如何写类
  2. 神策数据出席 TIC 2018 大会,共同赋能大数据时代
  3. OpenGL parallax mapping视差映射的实例
  4. Node.js基本讲解
  5. leetcode-728-Self Dividing Numbers
  6. socket编程-客户端向服务器发送字符串,传文件
  7. session的基本原理
  8. 基于高程的地面点云信息提取
  9. [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配...
  10. 计算机老师一句话,40句感恩教师的一句话
  11. 485芯片方向切换的几种方式及原理
  12. 首款基于龙芯的域名系统服务器发布,首款基于龙芯CPU的国产域名服务器发布
  13. 自助建站的优缺点总结
  14. S-MSCKF(前端)代码解读
  15. AS608指纹模块简要说明
  16. 国内哪家云服务器好?
  17. Flink SQL和Table编程和案例
  18. BXA联手ONEROOT推出数字金融服务
  19. 服务网格——服务网格架构(概念原理2)
  20. matlab在机电一体化的仿真图,基于MATLABSimulink的机电一体化系统的仿真分析实验...

热门文章

  1. jstl视图_使用JSTL视图探索Spring Controller
  2. 使用Spring Boot,JHipster和React构建照片库PWA
  3. JVM体系结构:JVM类加载器和运行时数据区
  4. macosx jdk_MacOSX环境上的多个Java JDK
  5. 谷歌guava_Google Guava BloomFilter
  6. guice spring_Spring vs Guice:重要的一个关键区别
  7. jrockit_1.6下载_Oracle JRockit Mission Control 4.1发布
  8. tp框架 db::name_玩! 框架:为什么我会爱上它
  9. datanucleus_DataNucleus 3.0与Hibernate 3.5
  10. 增压的jstack:如何以100mph的速度调试服务器