GPS坐标显示在百度地图上(Qt+百度地图)
Qt在5.6以后的版本就不支持webview控件了,这里我用的是Qt5.4的版本,里面还有这个控件;
下面简单介绍下Qt与html中的javascript调用交互过程;
一、整体实现介绍
在html中,通过javascript调用百度地图API(这里需要申请成为百度地图开放API开发者,很好申请的),来显示地图;
qt调用javascript方法,来传递GPS坐标信息,通过javascript的方法,
把经纬度坐标传递给百度地图,显示出位置
二、上代码
首先是javascript和html代码,这个文件直接通过浏览器打开,就可以看到地图了:
这里大部分代码是百度地图API的demo里的。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";}
</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=填上你自己的百度应用AK"></script>
<title>GPS转百度</title>
</head>
<body>
<div id="allmap"></div>
</body>
</html>
<script type="text/javascript">
// 百度地图API功能
//地图初始化
var bm = new BMap.Map("allmap");
bm.centerAndZoom("郑州", 12);
bm.addControl(new BMap.NavigationControl()); // 添加平移缩放控件
//bm.addControl(new BMap.ScaleControl()); // 添加比例尺控件
bm.enableScrollWheelZoom(); //启用滚轮放大缩小,默认禁用
bm.enableContinuousZoom(); //启用地图惯性拖拽,默认禁用
var sy = new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW, {
scale: 0.6,//图标缩放大小
strokeColor:'#fff',//设置矢量图标的线填充颜色
strokeWeight: '2',//设置线宽
});
var icons = new BMap.IconSequence(sy, '10', '30');
var polyline;
var flag = 0;
function drowLine(point)
{
if (flag)
{
//alert(flag);
polyline.setPath(point);
}
else
{
flag = 1;
polyline =new BMap.Polyline(point, {
//enableEditing: false,//是否启用线编辑,默认为false
//enableClicking: true,//是否响应点击事件,默认为true
//icons:[icons],
strokeWeight:'3',//折线的宽度,以像素为单位
strokeOpacity: 0.8,//折线的透明度,取值范围0 - 1
strokeColor:"#18a45b" //折线颜色
});
bm.addOverlay(polyline);
}
}
var marker;
//坐标转换完之后的回调函数
translateCallback = function (data){
if(data.status === 0) {
if (marker)
{
marker.setPosition(data.points[0]);
poisArray.push(data.points[0]);
drowLine(poisArray);
if ( poisArray.length >= 10000) //防止内存一直增加,会卡,大于1w条时,清空一下
{
poisArray=[];
poisArray.push(data.points[0]);
}
}
else
{
poisArray.push(data.points[0]);
marker = new BMap.Marker(data.points[0]);
bm.addOverlay(marker);
}
bm.setCenter(data.points[0]);
}
}
var polylineAttr = [];
var poisArray = [];
function doLocal(longitude, latitude) //给qt调用的接口
{
var OPoint = new BMap.Point(longitude,latitude);
var convertor = new BMap.Convertor();
var pointArr = [];
pointArr.push(OPoint);
convertor.translate(pointArr, 1, 5, translateCallback);
}
</script>
这里的
doLocal(longitude, latitude)
就是留给Qt调用的方法;
下面是qt的实现;qt的比较简单的:
1、界面
通过qtcreater,画个简单的界面:
主要webview控件,我这边做了个tcp监听,用于做批量gps数据输入用的;
2、代码实现
这里主要介绍与调用javascript有关的代码,tcp监听的不做介绍了;
下面是html文件路径,初始化给webview
QFileInfo xmlinfo("./test.html");
connect(ui->webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),
this, SLOT(addObjectToJs()));
ui->webView->load(QUrl::fromLocalFile(xmlinfo.absoluteFilePath()));
调用javascript接口,送gps数据:
通过
evaluateJavaScript
调用javascript的接口:
void testWebMap::on_modifyButton_clicked()
{
QString longitude=ui->longitude->text();
QString latitude=ui->latitude->text();
convertGpsData(latitude,latitude,2);
convertGpsData(longitude,longitude,3);
QString fun=QString("doLocal(\"%1\",\"%2\");").arg(longitude).arg(latitude);
qDebug()<<"longitude: "<<longitude<<", latitude: "<<latitude ;
qDebug()<<"fun: "<<fun ;
ui->webView->page()->mainFrame()->evaluateJavaScript(fun);
}
源代码也上传到csdn上了,供大家参考:https://download.csdn.net/download/wuquan_1230/10295999
上个效果图:
下面是带有轨迹的回放:
个人微信服务号同步推送文章(微信公众号:fensnote):

GPS坐标显示在百度地图上(Qt+百度地图)的更多相关文章
- 通过百度地图API将百度坐标转换成GPS经纬度
百度地图API链接:http://developer.baidu.com/map/index.php?title=webapi/guide/changeposition 百度地图API中,有GPS坐标 ...
- GPS获取坐标 显示Google map偏差计算
用手机获取GPS坐标 显示在手机地图偏差大约在100-200米左右,我把坐标放在 Maps.google.com 搜索坐标定位则相当精确. 可能是.....为了安全吧故意加的偏差 不过可以计算偏差使位 ...
- CAD数据分块,偏移校准,加载到百度地图、高德地图、谷歌等地图上
前面分享过一篇如何将CAD海量数据显示在百度地图上(百度地图Canvas实现十万CAD数据秒级加载),但是很多开发者在CAD数据提取时遇到了问题,所以接下来的文章将介绍如何将CAD数据提取. 准备软件 ...
- vue 实现高德坐标转GPS坐标
vue 实现高德坐标转GPS坐标 首先介绍一下常见的几种地图的坐标类型: WGS-84:这是一个国际标准,也就是GPS坐标(Google Earth.或者GPS模块采集的都是这个类型). GCJ-02 ...
- H5端调起百度地图、腾讯地图app
来自一个需求的总结: 在微信公众号中根据地图上的marker和label,或者搜索结果点击调起地图APP进行导航. 一开始是使用百度地图进行开发,后面转腾讯是因为微信不允许不是自家或者合作方的APP在 ...
- html5定位并在百度地图上显示
在开发移动端 web 或者webapp时,使用百度地图 API 的过程中,经常需要通过手机定位获取当前位置并在地图上居中显示出来,这就需要用到html5的地理定位功能. navigator.geolo ...
- html5定位获取当前位置并在百度地图上显示
用html5的地理定位功能通过手机定位获取当前位置并在地图上居中显示出来,下面是百度地图API的使用过程,有需要的朋友可以参考下 在开发移动端 web 或者webapp时,使用百度地图 API 的过程 ...
- 通过百度地图API显示当前位置在地图上(图标显示)--第三方开源--百度地图(二)
1.下载百度地图的demo,下载地址:http://lbsyun.baidu.com/sdk/download?selected=mapsdk_basicmap,mapsdk_searchfuncti ...
- 【百度地图API】如何在地图上添加标注?——另有:坐标拾取工具+打车费用接口介绍
原文:[百度地图API]如何在地图上添加标注?--另有:坐标拾取工具+打车费用接口介绍 摘要: 在这篇文章中,你将学会,如何利用百度地图API进行标注.如何使用API新增的打车费用接口. ------ ...
随机推荐
- selenium 下拉到页面最底端
selenium操控浏览器下拉到页面最底端: https://www.cnblogs.com/TTyb/p/7662430.html #!/usr/bin/env python # -*- codin ...
- 服务器创建tensorflow环境,nni自动调参记录
一.anaconda安装记录 1.1 下载安装脚本:wget https://repo.anaconda.com/archive/Anaconda3-5.2.0-Linux-x86_64.sh 1.2 ...
- bzoj1745[Usaco2005 oct]Flying Right 飞行航班*
bzoj1745[Usaco2005 oct]Flying Right 飞行航班 题意: n个农场,有k群牛要从一个农场到另一个农场(每群由一只或几只奶牛组成)飞机白天从农场1到农场n,晚上从农场n到 ...
- 小谢第36问:elemet - table表格修改后表格行高亮显示且定位到当前行当前页
第一次做这个需求得时候很乱,总是在表格页和修改页徘徊,总觉得什么都会,但是就是做不出自己想要得效果 其实如果先把思路搞清楚,这个问题得知识点却是不多,以下是我对表格高亮显示得思路: 首先,我会从已知得 ...
- disconf原理解析
前有了解过disconf,也知道它是基于zookeeper来做的,特意写了文章记录下自己的见解.如有错误,欢迎指正. 1.disconf-web会在启动时,将自身的host和配置文件注册到zookee ...
- 【软件测试】Python自动化软件测试算是程序员吗?
今天早上一觉醒来,突然萌生一个念头,[软件测试]软件测试算是程序员吗?左思右想,总感觉哪里不对.做了这么久的软件测试,还真没深究过这个问题. 基于,内事问百度的准则: 结果…… 我刚发 ...
- 转:Oracle 数据泵详解
一.EXPDP和IMPDP使用说明 Oracle Database 10g引入了最新的数据泵(Data Dump)技术,数据泵导出导入(EXPDP和IMPDP)的作用 1)实现逻辑备份和逻辑恢复. 2 ...
- Ethical Hacking - Web Penetration Testing(12)
XSS VULNS XSS - CROSS SITE SCRIPTING VULNS Allow an attacker to inject javascript code into the page ...
- Ethical Hacking - POST EXPLOITATION(3)
Spying - Capturing Key Strikes & Taking Screen Shots Log all mouse/keyboard events > keyscan- ...
- 【JVM之内存与垃圾回收篇】方法区
方法区 前言 这次所讲述的是运行时数据区的最后一个部分 从线程共享与否的角度来看 ThreadLocal:如何保证多个线程在并发环境下的安全性?典型应用就是数据库连接管理,以及会话管理 栈.堆.方法区 ...