随笔分类 - Qt/C++地图软件开发
摘要:一、前言说明 搞地图软件开发很多年,遇到过各种形形色色的需求,包括之前中东的用户,需要中东的英文地图,而且还要离线支持,后面搞了个天地图杂交谷歌离线瓦片完成的。最近又遇到个新的需求,那就是希望天地图能够支持21级别的瓦片地图,查阅了官方文档资料,天地图默认只支持到18级别的,这就难搞了,后面尝试了把
阅读全文
摘要:一、前言说明 一般的地图厂家会提供三种类型的地图,街道图、卫星图、混合图,其中街道图就是带了路网的常规地图,卫星图是没有路网的,混合图是带了路网的卫星图,其实路网图一般都是叠加上去的,所有地图厂家都提供了叠加图层的功能,意味着在街道图上还可以叠加卫星图等,只不过一般不会这么用,一般都是在街道图上叠加
阅读全文
摘要:一、前言说明 地图中的感兴趣点(Points of Interest, POI)是指地图上标记的特定地点或位置,这些地点通常对用户有某种意义或价值。POI 是地图数据的重要组成部分,帮助用户快速找到他们需要的地点或服务。常见的感兴趣点有商场、超市、银行、公交站、停车场、景点、酒店、电影院等。地图服务
阅读全文
摘要:一、前言说明 搞地图相关软件或者功能开发很多年,最开始搞得是百度地图,把官网对应的API接口都实现了一遍,好用肯定是好用,但是缺点也挺多,最大缺点就是坐标系需要转换,现在很多的设备传过来的要么是地球坐标系,要么是国家标准的坐标系,而百度地图是自己的坐标系,在国标上又加了自己的偏移,搞得很不兼容,比如
阅读全文
摘要:一、前言说明 高级绘图模块在整个地图组件中属于具体的应用层的开发,都是基于底层地图组件的接口进行二次开发的,为了方便用户使用,也封装成了直接使用的类放在mapdraw目录下,方便用户参考进行二次开发。之前就已经实现了雷达模拟和航迹模拟两种,现在新增第三种航迹规划,也叫航线规划,就是用户可以直接在地图
阅读全文
摘要:一、前言说明 监控系统中一般有很多的摄像头点位,除了在平面图中展示位置以外,有些工地和集团,在集中管理的地方,还希望在电子地图中展示,电子地图可以缩放和拖动,切换设备点自动放大高亮,地图自动移动到设备居中的位置,双击设备可以预览实时画面。设备的经纬度信息,在添加设备的时候有个默认的位置,真实的位置需
阅读全文
摘要:一、前言说明 做地图开发会遇到一个常规需求,就是获取当前经纬度对应的海拔高度,也叫做高程值,很遗憾各大地图厂商都未提供接口获取,可能是有明文规定,不能地图中提供对应的海拔高度值,于是需要另想他法,尽管谷歌地图在线的api接口是提供了海拔高度值,但是懂得都懂,国内哪里还能用谷歌地图?完全用不了啊,就算
阅读全文
摘要:一、前言说明 覆盖物一般包括标准点marker、折线polyline、多边形polygon、矩形rectangle、圆形circle等,这些功能在所有地图中都是支持的,有些地图对应的矩形使用多边形来实现,因为矩形也是多边形的一种。除了上述5种基础的覆盖物以外,还有两种高级的覆盖物,那就是点聚合和海量
阅读全文
摘要:一、前言说明 地图测距在地图组件中属于一个比较小众的功能,但是又不得不提供,有时候用户希望直接在地图上选点,测算距离,尤其是在一些军事领域用的比较多,测距功能提炼出来的共性就是,每一段都有距离,最后鼠标右键或者双击结束测距,然后发个信号传过来总的距离。一般地图厂家也都提供了对应的事件,比如百度地图的
阅读全文
摘要:一、前言说明 做地图开发会遇到一个常规需求,就是获取当前经纬度对应的海拔高度,也叫做高程值,很遗憾各大地图厂商都未提供接口获取,可能是有明文规定,不能地图中提供对应的海拔高度值,于是需要另想他法,尽管谷歌地图在线的api接口是提供了海拔高度值,但是懂得都懂,国内哪里还能用谷歌地图?完全用不了啊,就算
阅读全文
摘要:一、前言说明 在地图应用中,有很多时候是需要断网环境中离线使用的,一般会采用两种做法,一种是只下载好离线瓦片地图,然后根据不同的缩放和经纬度坐标绘制瓦片。这种方式优点是任何地图都支持,只需要拿到瓦片即可,缺点是其他的接口都需要自己处理,比如覆盖物的绘制,工作量巨大,尽管Qt的qml部分提供了loca
阅读全文
摘要:一、前言说明 已经有了最基础的接口用来添加覆盖物,而且还有通过进入覆盖物模式动态添加覆盖物的功能,为什么还要来个高级绘图?因为又有新的需求,给钱就搞,一点底线都没有。无论哪个地图厂家,提供的接口都是没有唯一标识参数的,也就类似于学号,这就是需要自己主动定一个属性用来存储唯一标识,这样方便后面删除和修
阅读全文
摘要:一、前言说明 在其他地图组件中,标注点marker都是可以设置旋转角度的,这个功能其实非常实用,比如飞机移动轨迹,就是需要旋转飞机头飞行,轮船轨迹移动也是,百度地图和腾讯地图是通过调用setRotation函数设置,高德地图是setAngle,唯独天地图没有提供对应接口,找遍了文档和源码,也没有找到
阅读全文
摘要:一、前言说明 无论哪一家的地图,都提供了调用函数绘制各种覆盖物,但是有时候的场景是希望进入添加覆盖物模式,然后每次在地图上按下都自动生成对应的覆盖物比如圆形,这样就不需要用户提前知道经纬度坐标等参数,而是让用户自己在地图上拾取即可,这样灵活性就极大的提高了。百度地图和腾讯地图是提供了绘图工具栏来实现
阅读全文
摘要:一、前言说明 搞Qt地图开发这块,随着研究的深入,用户的需求变化,最近又需要在手机上运行,由于本地图组件依赖浏览器控件,而手机安卓上的Qt并没有带qwebengine控件,怎么办呢,不断的努力验证下,发现Qt安卓上提供了webview控件可以加载网页,而webview在安卓上只能用qml,根据官方的
阅读全文
摘要:一、前言说明 地图雷达扫描的需求场景也不少,很多人的做法是直接搞个覆盖层widget,在widget上绘制雷达,优缺点很明显,优点是性能高,毕竟直接在widget上绘制性能明显比js中绘制要高,缺点是要么动态计算经纬度坐标转屏幕坐标来实现跟随,要么固定的通过改变绘制的范围内容来跟随,但是总归使用场景
阅读全文
摘要:一、前言说明 在使用百度地图的路书功能中,并没有提供移动的信号以及移动结束的信号,但是很多时候都期望拿到移动的哪里了以及移动结束的信号,以便做出对应的处理,比如结束后需要触发一些对应的操作。经过搜索发现很多人都有这个需求,需要在js文件中加上一点代码才行,也就是在start开始的时候传入两个回调函数
阅读全文
摘要:一、前言说明 地图组件为了方便用户的操作,一般会满足各种需求场景,比如用鼠标拖曳地图,实体键盘按键上下左右移动,鼠标滚轮缩放地图大小,双击放大地图,这些常规的操作可以极大的方便用户操作,问题是,有时候又是需要禁用某些功能,不然会引起一些误操作,比如双击放大功能,如果不禁用,在某些场景要求双击标注点做
阅读全文
摘要:一、前言说明 在展示地图的时候,有些常规的操作,比如调整地图的缩放级别,切换到卫星图等,希望能够在地图上直接操作实现,于是就有了一堆地图控件,可以根据自己的需求动态的添加和删除,这样就更直接更快捷,而不是通过函数去设置。几乎每个地图厂家都提供了类似的控件,尽管命名可能有些差别,常见的地图控件有地图类
阅读全文
摘要:一、前言说明 最近花了大半年时间,专门研究这个地图组件,几乎把各种地图的官网的手册翻了个遍,亲自写代码验证了一遍,各种API函数接口和功能全部实战一遍,然后从中提取共性,做出了基类,以及通用函数类,子类再对该地图特殊功能进行单独的处理。那么问题来了,这些地图各自有哪些优缺点呢?面对具体的实际需求应该
阅读全文