
Qt-地图综合应用
以Qt作为开发环境,主要讲解分析用Qt编写的一系列地图相关的模块内容,开放核心代码,图文并茂。
feiyangqingyun
拿人钱财与人消灾,人生江湖如此,程序江湖亦如此!
-
原创 Qt编写地图综合应用27-点聚合
一、前言在地图上查询结果通常以标记点的形式展现,但是如果标记点较多,不仅会大大增加客户端的渲染时间,让客户端变得很卡,而且会让人产生密集恐惧症。为了解决这一问题,我们需要一种手段能在用户有限的可视区域范围内,利用最小的区域展示出最全面的信息,而又不产生重叠覆盖。这就是点聚合功能的由来,百度地图内置类点聚合的功能,在项目初期可能只有个位数的设备需要在地图上显示,随着设备数量的增多,会发现标注点不仅密密麻麻而且变得越发卡顿,这样就需要有个合并的功能,就某个区域的点都合并到一个点图标展示,当用户单击该合并后的点2021-01-28 09:23:592395
5
-
原创 Qt编写地图综合应用26-覆盖物交互
一、前言百度地图本身提供了非常友好完善的JS函数接口用于添加各种覆盖物,比如标注点、矩形区域、圆形区域、不规则线段、弧形等,基本上涵盖了各种应用场景,官方的文档和示例也是比较完善的,虽然示例用的都是html+js,其实只要是会写程序的程序员都看得懂,比如Qt要与他交互的话直接传统的交互方式就行,依葫芦画瓢将对应的js函数写在网页文件中。百度地图其实提供了浮动工具栏,在线地图和离线地图都支持,打开浮动工具栏以后,直接在浮动工具栏选择对应的覆盖物直接地图上绘制就行,然后用js方法去获取对应覆盖物的位置坐标等信2021-01-26 10:15:15336
0
-
原创 Qt编写地图综合应用25-echart动态交互
一、前言之前用echart组件做过各种效果,随着各种现场应用现场项目的增多,各种需求也都慢慢增加起来,为了满足各种不同类型的需求,近期又抽空重新整理和封装了echart类,主要就是增加了不少的js函数处理,增加了各种属性和交互,比如单击对应的闪烁点可以响应单击事件,然后Qt这边接收到事件以后进行对应的处理,还比如每个闪烁点都可以设置不一样的颜色和大小,这样区分显示一目了然,当然这些的前提都是echart要支持才行,从官网的手册来看,用法还是介绍的非常详细的,模型框架都是统一的,各种属性和函数的命名基本上都2021-01-25 09:10:39949
3
-
原创 Qt编写地图综合应用24-miniblink内核
一、前言用Qt做项目过程中,遇到需要用到浏览器控件的项目,可能都会绕不开一个问题,那就是从Qt5.6版本开始mingw编译器的Qt构建套件,不再提供浏览器控件了,之前还可以用webkit控件,这下很多项目要么选择5.6以下版本,要么选择msvc的构建套件,而且大部分的msvc构建套件还不自带浏览器控件,也需要自己编译,只有原配的构建套件比如Qt5.9+VS2015、Qt5.12+VS2017这种搭配才可能有浏览器控件,不然就算你勾选了浏览器控件也不会安装,这样就使得很多依赖浏览器控件的项目比较被动,于是必2021-01-21 09:24:38912
5
-
原创 Qt编写地图综合应用23-标注点交互
一、前言地图项目应用中,标注点的交互使用频率非常高,这应该是最常用的场景,比如从数据库中读取出来设备的信息包括经纬度坐标,然后需要在地图上显示对应的设备,这就需要用addMarker函数来动态添加标注点,关于封装的这个函数,陆陆续续经历过好多年的完善,很奇怪为啥这么简单的功能还需要完善,其实这也是实战项目应用中不断积累的,满足各种简单的和复杂的应用场景而来,这个函数带有很多参数,至少10个,接下来就罗列下具体的参数含义以及遇到的需求场景。v0.1:addMarker(name, point),很简单,2021-01-20 09:55:48334
0
-
原创 Qt编写地图综合应用22-动态轨迹
一、前言上一篇文章写道拿到路径规划的轨迹点坐标集合,并且已经可以通过调用addPolyline绘制线段的形式将轨迹点绘制,接下来就是要如何动态的绘制这些轨迹点,最简单的方法就是开个定时器挨个取出下一个经纬度坐标,然后调用封装好的moveMarker函数将经纬度坐标传过去,异步交互使得标注点在移动,也可将将定时器的方法写在网页的js函数中,但是就不够灵活了,还不如直接用Qt的定时器进行控制更方便一些,这里要特别注意的是轨迹点坐标传过来的是数组的数组,因为很可能是多段线条组成,所以需要循环取出来。近期在做机2021-01-18 15:21:281970
8
-
原创 Qt编写地图综合应用21-路径规划
一、前言近期重新将这个地图综合应用进行大幅度的改进更新升级,包括使用示例也做了非常多的改进和调整,其中就包括路径规划功能,之前只是调用了百度地图的JS交互接口,根据起始点坐标经纬度和结束点坐标经纬度,查询出合适的路线,而并木有将查询到的路径的轨迹点坐标集合取出来,用于其他处理比如发给机器人,让机器人按照这个轨迹点移动,为了确保取出来的轨迹点坐标集合是正确的,还可以将轨迹点用不同的颜色重新绘制出来,和查询路线得到的轨迹线路进行对比,高度重合就说明是对的。关于起始坐标和结束坐标,最开始做的是直接传入具体中文2021-01-17 14:37:15545
0
-
原创 Qt编写地图综合应用20-多浏览器内核
一、前言本人写Qt程序这么多年,比较喜欢支持多个Qt版本,尤其是钟情于支持任意Qt版本+任意系统+任意编译器,这句话说起来简单其实实现起来就不容易了,首先你得有个很多版本的测试环境,起码十几个Qt环境要的吧,四五种操作系统要的吧,还要安装各种VS版本免不了的,毕竟win上除了默认的mingw编译器还有很多人用的是msvc编译器,这么一大堆环境折腾下来,没有个1T硬盘是不够的,而且官网发布Qt版本...2020-04-23 09:04:54618
1
-
原创 Qt编写地图综合应用19-地图服务
一、前言国内提供地图服务的厂家基本上是五家,百度地图、高德地图、腾讯地图、搜狗地图、天地图,国外的一般还有谷歌地图、微软地图(BING地图),这几家的地图服务的api接口都大同小异,甚至很多函数的名字都一模一样,毕竟叫的很通俗,这样也很容易理解,除了引入的地图服务JS文件不同,对象名称不同,其他大多数都类似,这就给了程序员很方便的统一的思路,整体上的流程都如下:注册账号申请对应的秘钥秘钥可...2020-04-22 13:22:40796
1
-
原创 Qt编写地图综合应用18-地图模式
一、前言除了传统的街道图地图外,默认的一般都是街道图,还有卫星图、三维图等,其中又有叠加层,比如叠加路况图层和路网图层等,最近去了多家的地图官网看对应的api接口,总体上感觉现在都往2.5D或者3D这块发展,估计这也是未来的一个大趋势,记得有个长辈程序员,花了很多年专门研究opengl之类的玩意,将现有的电网系统换成了3D的,甚至取了个高大上的名字叫世界电网互联系统,直接可以旋转一个球体,查看各...2020-04-21 10:13:33716
1
-
原创 Qt编写地图综合应用17-地址经纬度互转
一、前言地址和经纬度互相转换的功能也经常用到,比如上次的路线方案查询的功能,之前官网是提供了直接输入出发地点和目的地的中文汉字,就可以查询到最优的路线,后面只支持输入出发地点和目的地的经纬度坐标了,这个就有点绕了,让用户输入什么经纬度坐标,那是个什么鬼?没有几个用户搞得懂的,所以就需要先将用户输入的出发地点和目的地的中文汉字先查询到对应的经纬度坐标,然后再传入路线查询的JS函数中查询结果即可,为...2020-04-20 11:26:29499
0
-
原创 Qt编写地图综合应用16-省市轮廓图下载
一、前言之前做获取边界点的时候,主要采用的是在线地图的方式,因为在线地图中直接内置了函数可以根据行政区域的名称来自动获取边界,其实这些边界就是一些点坐标集合连接起来的平滑线,然后形成的轮廓图,这种方式有个弊端就是只能在线的时候使用,而我们大部分的应用场景应该是离线的,甚至很多设备永远是离线的,根本不可能去联网获取信息,但是又想要这个各省市区域的轮廓图怎办呢,只能事先拿到下载到这些需要的轮廓图文件...2020-04-19 13:41:43402
0
-
原创 Qt编写地图综合应用15-添加删除清空重置点
一、前言在地图应用的相关项目中,在地图上标识一些设备点,并对点进行交互这个功能用的最多的,于是需要一套机制可以动态的添加、删除、清空、重置,重置的意思是将地图中的所有点的经纬度重新设置,其实就是先清空然后挨个重新添加所有点的信息,JS的异步交互功能非常强大,直接执行对应的JS函数就可以,没有必要刷新网页,最开始很多年前做的时候还不会JS,那时候想的最糟糕的办法就是写死在代码中,这样每次变动需要重...2020-04-18 09:49:19188
0
-
原创 Qt编写地图综合应用14-离线地图下载
一、前言网上其实有很多各种各样的离线地图下载器,大部分都是要收费的,免费的要么是限制了下载的瓦片数量或者级别,要么是下载的瓦片图打上了水印,看起来很难看,由于经常需要用到离线地图,摆脱这个限制,特意花了点时间重新研究了瓦片地图的原理,做了个离线地图下载器,其实瓦片地图下载没有那么复杂,其实就是从开放的几个服务器地址组建要请求的瓦片地图的地址,发送请求以后会自动将图片返回给你,你只需要拿到图片数据...2020-04-17 08:49:24554
0
-
原创 Qt编写地图综合应用13-获取边界点
一、前言获取边界点一般和行政区划搭配起来使用,比如用户输入一个省市的名称,然后自动定位到该省市,然后对该轮廓获取所有边界点集合输出到js文件,最后供离线使用,获取边界点还有一个功能就是获取当前区域内的左下角右上角等经纬度坐标,这个主要是供离线地图下载使用的,百度地图很好的提供了bdary.get(cityname, function(rs)的函数来获取行政区划的边界点集合,其中rs.bounda...2020-04-16 09:20:33251
0
-
原创 Qt编写地图综合应用12-路线查询
一、前言路线查询的功能只有在线地图才有,因为这个路线规划需要经常更新的,这个数据同步需要大量的人力物力去统计,所以这玩意必须放在服务器端,就算是类似于手机端一样的放在本地离线,也需要隔一段时间更新的,不然数据很可能不正确。路线查询也叫出行规划,基本上分成两大类,一种是开车的一种是不开车的,其中开车的又有多种策略供选择比如最少时间、最短距离、避开高速等,不开车的也有多种策略供选择比如最少时间、最少...2020-04-15 09:15:07360
0
-
原创 Qt编写地图综合应用11-动态添加
一、前言在添加设备点或者区域形状的时候,会考虑是直接静态的方式写入到网页中加载,还是动态js函数异步加载的方式,这个需要根据现场的实际需求来,如果只需要一次加载的话建议静态即可,如果运行期间还需要动态添加的话就采用动态的js函数交互的方法,绝大部分场景都是动态添加,毕竟这个是异步执行的,而且比较灵活,静态的方式写入到网页中加载开起来比较傻,数据都在网页中可以看到了,没有什么保密性可言,在前面两篇...2020-04-14 09:16:34282
0
-
原创 Qt编写地图综合应用10-点聚合
一、前言点聚合在地图相关应用中比较常用,比如在地图上查询结果通常以标记点的形式展现,但是如果标记点较多,不仅会大大增加客户端的渲染时间,让客户端变得很卡,而且会让人产生密集恐惧症,密密麻麻的一大堆点挤在一起。为了解决这一问题,我们需要一种手段能在用户有限的可视区域范围内,利用最小的区域展示出最全面的信息,而又不产生重叠覆盖,这个东西专业名词就叫点聚合,百度地图内置了方法可以设置点聚合BMapLi...2020-04-13 09:12:45214
0
-
原创 Qt编写地图综合应用9-行政区划
一、前言行政区划在地图应用中非常有用,行政区划是行政区域划分的简称,是国家为了进行分级管理而实行的区域划分,百度地图提供的内置的函数类支持传入行政区划的名称来获取对应的边界点集合,然后根据该集合来绘制点集合,最后将该点集合封闭连起来,就形成了行政区划的轮廓图了,使用下来发现地图本身提供的函数可以支持到县城,如果需要精确到乡镇那就需要其他办法获得,一种是直接加载事先准备好的乡镇的边界点集合的js文...2020-04-12 10:35:27649
0
-
原创 Qt编写地图综合应用8-地图交互
一、前言最常用的地图交互就几个,比如鼠标在地图上按下的时候可以拾取经纬度坐标,然后传给Qt程序,再比如对设置的设备点进行单击的时候,通知Qt程序单击了哪一个设备点,好让Qt程序识别并作出反应比如弹出对应点的详细信息或者视频预览等。让网页执行js函数这种单向的操作,其实无论何种浏览器内核都支持的,并不需要注入类或者添加qwebchannel.js文件之类的,你只需要放心大胆的调用runJavaSc...2020-04-11 10:56:53498
1
-
原创 Qt编写地图综合应用7-百度离线地图
一、前言离线地图的核心其实就是拿到这些瓦片地图文件,并不是离线地图的代码怎么写,其实离线地图的网页代码和在线地图的网页代码几乎一致的,主要就是将对应的依赖的js文件从在线的地址改成本地的地址,然后可能多几个特殊的js文件用来本地交互,离线地图完全具备在线地图的大部分功能,离线地图有个好处就是可以离线使用,根本不需要联网,而且也不需要什么秘钥,你只要搞到那些瓦片地图文件就随便你怎么摩擦了。其实在线...2020-04-10 08:52:27615
0
-
原创 Qt编写地图综合应用6-百度在线地图
一、前言百度在线地图的应用老早就做过,后面经过不断的完善才到今天的这个程序,除了基本的可以载入地图并设置一些相关的属性以外,还增加了各种js函数直接异步加载数据比如动态添加点、矩形、圆形、行政区划等各种。当然最大的是增加了离线地图的支持,当年这个离线地图拖了很久很久才去做,最终还是搞定了。在线地图没有太多的难点,搞一个简单的在线地图demo绝对是分分钟几行代码的事情,在使用过程中就是改进了几个...2020-04-09 09:32:07540
0
-
原创 Qt编写地图综合应用5-自适应拉伸
一、前言用过echart的人都会遇到一个问题,就算是代码中写了window.onresize = echart.resize,也只是横向自适应拉伸填充页面,垂直方向不会变化,除非指定高度才可以,这就比较郁闷了,为何echart本身不会自适应呢?按道理不应该啊,莫非实现起来很困难?好吧先不管这个了,这个问题搜索出来一大堆解决方案,在Qt的浏览器控件中也有这个问题,为了解决这个问题想了两个策略,一种...2020-04-08 09:27:03285
0
-
原创 Qt编写地图综合应用4-仪表盘
一、前言仪表盘在很多汽车和物联网相关的系统中很常用,最直观的其实就是汽车仪表盘,这个以前主要是机械的仪表,现在逐步改成了智能的带屏带操作系统的仪表,这样美观性和拓展性功能性大大增强了,上了操作系统的话,除了基本的仪表指示以外,还可以听歌导航接电话等,这应该也是目前汽车领域发展的一个大趋势,Qt在这方面还单独搞了个3D studio设计的,可以让美工直接设计好效果图,设置一些动画效果之类的,可以说...2020-04-07 08:57:25426
0
-
原创 Qt编写地图综合应用3-省市区域图
一、前言省市区域图也可以叫省市轮廓图,就是将每个省份、市区的边界区域变成轮廓展示,只是个大概的轮廓,和真是的地图基本一致,毕竟都是一个个点堆起来的,可能会有很小很小的误差,之前做大屏系统中间那个中国地图的时候,客户千方百计交代清楚,千万要注意有九段线,不然在展会上被别人看到如果连九段线都没有的话会被人骂死,可能在部分早期的数据由于不是很完善所以未必有,后期的最新的地图数据都是有的,包括轮廓图数据...2020-04-06 09:27:45675
0
-
原创 Qt编写地图综合应用2-迁徙图
一、前言在很多web系统中,尤其是大屏系统中,经常可以看到类似于飞机迁徙图的效果,这个在echart中也是最常用的一个效果,迁徙图既可以是一个飞机也可以是其他形状,然后有一条动态的移动轨迹来表示流向,一般都是多个点流向一个点,也可以做成一个点流向多个点,是个多对多的关系,常用来表示人口迁徙、动物迁徙、黑客攻击、病毒攻击、数据流向、产品流向等。迁徙图和上一篇的闪烁点图类似,也需要提供三个基本要素...2020-04-05 08:58:30380
0
-
原创 Qt编写地图综合应用1-闪烁点图
一、前言Qt作为一个超大型的一站式GUI超市开发集成环境,不仅集成了大量的可视化UI组件,还提供了网络库、数据库操作、文件操作等类库,封装的还是相当精彩一步到位,根据个人身边的一些程序员朋友了解,自从用了Qt以来发现越来越喜欢用Qt本身的类来处理,除非一些要求很高的应用场景比如并发网络才需要去使用第三方库,不然就是直接使用Qt封装好的类,用起来非常爽,尤其是类的名称和方法的名称,几乎很自然的就能...2020-04-04 14:43:211730
0