一、前言

设备分布图在所有的地图应用案例项目中,最常见最普遍最基础,就是将项目中的设备信息,比如设备名称、设备所在的经纬度坐标、设备的其他信息(设备地址、设备参数等),通过标注点的形式添加到地图中,至于添加的方式可以是静态的也可以是动态的,静态方式就是直接写入html文件,动态方式就是通过调用封装好的js函数执行,强烈推荐使用动态的方式,更方便更灵活,要的时候就直接调用js函数传入对应的参数即可。

关于添加设备标注点函数的封装,历经了多个版本的迭代,最初只需要传个名称和经纬度坐标,后面老板不断的加需求,比如还要求能自定义单击后的动作规则,是直接js弹窗还是发给Qt程序接收,弹窗显示的内容要求可自定义,对应标注点的图标可自定义,甚至还要旋转角度,我勒个去,越写越复杂,现在至少都11个参数了。

参数 说明
name 表示标注点名称,显示在图标旁边的文本,为空则不显示
addr 表示标注点地址
title 表示弹框信息html格式标题
tips 表示弹框信息html格式内容
width 表示弹框的宽度
point 表示经纬度坐标
action 表示单击以后触发什么动作 0-不处理 1-自己弹框 2-发送信号
animation 表示动画效果 0-不处理 1-跳动 2-坠落
iconfile 表示图标文件路径,不设置则采用默认图标,注意图片的尺寸
iconindex 表示图标对应在图片中的索引,本地文件则当做图片尺寸
rotation 表示图标旋转角度

二、功能特点

  1. 同时支持在线地图和离线地图两种模式。
  2. 同时支持webkit内核、webengine内核、miniblink内核、IE内核。
  3. 支持设置多个标注点,信息包括名称、地址、经纬度。
  4. 可设置地图是否可单击、拖动、鼠标滚轮缩放。
  5. 可设置协议版本、秘钥、主题样式、中心坐标、中心城市、地理编码位置等。
  6. 可设置地图缩放比例和级别,缩略图、比例尺、路况信息等控件的可见。
  7. 支持地图交互,比如鼠标按下获取对应位置的经纬度。
  8. 支持查询路线,可设置起点位置、终点位置、路线模式、路线方式、路线方案(最少时间、最少换乘、最少步行、不乘地铁、最短距离、避开高速)。
  9. 可显示点线面工具,可直接在地图上划线、点、矩形、圆形等。
  10. 可设置行政区划,指定某个城市区域绘制图层,在线地图自动输出行政区划边界点集合到js文件给离线地图使用。
  11. 可静态或者动态添加多个覆盖物。支持点、折线、多边形、矩形、圆形、弧线、点聚合等。
  12. 提供函数接口处理经纬度解析成地址和地址解析成经纬度坐标。
  13. 提供的demo直接可以单独选点执行对应的处理比如路线查询。
  14. 可以拿到路线查询到的点坐标信息集合,比如用于机器人坐标导航等。
  15. 封装了丰富的函数比如删除指定点和所有点,删除指定覆盖物和所有覆盖物等。
  16. 标注点弹框信息可以自定义内容,标准html格式。
  17. 标注点单击事件可选 0-不处理 1-自己弹框 2-发送信号。
  18. 标注点可设置动画效果 0-不处理 1-跳动 2-坠落
  19. 标注点可设置本地图片文件等。
  20. 函数接口友好和统一,使用简单方便,就一个类。
  21. 支持js动态交互添加点、删除点、清空点、重置点,不需要刷新页面。
  22. 支持任意Qt版本、任意系统、任意编译器。

三、体验地址

  1. 体验地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取码:o05q 文件名:bin_map.zip
  2. 国内站点:https://gitee.com/feiyangqingyun
  3. 国际站点:https://github.com/feiyangqingyun
  4. 个人主页:https://blog.csdn.net/feiyangqingyun
  5. 知乎主页:https://www.zhihu.com/people/feiyangqingyun/

四、效果图

五、相关代码

void MapBaiDu::addMarker(QStringList &list)
{
//动态添加点
//name 表示标注点名称,显示在图标旁边的文本,为空则不显示
//addr 表示标注点地址
//title 表示弹框信息html格式标题
//tips 表示弹框信息html格式内容
//width 表示弹框的宽度
//point 表示经纬度坐标
//action 表示单击以后触发什么动作 0-不处理 1-自己弹框 2-发送信号
//animation 表示动画效果 0-不处理 1-跳动 2-坠落
//iconfile 表示图标文件路径,不设置则采用默认图标,注意图片的尺寸
//iconindex 表示图标对应在图片中的索引,本地文件则当做图片尺寸
//rotation 表示图标旋转角度
list << QString(" function addMarker(name, addr, title, tips, width, point, action, animation, iconfile, iconindex, rotation) {");
list << QString(" var list = point.split(',');");
//设置点经纬度坐标
list << QString(" var pot = new %1.Point(list[0], list[1]);").arg(mapFlag);
//设置文本文字 offset为对应标签显示的位置偏移值
list << QString(" var label = new %1.Label(name, {\"offset\":new %1.Size(20, -10)});").arg(mapFlag); //设置图标,不设置则采用默认图标
list << QString(" if (!iconfile) {");
list << QString(" var marker = new %1.Marker(pot);").arg(mapFlag);
list << QString(" } else if (iconfile == 'http://lbsyun.baidu.com/jsdemo/img/fox.gif') {");
list << QString(" var icon = new %1.Icon(iconfile, new %1.Size(300, 157));").arg(mapFlag);
list << QString(" var marker = new %1.Marker(pot, {icon: icon, rotation: rotation});").arg(mapFlag);
list << QString(" } else if (iconfile == 'http://api.map.baidu.com/img/markers.png') {");
list << QString(" var icon = new %1.Icon(iconfile, new %1.Size(23, 25), {offset: new %1.Size(10, 25), imageOffset: new %1.Size(0, 0 - iconindex * 25)});").arg(mapFlag);
list << QString(" var marker = new %1.Marker(pot, {icon: icon, rotation: rotation});").arg(mapFlag);
list << QString(" } else {");
list << QString(" var size = 50;");
list << QString(" if (iconindex) {");
list << QString(" size = iconindex;");
list << QString(" }");
list << QString(" label = new %1.Label(name, {\"offset\":new %1.Size(size, -10)});").arg(mapFlag);
list << QString(" var icon = new %1.Icon(iconfile, new %1.Size(size, size));").arg(mapFlag);
list << QString(" var marker = new %1.Marker(pot, {icon: icon, rotation: rotation});").arg(mapFlag);
list << QString(" }"); list << QString(" map.addOverlay(marker);");
list << QString(" if (name != '') {");
list << QString(" marker.setLabel(label);");
list << QString(" }");
list << QString(" addClick(marker, name, addr, title, tips, width, action);"); //弹跳效果-BMAP_ANIMATION_BOUNCE 坠落效果-BMAP_ANIMATION_DROP
list << QString(" if (animation == 1) {");
list << QString(" marker.setAnimation(BMAP_ANIMATION_BOUNCE);");
list << QString(" } else if (animation == 2) {");
list << QString(" marker.setAnimation(BMAP_ANIMATION_DROP);");
list << QString(" }"); list << QString(" }");
} void frmMapBaiDu::on_btnMapDevice_clicked()
{
QStringList deviceNames;
deviceNames << "景亨宴" << "聚丰港" << "洞庭渔湘" << "小钱龙虾" << "容源大酒店";
QStringList deviceAddrs;
deviceAddrs << "安波路533弄1号楼" << "北新路8号" << "康桥镇康桥路1200号(御青路)" << "闵行区诸翟镇纪翟南路" << "浦东新区广兰路1080号(紫薇路口)";
QStringList devicePoints;
devicePoints << "121.534942,31.307706" << "121.572075,31.188825" << "121.57987,31.155795" << "121.292628,31.215278" << "121.626992,31.211056"; baidu->reset();
baidu->setMarkerInfo(deviceNames, deviceAddrs, devicePoints);
loadMap(1); ui->rbtnMapCenter->setChecked(true);
}

Qt编写地图综合应用35-设备分布图的更多相关文章

  1. Qt编写安防视频监控系统17-在线地图

    一.前言 在线地图模块在一开始设计整个系统的时候就考虑进去了,主要功能就是在摄像机管理中,提供经纬度信息,然后加载百度地图在浏览器中显示,根据摄像机信息表中的每个摄像机的经纬度信息,自动生成设备点在地 ...

  2. Qt编写项目作品大全(自定义控件+输入法+大屏电子看板+视频监控+楼宇对讲+气体安全等)

    一.自定义控件大全 (一).控件介绍 超过160个精美控件,涵盖了各种仪表盘.进度条.进度球.指南针.曲线图.标尺.温度计.导航条.导航栏,flatui.高亮按钮.滑动选择器.农历等.远超qwt集成的 ...

  3. Qt编写安防视频监控系统(界面很漂亮)

    一.前言 视频监控系统在整个安防领域,已经做到了烂大街的程序,全国起码几百家公司做过类似的系统,当然这一方面的需求量也是非常旺盛的,各种定制化的需求越来越多,尤其是这几年借着人脸识别的东风,发展更加迅 ...

  4. Qt编写安防视频监控系统12-异形布局

    一.前言 视频监控系统中,除了常规的1画面.4画面.9画面.16画面以外,还有几个布局比较另类,比如6画面.8画面.13画面,有些通道需要占据不同的行列,4画面.9画面.16画面都是非常对称的布局,行 ...

  5. Qt编写安防视频监控系统11-动态换肤

    一.前言 Qt中的动态换肤技术是非常一流的,直接调用qApp->setStyleSheet(qss);就可以对整个应用程序进行换肤,如果样式表内容不多,或者对应的贴图不对,效率还是蛮好的,不过据 ...

  6. Qt编写安防视频监控系统9-自动隐藏光标

    一.前言 这个效果的灵感来自于大屏电子看板系统,在很多系统中尤其是上了大屏的时候,其实在用户不在操作的时候,是很不希望看到那个鼠标箭头指针的,只有当用户操作的时候才显示出来,这个就需要开个定时器定时计 ...

  7. Qt编写安防视频监控系统8-双击节点

    一.前言 在所有的视频监控系统中,双击摄像机的节点,对应摄像机加载到当前焦点通道显示,这个都是必须具备的功能,还有一些厂家会做双击NVR节点,自动加载该NVR下的所有摄像机全部显示,从通道1开始到通道 ...

  8. Qt编写安防视频监控系统7-全屏切换

    一.前言 全屏切换这个功能点属于简单的,一般会做到右键菜单中,也提供了快捷键比如alt+enter来触发,恢复全屏则按esc即可,全屏处理基本上都是隐藏通道面板以外的窗体,保持最大化展示,由于采用了模 ...

  9. Qt编写安防视频监控系统5-视频回放

    一.前言 一般视频回放都会采用GB28181国标来处理,这样可以保证兼容国内各大厂家的NVR,毕竟在同一的国家标准下,大家都会统一支持国标的,就不需要根据各个厂家的SDK来做兼容处理,烦得很,厂家越来 ...

  10. Qt编写安防视频监控系统3-通道交换

    一.前言 最开始写通道交换的功能的时候,走了很多弯路,比如最开始用最初级的办法,触发交换的时候,先关闭视频,然后设置新的url重新打开视频,这样处理非常低级而且耗内存还卡还很慢,毕竟重新打开视频都需要 ...

随机推荐

  1. 你对 Vue.js 的template 编译的理解?

    template 是 ES5 新出的语法 ,template 是不会被页面显示的,但是 vue 中会被翻译成 dom 结构 : template 编译的过程 : parse 解析生成ast 抽象语法树 ...

  2. Exchange2016虚拟目录介绍

    Exchange2016虚拟目录介绍 Autodiscover 允许Outlook自动发现邮箱设置,以便用户无需手动配置Outlook的高级设置. ecp 用于访问EAC. EWS 提供如服务可用性, ...

  3. ToDesk再度出手,加快云电脑高性能发展,剑指千亿级市场

    根据中国信通院发布的<云计算白皮书(2023年)>(以下简称白皮书)显示,云计算引发了软件开发部署模式的创新,成为承载各类应用的关键基础设施,为大数据.物联网.人工智能等新兴领域的发展提供 ...

  4. AI五子棋_10 更多的算法探索

    AI五子棋 第十步 恭喜你到达第十步! 你已经完成了一个AI的设计,下面就需要发动你的智慧让你的机器大脑变得更聪明了! 我们的征途是星辰大海! 更多资料可以参考这个列表 https://gomocup ...

  5. redis的主从复制master/slaver

    什么是Redis的复制 ​ 就是我们常说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主. 复制原理 Slave启动成 ...

  6. .NET周刊【10月第3期 2024-10-20】

    国内文章 我被 .NET8 JIT 的一个BUG反复折磨了半年之久(JIT tier1 finally optimizations) https://www.cnblogs.com/calvinK/p ...

  7. 支持国产3A游戏大作 ——《黑神话:悟空》

  8. 3.使用kubeadm方式搭建K8S集群

    使用kubeadm方式搭建K8S集群 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Ma ...

  9. 二、FreeRTOS学习笔记-移植

    FreeRTOS移植 首先准备一个基础工程,stm32标准库或者HAL库,本实验使用HAL库版本的内存管理实验进行移植 移植步骤: 1 第一步:添加FreeRTOS源码(添加FreeRTOS源码的目的 ...

  10. ClickHouse之物化MySQL

    Creates ClickHouse database with all the tables existing in MySQL, and all the data in those tables. ...