Qt编写地图综合应用11-动态添加
一、前言
在添加设备点或者区域形状的时候,会考虑是直接静态的方式写入到网页中加载,还是动态js函数异步加载的方式,这个需要根据现场的实际需求来,如果只需要一次加载的话建议静态即可,如果运行期间还需要动态添加的话就采用动态的js函数交互的方法,绝大部分场景都是动态添加,毕竟这个是异步执行的,而且比较灵活,静态的方式写入到网页中加载开起来比较傻,数据都在网页中可以看到了,没有什么保密性可言,在前面两篇文章做行政区划和点聚合的时候,也是两种方法都支持,具体现场怎么方便怎么来。
动态添加的话,相当于要把官网那些demo,都做成js函数调用的形式,官网的那些demo主要都是以静态写死的方式作为演示的,为了更直观更容易理解,如果是Qt程序员或者c++的程序,需要花一丢丢时间才能学会如何将其封装成js函数调用,毕竟在js中没有数据类型的概念,统一都是var,相当于Qt中的QVariant类型,所谓万物皆var,数组和数组对象直接用[]搞定,着实相当方便。
二、功能特点
- 同时支持在线地图和离线地图两种模式。
- 同时支持webkit内核、webengine内核、IE内核。
- 支持设置多个标注点,信息包括名称、地址、经纬度。
- 可设置地图是否可单击、拖动、鼠标滚轮缩放。
- 可设置协议版本、秘钥、主题样式、中心坐标、中心城市、地理编码位置等。
- 可设置地图缩放比例和级别,缩略图、比例尺、路况信息等控件的可见。
- 支持地图交互,比如鼠标按下获取对应位置的经纬度。
- 支持查询路线,可设置起点位置、终点位置、路线模式、路线方式、路线方案(最少时间、最少换乘、最少步行、不乘地铁、最短距离、避开高速)。
- 可显示点线面工具,可直接在地图上划线、点、矩形、圆形等。
- 可设置行政区划,指定某个城市区域绘制图层,在线地图自动输出行政区划边界点集合到js文件给离线地图使用。
- 可静态或者动态添加多个覆盖物。支持点、折线、多边形、矩形、圆形、弧线、点聚合等。
- 函数接口友好和统一,使用简单方便,就一个类。
- 支持js动态交互添加点、删除点、清空点、重置点,不需要刷新页面。
- 支持任意Qt版本、任意系统、任意编译器。
三、体验地址
- 体验地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取码:o05q 名称:bin_map.zip
- 国内站点:https://gitee.com/feiyangqingyun
- 国际站点:https://github.com/feiyangqingyun
- 个人主页:https://blog.csdn.net/feiyangqingyun
- 知乎主页:https://www.zhihu.com/people/feiyangqingyun/
四、效果图

五、相关代码
void MapBaiDu::addPolyline(QStringList &list)
{
//覆盖物通用属性,包括颜色线条粗细等,可以自行更改
QString property = getOverlayProperty();
//动态添加折线
list << QString(" function addPolyline(points) {");
list << QString(" var pts = getPoints(points);");
list << QString(" var polyline = new BMap.Polyline(pts, %1);").arg(property);
list << QString(" map.addOverlay(polyline);");
list << QString(" }");
}
void MapBaiDu::addPolygon(QStringList &list)
{
//覆盖物通用属性,包括颜色线条粗细等,可以自行更改
QString property = getOverlayProperty();
//动态添加多边形
list << QString(" function addPolygon(points) {");
list << QString(" var pts = getPoints(points);");
list << QString(" var polygon = new BMap.Polygon(pts, %1);").arg(property);
list << QString(" map.addOverlay(polygon);");
list << QString(" }");
}
void MapBaiDu::addRectangle(QStringList &list)
{
//覆盖物通用属性,包括颜色线条粗细等,可以自行更改
QString property = getOverlayProperty();
//动态添加矩形
list << QString(" function addRectangle(points) {");
list << QString(" var listPoint = points.split(\"|\");");
list << QString(" if (listPoint.length != 2) {");
list << QString(" return;");
list << QString(" }");
//将两个坐标拆分成四个点
list << QString(" var list1 = listPoint[0].split(\",\");");
list << QString(" var list2 = listPoint[1].split(\",\");");
list << QString(" var ptStart = new BMap.Point(list1[0], list1[1]);");
list << QString(" var ptEnd = new BMap.Point(list2[0], list2[1]);");
list << QString(" var pt1 = new BMap.Point(ptStart.lng, ptStart.lat);");
list << QString(" var pt2 = new BMap.Point(ptEnd.lng, ptStart.lat);");
list << QString(" var pt3 = new BMap.Point(ptEnd.lng, ptEnd.lat);");
list << QString(" var pt4 = new BMap.Point(ptStart.lng, ptEnd.lat);");
list << QString(" var rectangle = new BMap.Polygon([pt1,pt2,pt3,pt4], %1);").arg(property);
list << QString(" map.addOverlay(rectangle);");
list << QString(" }");
}
void MapBaiDu::addCircle(QStringList &list)
{
//覆盖物通用属性,包括颜色线条粗细等,可以自行更改
QString property = getOverlayProperty();
//动态添加圆形
list << QString(" function addCircle(points, radius) {");
list << QString(" var listPoint = points.split(\"|\");");
list << QString(" var list = listPoint[0].split(\",\");");
list << QString(" var ptCenter = new BMap.Point(list[0], list[1]);");
list << QString(" var circle = new BMap.Circle(ptCenter, radius, %1);").arg(property);
list << QString(" map.addOverlay(circle);");
list << QString(" }");
}
Qt编写地图综合应用11-动态添加的更多相关文章
- 插件~使用ECharts动态在地图上标识点~动态添加和删除标识点
之前写过一个Echarts的文章,没有基础的同学可以先看这<上一篇>,对于一个地图和说,我们在初始化之后,你可能被在地图上标识出一些点,当然这根据你的业务去标识,而如果每次更新数据都加载全 ...
- Qt编写自定义控件插件开放动态库dll使用(永久免费)
这套控件陆陆续续完善了四年多,目前共133个控件,除了十几个控件参考网友开源的代码写的,其余全部原创,在发布之初就有打算将动态库开放出来永久免费使用,在控件比较完善的今天抽了半天时间编译了多个qt版本 ...
- Qt编写自定义控件59-直方动态图
一.前言 直方动态图类似于音乐播放时候的柱状图展示,顶部提供一个横线条,当柱状上升的时候,该线条类似于帽子的形式冲到顶端,相当于柱状顶上去的感觉,给人一种动态的感觉,听音乐的同时更加赏心悦目,原理比较 ...
- Qt编写项目作品大全(自定义控件+输入法+大屏电子看板+视频监控+楼宇对讲+气体安全等)
一.自定义控件大全 (一).控件介绍 超过160个精美控件,涵盖了各种仪表盘.进度条.进度球.指南针.曲线图.标尺.温度计.导航条.导航栏,flatui.高亮按钮.滑动选择器.农历等.远超qwt集成的 ...
- Quartz动态添加,修改,删除任务(暂停,任务状态,恢复,最近触发时间)
首页 博客 学院 下载 图文课 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye GitChat 写博客 小程序 消息 登录注册 关闭 quartz_Cron表达式一分钟教程 09-05 ...
- Qt编写自定义控件二动画按钮
现在的web发展越来越快,很多流行的布局样式,都是从web开始的,写惯了Qt widgets 项目,很多时候想改进一下现有的人机交互,尤其是在现有的按钮上加一些动画的效果,例如鼠标移上去变大,移开还原 ...
- Qt编写的开源帖子集合(懒人专用)
回顾自己学习Qt以来九年了,在这九年多时间里面,从本论坛学习不到不少的东西,今天特意整了一下自己开源过的资源的帖子,整理一起方便大家直接跳转下载,不统计不知道,一统计吓一跳,不知不觉开源了这么多代码, ...
- Qt编写安防视频监控系统(界面很漂亮)
一.前言 视频监控系统在整个安防领域,已经做到了烂大街的程序,全国起码几百家公司做过类似的系统,当然这一方面的需求量也是非常旺盛的,各种定制化的需求越来越多,尤其是这几年借着人脸识别的东风,发展更加迅 ...
- Qt编写自定义控件55-手机通讯录
一.前言 前面几篇文章中的控件基本上难度系数接近0,甚至有凑控件数量的嫌疑,这次必须来一个强悍的控件,本控件难度系数在所有控件中排前五,代码量也不少,头文件都550行,实现文件1600行,为什么这么多 ...
- Qt编写数据可视化大屏界面电子看板1-布局方案
一.前言 布局方案在整个数据可视化大屏界面电子看板系统中,是除了基础功能以外的核心功能之一,只有具备了布局方案这个功能,才能让用户随意调整自己想要的布局,保存成自定义名称的布局配置文件,这样就大大增加 ...
随机推荐
- python中的内置函数zip函数
关于zip()函数,有几点要讲的. 首先,官方文档中,它是这样描述的: Make an iterator that aggregates elements from each of the itera ...
- 容器化部署nacos 1.4.6报错caused: The specified key byte array is 0 bits which is not secure enough for any JWT
nacos2.0+ 与nacos 1.x区别 nacos在2.0+版本开始使用grpc与客户端通信,并且通过非8848端口通信 主要是有两个端口 端口 与主端口的偏移量 描述 9848 1000 客户 ...
- 阿里云服务器安装mysql镜像
新创建的服务器首先需要创建安全组,开放端口然后重启服务器 登陆远程服务器,具体操作步骤如下 #拉取镜像 docker pull mysql:5.7 #查看镜像是否拉取到 docker images # ...
- 探索 Kubernetes 持久化存储之 Rook Ceph 初窥门径
在 Kubernetes 生态系统中,持久化存储是支撑业务应用稳定运行的基石,对于维护整个系统的健壮性至关重要.对于选择自主搭建 Kubernetes 集群的运维架构师来说,挑选合适的后端持久化存储解 ...
- 【2022noip多校】异或
[题目描述] 对于一个元素介于 \([0,2^m)\) 且互不相同的长度为 \(n\) 的序列 \(a_1, a_2 ...,a_n\) ,定义它的特征序列为 \(p_0,p_1,...,p_{2^m ...
- CSS动画效果(鼠标滑过按钮动画)
1.整体效果 https://mmbiz.qpic.cn/sz_mmbiz_gif/EGZdlrTDJa5SXiaicFfsrcric7TJmGO6YddqC4wFPdM7PGzPHuFgvtDS7M ...
- Java编程案例(专题)
文章目录 案例一:买飞机票 案例二:开发验证码 案例三:评委打分 案例四:数字加密 案例五:数组拷贝 案例六:抢红包 案例七:找素数 案例八:模拟双色球 8.1 手动投注 8.2 随机开奖号码 8.3 ...
- 采用线性回归实现训练和预测(Python)
已知测得某块地,当温度处于15至40度之间时,数得某块草地上小花朵的数量和温度值的数据如下表所示.现在要来找出这些数据中蕴含的规律,用来预测其它未测温度时的小花朵的数量. 测得数据如下图所示: imp ...
- 国内计算机领域相关的SCI和EI期刊,以及好中的SCI和EI期刊(不限国内外)
好中的: SCI刊: EI刊: EI会议: 参考: CCF发布计算领域高质量科技期刊分级目录 国内的: SCI-Expanded 1. <Journal of Computer Scie ...
- ETCD集群+ TLS认证
目录 1.下载etcd cfssl相关命令 2.配置文件 /app/etcd/conf/conf.yml 3.用系统命令启动,创建 /usr/lib/systemd/system/etcd.servi ...