如何用python实现地图定位_基于 PyQt5 实现地图中定位相片拍摄位置
项目简介:本次项目主要学习了如何查找相片中的 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 实现地图中定位相片拍摄位置相关推荐
- python卡尔曼滤波室内定位_基于Unscented卡尔曼滤波的室内定位
Computer Engineering and Applications 计算机工程与应用 2014 , 50 ( 14 ) 1 引言 无线传感器网络是 21 世纪 21 个最具影响力的技术 之一, ...
- 多传感器融合定位 第四章 点云地图构建及基于点云地图定位
多传感器融合定位 第四章 点云地图构建及基于点云地图定位 代码下载 https://github.com/kahowang/sensor-fusion-for-localization-and-map ...
- 室内定位:基于LoRa网络的蓝牙定位 BLE-2
①适用说明 基于LoRa网络的蓝牙定位是依赖LoRa作为数据回传网络,通过在场所内部署安装蓝牙信标设备作为定位依据,移动定位终端设备如定位胸牌或定位手表主动扫描环境中的iBeacon信号并通过LoRa ...
- python卡尔曼滤波室内定位_基于核函数与卡尔曼滤波的室内定位方法
随着当今社会的发展,基于位置的服务变得越来越重要.室外定位技术以全球定位系统为基础,包括美国的GPS定位系统,俄罗斯的GLONASS定位系统以及我国自主研制的北斗卫星导航定位系统,利用这些定位系统可以 ...
- 如何用python做词云图_科学网—如何用Python做词云?(基础篇视频教程) - 王树义的博文...
只需要花10几分钟,跟着教程完整做一遍,你就能自己用Python做出词云了. <如何用Python做词云?>图文版发布于2017年6月,是我数据科学系列教程中的第一篇. 目前仅简书一个平台 ...
- python收集数据程序_基于Python语言的互联网数据收集软件的设计
软件建立所需的工具及其版本 编写环境与 IDE Python3.5.2 Windows10 PyCharm 2016.3 Sublime Text3 第三方库与版本号 Requests 2.12.1 ...
- 地图距离算法_基于权重的地图匹配技术
文章目录 目录 地图匹配技术概览 文章目录 前言 一.地图匹配概述 二.轨迹预处理 1.降噪 1.1 中值滤波 1.2 极值滤波 1.3 分段 1.4 插值算法 三.基于权重的地图匹配算法 3.1.计 ...
- html5经纬度定位 源码_基于浏览器的HTML5地理定位
地理位置(Geolocation)是 HTML5 的重要特性之一,提供了确定用户位置的功能,借助这个特性能够开发基于位置信息的应用.今天这篇文章向大家介绍一下 HTML5 地理位置定位的基本原理和一个 ...
- 煤矿,隧道,管廊高精度人员定位_基于UWB技术的TWR一维定位方案介绍
针对工业/汽车.物流仓储.传统制造业.电力行业.医疗保健.高危化工业.隧道/管廊.建筑工地.公检司法的重点安保区域等高精度人员定位需求,SKYLAB推出了基于UWB技术的定位系统.通过在定位区域内部署 ...
最新文章
- python简介怎么写-python中如何写类
- 神策数据出席 TIC 2018 大会,共同赋能大数据时代
- OpenGL parallax mapping视差映射的实例
- Node.js基本讲解
- leetcode-728-Self Dividing Numbers
- socket编程-客户端向服务器发送字符串,传文件
- session的基本原理
- 基于高程的地面点云信息提取
- [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配...
- 计算机老师一句话,40句感恩教师的一句话
- 485芯片方向切换的几种方式及原理
- 首款基于龙芯的域名系统服务器发布,首款基于龙芯CPU的国产域名服务器发布
- 自助建站的优缺点总结
- S-MSCKF(前端)代码解读
- AS608指纹模块简要说明
- 国内哪家云服务器好?
- Flink SQL和Table编程和案例
- BXA联手ONEROOT推出数字金融服务
- 服务网格——服务网格架构(概念原理2)
- matlab在机电一体化的仿真图,基于MATLABSimulink的机电一体化系统的仿真分析实验...
热门文章
- jstl视图_使用JSTL视图探索Spring Controller
- 使用Spring Boot,JHipster和React构建照片库PWA
- JVM体系结构:JVM类加载器和运行时数据区
- macosx jdk_MacOSX环境上的多个Java JDK
- 谷歌guava_Google Guava BloomFilter
- guice spring_Spring vs Guice:重要的一个关键区别
- jrockit_1.6下载_Oracle JRockit Mission Control 4.1发布
- tp框架 db::name_玩! 框架:为什么我会爱上它
- datanucleus_DataNucleus 3.0与Hibernate 3.5
- 增压的jstack:如何以100mph的速度调试服务器