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+百度地图)的更多相关文章

  1. 通过百度地图API将百度坐标转换成GPS经纬度

    百度地图API链接:http://developer.baidu.com/map/index.php?title=webapi/guide/changeposition 百度地图API中,有GPS坐标 ...

  2. GPS获取坐标 显示Google map偏差计算

    用手机获取GPS坐标 显示在手机地图偏差大约在100-200米左右,我把坐标放在 Maps.google.com 搜索坐标定位则相当精确. 可能是.....为了安全吧故意加的偏差 不过可以计算偏差使位 ...

  3. CAD数据分块,偏移校准,加载到百度地图、高德地图、谷歌等地图上

    前面分享过一篇如何将CAD海量数据显示在百度地图上(百度地图Canvas实现十万CAD数据秒级加载),但是很多开发者在CAD数据提取时遇到了问题,所以接下来的文章将介绍如何将CAD数据提取. 准备软件 ...

  4. vue 实现高德坐标转GPS坐标

    vue 实现高德坐标转GPS坐标 首先介绍一下常见的几种地图的坐标类型: WGS-84:这是一个国际标准,也就是GPS坐标(Google Earth.或者GPS模块采集的都是这个类型). GCJ-02 ...

  5. H5端调起百度地图、腾讯地图app

    来自一个需求的总结: 在微信公众号中根据地图上的marker和label,或者搜索结果点击调起地图APP进行导航. 一开始是使用百度地图进行开发,后面转腾讯是因为微信不允许不是自家或者合作方的APP在 ...

  6. html5定位并在百度地图上显示

    在开发移动端 web 或者webapp时,使用百度地图 API 的过程中,经常需要通过手机定位获取当前位置并在地图上居中显示出来,这就需要用到html5的地理定位功能. navigator.geolo ...

  7. html5定位获取当前位置并在百度地图上显示

    用html5的地理定位功能通过手机定位获取当前位置并在地图上居中显示出来,下面是百度地图API的使用过程,有需要的朋友可以参考下 在开发移动端 web 或者webapp时,使用百度地图 API 的过程 ...

  8. 通过百度地图API显示当前位置在地图上(图标显示)--第三方开源--百度地图(二)

    1.下载百度地图的demo,下载地址:http://lbsyun.baidu.com/sdk/download?selected=mapsdk_basicmap,mapsdk_searchfuncti ...

  9. 【百度地图API】如何在地图上添加标注?——另有:坐标拾取工具+打车费用接口介绍

    原文:[百度地图API]如何在地图上添加标注?--另有:坐标拾取工具+打车费用接口介绍 摘要: 在这篇文章中,你将学会,如何利用百度地图API进行标注.如何使用API新增的打车费用接口. ------ ...

随机推荐

  1. 正则表达式以及sed,awk用法 附带案例

    则表达式 基本正则 ^    $    [  ]   [^]   .   *    \{n,m\}   \{n,\}    \(ro\)\{2\}   \(\)   扩展正则 egrep grep - ...

  2. web常用的unicode字符集

    也不知道出处

  3. 数据可视化之powerBI技巧(三)这个Power BI技巧很可爱:利用DAX制作时钟

    周末放松一下,给大家分享一个小技巧,仅利用DAX制作一个简易的时钟. 时钟效果如下: 这个时钟的制作只需一个度量值,你信吗? 事实上确实如此,制作步骤介绍如下: 1,新建参数,生成一个数字序列作为小时 ...

  4. Django之Model、Form、ModelForm区别

    本节内容: 1:Model               https://www.cnblogs.com/shuai1991/p/10844662.html 2:Form                 ...

  5. 05-Python模块

    一.简介 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py.模块可以被其他程序导入来使用模块具有的功能.这也是使用python标准库的方式. import time start_time ...

  6. Docker基础使用

    Docker篇 CentOS 安装Docker - 菜鸟教程 安装须知: 1.Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更 ...

  7. Java File类基础解析 1

    Java File类基础解析 1 File类的构造方法 public File(String pathname) :通过给定的路径名字符转换为抽象路径名来创建新的File实例 String path ...

  8. Ethical Hacking - GAINING ACCESS(4)

    SERVER SIDE ATTACKS - METASPLOIT Metasploit is an exploit development and execution tool. It can als ...

  9. 围绕一个 volatile 关键字居然可以问出来 16 个问题

    对于 Java 每次面试就会想到多线程,多线程问题基本跑不了要问一下 volalite 关键字,可是我万万没想到居然一个 volatile 关键字可以连续问题出来 16 个问题!看下你能回答出来几个? ...

  10. 《闲扯Redis六》Redis五种数据类型之Hash型

    一.前言 Redis 提供了5种数据类型:String(字符串).Hash(哈希).List(列表).Set(集合).Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要. ...