Qt/C++地图综合应用
文章平均质量分 90
以Qt作为开发环境,主要讲解分析用Qt编写的一系列地图相关的模块内容,开放核心代码,图文并茂。公众号:Qt实战/Qt入门和进阶
feiyangqingyun
欢迎关注公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发)
展开
-
Qt/C++编写地图综合应用文章导航
文章链接1-闪烁点图https://qtchina.blog.csdn.net/article/details/1053102742-迁徙图https://qtchina.blog.csdn.net/article/details/1053220853-省市区域图https://qtchina.blog.csdn.net/article/details/1053384874-仪表盘https://qtchina.blog.csdn.net/article/det...原创 2021-11-15 11:23:39 · 2093 阅读 · 0 评论 -
Qt/C++编写地图综合应用60-覆盖物坐标和搜索
一、前言地图应用中有时候需要开启悬浮工具栏,用户可以直接在地图上绘制矩形、多边形、圆形、线条等,于是需要提供一个函数接口,能够获取到用户绘制的这些图形形状对应的信息。比如坐标点、圆形的中心点和半径、所有图形的路径Path坐标点集合,这些信息都是以经纬度坐标的形式。一般封装的类似功能的js函数一般有三种要求,第一种传入空值则表示找出所有覆盖物,第二种传入类型则找出所有该类型的覆盖物比如矩形,第三种传入对象名称则找出符合该名称的。从一堆覆盖物中找到符合指定类型的覆盖物,这个对于初学者是难点,可以通过map.g原创 2022-03-13 09:12:52 · 2531 阅读 · 0 评论 -
Qt/C++编写地图综合应用59-经纬度坐标纠偏
一、前言地图应用中都涉及到一个问题就是坐标纠偏的问题,这个问题的是因为根据地方规则保密性要求不允许地图厂商使用标准的GPS坐标,而是要用国家定义的偏移标准,或者在此基础上再做算法运算,所以这就出现了三种常规的坐标标准:GPS坐标(WGS-84,国际标准,谷歌地球软件,硬件GPS模块等)、中国坐标偏移标准(GCJ-02,谷歌地图、腾讯地图、高德地图等)、百度坐标偏移标准(BD-09,仅仅百度地图采用)。由于不允许其他坐标转换成GPS坐标,所以三种坐标互换就剩4种常用转换:GPS转百度、GPS转其他、百度转其原创 2022-03-09 19:06:44 · 1493 阅读 · 0 评论 -
Qt/C++编写地图综合应用58-兼容多浏览器内核
一、前言miniblink是一个追求极致小巧的浏览器内核项目,全世界第三大流行的浏览器内核控件。其基于chromium最新版内核,去除了chromium所有多余的部件,只保留最基本的排版引擎blink。miniblink保持了10M左右的极简大小,是所有同类产品最小的体积,同时支持windows xp、npapi。miniblink的作者非常牛逼,QQ昵称叫扫地僧,犹如天龙八部中的扫地僧一般,极其隐秘又武功极高,精通各种绝技,确实相当的屌。用Qt做项目过程中,遇到需要用到浏览器控件的项目,可能都会绕不开原创 2022-02-15 09:02:26 · 1287 阅读 · 0 评论 -
Qt/C++编写地图综合应用57-跨平台(win、linux、mac、uos、kylin等)
一、前言跨平台着实花了不少的精力,为了从Qt4.7兼容到Qt6.2及后续版本,头发掉了不少,仅有的几根毛所剩无几,哎,可能这就是程序员的命,本人写Qt程序这么多年,比较喜欢支持多个Qt版本,尤其是钟情于支持任意Qt版本+任意系统+任意编译器,这句话说起来简单其实实现起来就不容易了,首先你得有个很多版本的测试环境,起码十几个Qt环境要的吧,四五种操作系统要的吧,还要安装各种VS版本免不了的,毕竟win上除了默认的mingw编译器还有很多人用的是msvc编译器,这么一大堆环境折腾下来,没有个1T硬盘是不够的,原创 2022-02-13 10:02:25 · 3970 阅读 · 1 评论 -
Qt/C++编写地图综合应用56-实时动态轨迹
一、前言实时动态轨迹经历过很多个版本的迭代,此功能最初是一个客户定制的,主要是需要在地图上动态显示GPS的运动轨迹,有个应用场景就是一个带有监控的车子,实时在运动中,后台可以接收到经纬度信息,需要绘制对应的轨迹,相当于这些摄像机点位是动态移动的,这样就可以观测到摄像机的实时位置信息,双击摄像机还可以弹出画面实时预览,很直观。GPS运动轨迹这个功能,也需要用到js的知识,其实就是封装一个js函数,绘制对应的线条路径,这个轨迹点可能包括的信息有经度、纬度、速度、时间、是否标记、时间等信息,写个结构体封装下,原创 2022-02-09 09:32:37 · 5785 阅读 · 3 评论 -
Qt/C++编写地图综合应用55-海量点位标注
一、前言海量点位标注的出现,是为了解决普通设备点超过几百个性能极速降低的问题,普通的marker标注由于采用的是对象的形式存在于地图中,数量越多,占用内存特别大,超过1000个点性能极其糟糕,哪怕是用点聚合,拖动地图的时候更是一卡卡,简称卡成屎,加载的时候也是慢成一坨屎,所以迫切需要一个其他的形式来支持成千上万的海量点,最好的方式就是绘制图形,精简掉很多属性,比如自定义图标、旋转角度、单击动画跳动等一堆特性,这些其实大部分时候是不需要的,在海量点的场景下,完全可以牺牲这些特性,然后采用最简单的绘制图形的形原创 2022-01-27 09:43:35 · 3960 阅读 · 0 评论 -
Qt/C++编写地图综合应用54-动态点位标注
一、前言动态点位标注是定制的一个功能模块,提供直接地图上选点设置标记点,点位信息用结构体存储,其中包括了经度、纬度、速度、时间等信息,单击对应的标注点可以显示详细的弹框信息,弹框信息采用自定义的html格式显示,而不是地图自带的格式,这样显示更方便,比如可控不同行不同颜色或者加粗。标注点可选是否标记,标记的话就是一个设备图标显示,不标记的就普通的显示,一般在明显的拐弯的地方建议设置标记。近期在动态点位标注功能中还增加了新增点以后立即移动到地图中心,相当于把新增的点作为地图中心点,这样可以保证每次都能看到原创 2022-01-18 09:30:30 · 1249 阅读 · 0 评论 -
Qt/C++编写地图综合应用53-省市轮廓图下载
一、前言Qt的浏览器控件的交互机制非常方便,所以在在线地图的时候可以对每个区域的经纬度坐标集合发给Qt程序,让他去存储到文件,在实际的测试过程中,发现有部分地图有多个封闭的曲线的,比如散落的岛屿和飞地,这些可不能遗漏呢,所以存储经纬度坐标信息,要按照数组的形式存储,最开始做的时候按照一个字符串集合存储的,后面发现部分地方少了甚至不规则,原来是有多个曲线集合,解析的时候根据数组来实例化不规则线条的类即可。在线地图默认只能精确到县城,如果还要更精确的话,就需要自己手动调整边界点拉动好,然后主动获取当前边界点原创 2022-01-16 16:56:29 · 501 阅读 · 0 评论 -
Qt/C++编写地图综合应用52-加载离线地图
一、前言离线地图的加载其实和在线地图的加载方法几乎一样,唯一的最大区别就是,之前可能一个js文件引入即可,现在需要多个本地的js文件引入,而且网上流传的js文件的版本比较旧,意味着现在新版的支持opengl形式的地图无法支持,后期再去网上搜索找找看能不能搞到最新的版本。离线地图加载依赖一堆的js文件,整个文件夹可以自定义放置的位置,在网页代码引入的时候指定位置就行,一般建议就放在可执行文件下新建一个目录专门存放,这样管理方便,离线地图对应的图片文件目录也是可配置的,也建议放在这个目录下。二、功能特点原创 2022-01-15 10:04:44 · 2893 阅读 · 2 评论 -
Qt/C++编写地图综合应用51-离线瓦片地图下载
一、前言写这个离线地图下载器的初衷,就是为了方便自己的几个需要离线地图的程序,客户需求,既然地图程序已经可以支持离线地图,那如何获取到这些离线瓦片地图文件是个关键,而且这是这个功能的关键,拿到这些一张张的瓦片图片文件,才能根据js函数绘制组合成离线地图。网上其实有很多各种各样的离线地图下载器,大部分都是要收费的,免费的要么是限制了下载的瓦片数量或者级别,要么是下载的瓦片图打上了水印,看起来很难看,由于经常需要用到离线地图,摆脱这个限制,特意花了点时间重新研究了瓦片地图的原理,做了个离线地图下载器,其实瓦原创 2022-01-14 08:43:32 · 1402 阅读 · 1 评论 -
Qt/C++编写地图综合应用50-获取区域边界
一、前言区域边界也是一些坐标点集合,而且不同的行政区划得到的区域边界点数组集合个数不同,觉得部分都是一个集合,少部分有一些飞地之类的,需要多个闭合区域,所以会得到多个数组集合,绘制的时候都要分别取出来绘制就行。获取边界点一般和行政区划搭配起来使用,比如用户输入一个省市的名称,然后自动定位到该省市,然后对该轮廓获取所有边界点集合输出到js文件,最后供离线使用,获取边界点还有一个功能就是获取当前区域内的左下角右上角等经纬度坐标,这个主要是供离线地图下载使用的,百度地图很好的提供了bdary.get(city原创 2022-01-13 09:58:01 · 541 阅读 · 0 评论 -
Qt/C++编写地图综合应用49-地图类型(街道图、卫星图)
一、前言地图类型主要是两种,街道图和卫星图,平时我们看到的默认的都是街道图,无论是街道图还是卫星图,都是一张张图片文件组成的,级别越高,图片越是清晰,一般都会支持到19级的地图,相当于精确到20米内的图像,这个已经完全足够用了,想要再精确的级别应该是要商业级别的地图数据了,大部分的应用程序街道图够用,也有少部分的程序需要卫星图,可以看清地貌的情况。卫星地图,简称卫星图,确切的说法是卫星遥感图像,也叫卫星影像。所谓遥感,即遥远地感知。卫星遥感即通过卫星在太空中探测地球地表物体对电磁波的反射和其发射的电磁波原创 2022-01-11 09:30:55 · 2521 阅读 · 3 评论 -
Qt/C++编写地图综合应用48-地球模式、三维模式、地铁模式
一、前言百度地图本身提供了普通模式、地球模式、三维模式、地铁模式等好多种,普通模式是最常用的默认的,就是那个街道图和卫星图的,而地球模式和三维模式是最近几年才新增加的,为了迎合现在越来越多的用户的需求,地球模式和三维模式需要使用新的API接口,之前都是BMAP开头,而他是BMAPGL开头,连点坐标等对象都是BMAPGL.Point之类的对象了,看名字就知道这些玩意估计都用了opengl之类的玩意来实现和渲染。除了传统的街道图地图外,默认的一般都是街道图,还有卫星图、三维图等,其中又有叠加层,比如叠加路况原创 2022-01-09 14:57:27 · 2055 阅读 · 0 评论 -
Qt/C++编写地图综合应用47-经纬度地址互相转换
一、前言地址经纬度互换的功能只有在线地图有,因为需要去服务器查询对应的数据,拿到返回的数据,百度地图中需要用到BMap.Geocoder来实现这两个功能的互换,他内置了getPoint函数负责将地址转换为经纬度坐标,getLocation函数负责将经纬度坐标转为地址,于是将这两个功能封装成JS函数,每次需要的时候直接调用即可。地址和经纬度互相转换的功能也经常用到,比如上次的路线方案查询的功能,之前官网是提供了直接输入出发地点和目的地的中文汉字,就可以查询到最优的路线,后面只支持输入出发地点和目的地的经纬原创 2022-01-08 08:59:13 · 1894 阅读 · 0 评论 -
Qt/C++编写地图综合应用46-设备点位(添加、删除、清空、重置)
一、前言在学习JS语法的时候发现其实程序都大同小异,正所谓一通百通,熟悉各大概的语法以后基本都可以上手,和C++最大的不同就是他没有数据类型的概念,作为解释性的语言,是在执行的时候自动去转换数据类型,工作都交给解释器做掉了,这样就大大方便了程序员,到处var即可,哪怕是数组啊对象啊,万物皆var,只有当真正赋值的时候,才知道具体的数据类型。在地图应用的相关项目中,在地图上标识一些设备点,并对点进行交互这个功能用的最多的,于是需要一套机制可以动态的添加、删除、清空、重置,重置的意思是将地图中的所有点的经纬原创 2022-01-06 09:20:03 · 1144 阅读 · 0 评论 -
Qt/C++编写地图综合应用45-路径规划
一、前言路径规划一般是根据起始点坐标经纬度和结束点坐标经纬度,查询出合适的路线。关于起始坐标和结束坐标,最开始做的是直接传入具体中文地址即可,后面百度地图不再开放此功能,貌似变成了收费功能,但是经纬度和地址互相转换的功能还是开放的,所以就多了一个步骤,后面做的是直接传入经纬度坐标进行查询,需要手动输入,现在做的是直接地图选点,在起始坐标后面的单选框选中然后在地图上直接选点,对应经纬度坐标值会自动填入,这样相对来说更人性化一些。拿到轨迹点坐标集合进行绘制,其实调用的就是addPolyline函数进行绘制,原创 2022-01-04 09:31:07 · 1215 阅读 · 0 评论 -
Qt/C++编写地图综合应用44-悬浮工具条
一、前言百度地图内置了悬浮工具条,可以自行开启,包括离线地图也可以开启,用到了DrawingManager这个库,鼠标绘制工具条库,提供鼠标绘制点、线、面、多边形(矩形、圆)的编辑工具条的开源代码库。且用户可使用JavaScript API对应覆盖物(点、线、面等)类接口对其进行属性(如颜色、线宽等)设置、编辑(如开启线顶点编辑等)等功能。使用的时候需要引入引入工具条库的相关css文件及js文件。二、功能特点同时支持在线地图和离线地图两种模式。同时支持webkit内核、webengine内核、mi原创 2021-12-30 08:51:03 · 998 阅读 · 0 评论 -
Qt/C++编写地图综合应用43-点聚合
一、前言点聚合的出现就是为了减少一个可视区域内,密密麻麻绘制的太多的标注点。在地图上查询结果通常以标记点的形式展现,但是如果标记点较多,不仅会大大增加客户端的渲染时间,让客户端变得很卡,而且会让人产生密集恐惧症。最简单的设置点聚合的方式是将传入标注点坐标集合,转换生成标注点对象数组,再生成的时候可以设置点的名称、经纬度、其他信息等,然后实例化一个MarkerClusterer对象,再将生成的标注点对象数组传给这个对象即可。具体的点聚合算法我们也无需知道,基本上都是比较智能的,当我们缩小地图范围时候可以看原创 2021-12-29 09:45:28 · 600 阅读 · 0 评论 -
Qt/C++编写地图综合应用42-离线轮廓图
一、前言离线轮廓图使用起来,就没有在线轮廓图方便了,在线的可以直接传入名称拿到,离线的只能自己绘制了,一般需要用区域轮廓图下载器将你需要的区域下载好对应的js文件,其实就是一堆坐标点集合数组,这些数据可以在有网络的地方的时候下载好,也可以在地图上通过绘制不规则的多边形区域得到,只要你熟知该区域的轮廓。离线轮廓图的加载首先引入该区域的坐标点数组js文件,然后通过读取该文件的数据传入自定义的 addBoundary 函数进行绘制,还可以设置颜色、粗细、透明度等。二、功能特点同时支持在线地图和离线地图两原创 2021-12-28 10:20:00 · 1318 阅读 · 2 评论 -
Qt/C++编写地图综合应用41-在线轮廓图
一、前言轮廓图也叫行政区划,这里的轮廓图是指百度地图的区域轮廓图,不是之前文章中提到的echart专用的轮廓图,百度地图的轮廓图就是一个不规则的多边形区域,只不过这个区域的坐标点一般是特别多的,比如某个县市的区域轮廓,可以拿到一系列的坐标点,主要是用来突出标注某个区域,比如这个区域可以突出颜色显示,线条的颜色和粗细及透明度都可以设置。在线的轮廓图可以直接调用地图内置的 Boundary.get 方法获取,只需要指定区域的名称比如上海市,在回调的函数中就可以拿到对应区域的所有坐标点集合,使用非常方便。这个原创 2021-12-26 20:05:57 · 783 阅读 · 0 评论 -
Qt/C++编写地图综合应用40-覆盖物弧线
一、前言弧线可以用来指示某几个点直接弧形的方式绘制线条,尤其是飞机轨迹,起点到终点弧形曲线展示,更美观。百度地图的折线图、矩形图、圆形图等,都统称覆盖物,都是作为覆盖物绘制上去的,这样的好处是速度很快,直接走的底层painter绘制,图形很多也是绘制非常快,所以后面的海量点的绘制,也是采用绘制不同的形状作为一个设备标注点的机制来执行,这样效率大大提高,当然可控的属性少了很多,对比标注点marker,性能大大提升。二、功能特点同时支持在线地图和离线地图两种模式。同时支持webkit内核、webeng原创 2021-12-25 10:14:46 · 368 阅读 · 0 评论 -
Qt/C++编写地图综合应用39-覆盖物圆形
一、前言圆形的应用场景和多边形、矩形基本一致,支持的属性也是一致,比如可以设置线条的颜色、线条的粗细、线条透明度等。也是用来框起一块区域,然后根据坐标点集合,找到该区域内的标注点集合,比如指定某个县市区域多边形,然后找到这个县市对应的所有站点,拿到这些站点在做其他处理。二、功能特点同时支持在线地图和离线地图两种模式。同时支持webkit内核、webengine内核、miniblink内核、IE内核。支持设置多个标注点,信息包括名称、地址、经纬度。可设置地图是否可单击、拖动、鼠标滚轮缩放。可设原创 2021-12-24 08:59:40 · 435 阅读 · 0 评论 -
Qt/C++编写地图综合应用38-覆盖物矩形
一、前言矩形的应用场景和多边形基本一致,也是用来框起一块区域,然后根据坐标点集合,找到该区域内的标注点集合,比如指定某个县市区域多边形,然后找到这个县市对应的所有站点,拿到这些站点在做其他处理。二、功能特点同时支持在线地图和离线地图两种模式。同时支持webkit内核、webengine内核、miniblink内核、IE内核。支持设置多个标注点,信息包括名称、地址、经纬度。可设置地图是否可单击、拖动、鼠标滚轮缩放。可设置协议版本、秘钥、主题样式、中心坐标、中心城市、地理编码位置等。可设置地图原创 2021-12-23 11:40:06 · 369 阅读 · 0 评论 -
Qt/C++编写地图综合应用37-覆盖物多边形
一、前言多边形主要的应用场景是用来框起一块区域,然后根据坐标点集合,找到该区域内的标注点集合,比如指定某个县市区域多边形,然后找到这个县市对应的所有站点,拿到这些站点在做其他处理。二、功能特点同时支持在线地图和离线地图两种模式。同时支持webkit内核、webengine内核、miniblink内核、IE内核。支持设置多个标注点,信息包括名称、地址、经纬度。可设置地图是否可单击、拖动、鼠标滚轮缩放。可设置协议版本、秘钥、主题样式、中心坐标、中心城市、地理编码位置等。可设置地图缩放比例和级别原创 2021-12-22 08:46:58 · 441 阅读 · 0 评论 -
Qt/C++编写地图综合应用36-覆盖物折线
一、前言折线图目前应用最广的也是用来绘制各种轨迹,折线图其实就是后面动态轨迹图、飞机航线图的前身,公用的一个方法addPolyline,折线图可以设置颜色、粗细、透明度等属性,如果开启了悬浮绘图工具栏,也可以直接单击工具栏中的折线图绘制工具,直接动态绘制。二、功能特点同时支持在线地图和离线地图两种模式。同时支持webkit内核、webengine内核、miniblink内核、IE内核。支持设置多个标注点,信息包括名称、地址、经纬度。可设置地图是否可单击、拖动、鼠标滚轮缩放。可设置协议版本、秘原创 2021-12-21 09:05:47 · 1351 阅读 · 1 评论 -
Qt/C++编写地图综合应用35-设备分布图
一、前言设备分布图在所有的地图应用案例项目中,最常见最普遍最基础,就是将项目中的设备信息,比如设备名称、设备所在的经纬度坐标、设备的其他信息(设备地址、设备参数等),通过标注点的形式添加到地图中,至于添加的方式可以是静态的也可以是动态的,静态方式就是直接写入html文件,动态方式就是通过调用封装好的js函数执行,强烈推荐使用动态的方式,更方便更灵活,要的时候就直接调用js函数传入对应的参数即可。关于添加设备标注点函数的封装,历经了多个版本的迭代,最初只需要传个名称和经纬度坐标,后面老板不断的加需求,比如原创 2021-12-19 09:30:06 · 1809 阅读 · 0 评论 -
Qt/C++编写地图综合应用34-生成区域轮廓图
一、前言区域轮廓图的前提是,如何拿到这些轮廓的js文件,网络上其实能够找到各省市的轮廓的json数据,这些json数据对应内容是各种边界的一些类似 @@CGIUCACAAAAA@Q@ 字符的东西,每段这种字符表示一个特定的封闭区域,具体的这种字符的规则含义,搜索了一圈没有找到答案,莫非是可以将这些字符转换成经纬度坐标集合,然后再对这些经纬度坐标集合绘制封闭区域图形Polygon。光有这些json数据还是不够的,还需要转换成js文件,这样echart库才能正常识别和使用,网上也有这个通用的js函数框架,只原创 2021-12-17 09:36:01 · 1020 阅读 · 0 评论 -
Qt/C++编写地图综合应用33-雨量分布
一、前言雨量分布图是在区域地图基础上,针对区域中的每个最小单位区域比如县城点位不同颜色显示,最开始做这个封装的时候,并没有提供单独设置每个点颜色的接口,后面经过几个客户的强烈建议,咬咬牙把每个点都可以单独设置不同颜色的接口加进去,这样就更加符合实际的需求,比如这个点到了报警阶段则红色显示,正常阶段则绿色显示,如果没有设置过颜色,就取值默认的颜色,全部不设置颜色则全部取默认的颜色。每个点的颜色值和对应点的经纬度坐标一样,队列集合设置下去。二、功能特点同时支持闪烁点图、迁徙图、区域地图、世界地图、仪表盘原创 2021-12-16 09:10:50 · 814 阅读 · 1 评论 -
Qt/C++编写地图综合应用32-区域地图
一、前言echart本身是没有提供省市区域轮廓图的,需要引入外部的js文件才能绘制,为了拿到全国各省市的对应轮廓图js文件,特意去网上搜索了很多的相关文章并理解,下载到了对应的省市区域的json数据,然后根据js的规则特意写了个类专门用来转换json数据到js文件,然后生成了所有省市区域的js文件,在echart中用到哪个只需要那个的js文件即可,这些js文件在那个下载地址中都有的,至于这些区域的轮廓图其实是一些乱七八糟的符号具体什么含义我也没有搞懂,你说是base64编码吧仔细看也不像,管他呢,是正确的原创 2021-12-13 18:13:49 · 1022 阅读 · 0 评论 -
Qt/C++编写地图综合应用31-仪表盘
一、前言用Qt开发仪表盘控件非常方便,无论是用widget的painter还是qml,尤其是qml,内置的那些动画效果非常适合做这类的应用,这次不讨论如何用qt开发仪表盘,而是直接用echart内置的仪表盘控件,做的也挺好的,不知道echart这么小的一个文件,还能有如此多的效果,连仪表盘都有,这个非常震惊,仪表盘的使用在官网非常详细,与Qt的结合难点可能就在如何交互,Qt中无论是webkit也还还是webengine,都提供了runJavaScript或者evaluateJavaScript函数类来执行原创 2021-12-11 08:52:40 · 1468 阅读 · 0 评论 -
Qt/C++编写地图综合应用30-世界地图
一、前言世界地图也属于区域地图的一种,最开始做项目的时候只有国内的地图需求,后面有个客户他们的产品是面向国际市场,所以在大屏展示的时候,必须展示一张世界地图,所有箭头动态流向中国,当然这些都要离线使用的,不能说是去加载谷歌地图啥的,所以首选还是采用echart,至于这个世界地图的轮廓js文件,网上可以下载到,按照之前加载中国地图的方式加载就行,至于其中哪些主要国家的经纬度坐标,网上也都是可以查询到。二、功能特点同时支持闪烁点图、迁徙图、区域地图、世界地图、仪表盘等。可以设置标题、提示信息、背景颜色原创 2021-12-10 08:59:49 · 1229 阅读 · 0 评论 -
Qt/C++编写地图综合应用29-迁徙图
一、前言迁徙图和上一篇的闪烁点图类似,也需要提供三个基本要素:城市名称集合、城市经纬度集合、中心点城市经纬度,至于城市点的颜色和迁徙流向箭头的颜色,都可以单独设置,echart对每个类对象都竭尽全力的提供了各种各样的属性,只要你可以想象得到的都有,估计也是开发人员摸爬滚打从实际需求中不断完善和提炼出来的,比如颜色、位置、动作、动画、字体、大小、形状、效果、类型等,这点还是非常佩服相关的开发人员,能够不断的完善升级到今天,确实相当完美。在很多web系统中,尤其是大屏系统中,经常可以看到类似于飞机迁徙图的效原创 2021-12-07 20:21:05 · 546 阅读 · 0 评论 -
Qt/C++编写地图综合应用28-闪烁点图
一、前言Qt除了内置了各种UI组件以外,还直接集成了浏览器控件,注意哦这可是跨平台的浏览器控件哦,在5.6版本以前集成的是webkit,以后集成的是webengine,使得程序的灵活性拓展性大大增强了,眼看着web界那些牛逼炫的不要不要的界面,借助浏览器控件就可以无缝对接到Qt程序中,甚至还可以做各种交互,目前已知这种类似的框架好像挺多的,而且还挺流行,比如网易云音乐客户端、钉钉客户端、飞书客户端等都是用类似的机制来实现的,将浏览器作为本地应用程序。Qt作为一个超大型的一站式GUI超市开发集成环境,不仅原创 2021-12-06 14:06:30 · 957 阅读 · 0 评论 -
Qt/C++编写地图综合应用27-点聚合
一、前言在地图上查询结果通常以标记点的形式展现,但是如果标记点较多,不仅会大大增加客户端的渲染时间,让客户端变得很卡,而且会让人产生密集恐惧症。为了解决这一问题,我们需要一种手段能在用户有限的可视区域范围内,利用最小的区域展示出最全面的信息,而又不产生重叠覆盖。这就是点聚合功能的由来,百度地图内置类点聚合的功能,在项目初期可能只有个位数的设备需要在地图上显示,随着设备数量的增多,会发现标注点不仅密密麻麻而且变得越发卡顿,这样就需要有个合并的功能,就某个区域的点都合并到一个点图标展示,当用户单击该合并后的点原创 2021-01-28 09:23:59 · 3871 阅读 · 5 评论 -
Qt/C++编写地图综合应用26-覆盖物交互
一、前言百度地图本身提供了非常友好完善的JS函数接口用于添加各种覆盖物,比如标注点、矩形区域、圆形区域、不规则线段、弧形等,基本上涵盖了各种应用场景,官方的文档和示例也是比较完善的,虽然示例用的都是html+js,其实只要是会写程序的程序员都看得懂,比如Qt要与他交互的话直接传统的交互方式就行,依葫芦画瓢将对应的js函数写在网页文件中。百度地图其实提供了浮动工具栏,在线地图和离线地图都支持,打开浮动工具栏以后,直接在浮动工具栏选择对应的覆盖物直接地图上绘制就行,然后用js方法去获取对应覆盖物的位置坐标等信原创 2021-01-26 10:15:15 · 1378 阅读 · 1 评论 -
Qt/C++编写地图综合应用25-echart动态交互
一、前言之前用echart组件做过各种效果,随着各种现场应用现场项目的增多,各种需求也都慢慢增加起来,为了满足各种不同类型的需求,近期又抽空重新整理和封装了echart类,主要就是增加了不少的js函数处理,增加了各种属性和交互,比如单击对应的闪烁点可以响应单击事件,然后Qt这边接收到事件以后进行对应的处理,还比如每个闪烁点都可以设置不一样的颜色和大小,这样区分显示一目了然,当然这些的前提都是echart要支持才行,从官网的手册来看,用法还是介绍的非常详细的,模型框架都是统一的,各种属性和函数的命名基本上都原创 2021-01-25 09:10:39 · 2600 阅读 · 4 评论 -
Qt/C++编写地图综合应用24-miniblink内核
一、前言用Qt做项目过程中,遇到需要用到浏览器控件的项目,可能都会绕不开一个问题,那就是从Qt5.6版本开始mingw编译器的Qt构建套件,不再提供浏览器控件了,之前还可以用webkit控件,这下很多项目要么选择5.6以下版本,要么选择msvc的构建套件,而且大部分的msvc构建套件还不自带浏览器控件,也需要自己编译,只有原配的构建套件比如Qt5.9+VS2015、Qt5.12+VS2017这种搭配才可能有浏览器控件,不然就算你勾选了浏览器控件也不会安装,这样就使得很多依赖浏览器控件的项目比较被动,于是必原创 2021-01-21 09:24:38 · 2413 阅读 · 9 评论 -
Qt/C++编写地图综合应用23-标注点交互
一、前言地图项目应用中,标注点的交互使用频率非常高,这应该是最常用的场景,比如从数据库中读取出来设备的信息包括经纬度坐标,然后需要在地图上显示对应的设备,这就需要用addMarker函数来动态添加标注点,关于封装的这个函数,陆陆续续经历过好多年的完善,很奇怪为啥这么简单的功能还需要完善,其实这也是实战项目应用中不断积累的,满足各种简单的和复杂的应用场景而来,这个函数带有很多参数,至少10个,接下来就罗列下具体的参数含义以及遇到的需求场景。v0.1:addMarker(name, point),很简单,原创 2021-01-20 09:55:48 · 1563 阅读 · 2 评论 -
Qt/C++编写地图综合应用22-动态轨迹
一、前言上一篇文章写道拿到路径规划的轨迹点坐标集合,并且已经可以通过调用addPolyline绘制线段的形式将轨迹点绘制,接下来就是要如何动态的绘制这些轨迹点,最简单的方法就是开个定时器挨个取出下一个经纬度坐标,然后调用封装好的moveMarker函数将经纬度坐标传过去,异步交互使得标注点在移动,也可将将定时器的方法写在网页的js函数中,但是就不够灵活了,还不如直接用Qt的定时器进行控制更方便一些,这里要特别注意的是轨迹点坐标传过来的是数组的数组,因为很可能是多段线条组成,所以需要循环取出来。近期在做机原创 2021-01-18 15:21:28 · 6110 阅读 · 9 评论