一、前言

动态点位标注是定制的一个功能模块,提供直接地图上选点设置标记点,点位信息用结构体存储,其中包括了经度、纬度、速度、时间等信息,单击对应的标注点可以显示详细的弹框信息,弹框信息采用自定义的html格式显示,而不是地图自带的格式,这样显示更方便,比如可控不同行不同颜色或者加粗。标注点可选是否标记,标记的话就是一个设备图标显示,不标记的就普通的显示,一般在明显的拐弯的地方建议设置标记。

近期在动态点位标注功能中还增加了新增点以后立即移动到地图中心,相当于把新增的点作为地图中心点,这样可以保证每次都能看到新增的点位置,不然还要自己去移动拉动地图才能看到,其实后面的路书功能也可以增加类似的处理,轨迹点在移动的时候自动切换最近的点为中心点。

二、功能特点

  1. 定时器排队下载省市轮廓图点坐标集合存储到JS文件。
  2. 支持一个行政区域多个不规则区域下载。
  3. 自动计算行政区域的下载轮廓数量。
  4. 可精确选择省份、市区、县城,也可直接输入行政区域的名称。
  5. 可以设置下载间隔、随时开始下载和停止下载。
  6. 提供编辑边界功能,可以直接在地图上编辑好不规则区域的点集合,然后获取边界点集合数据,这个可以用来自己绘制区域拿到数据,比如某个乡镇甚至某个小区的行政区域数据,很牛逼。

三、体验地址

  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 frmMapMarker::append(const MarkerInfo &markerInfo)
{
//先删除上一次添加的线条,不然会重叠不好看
runJs("deleteOverlay('Polyline')"); //取出详细数据,添加到坐标集合中进行绘制线条
QString point = markerInfo.lng + "," + markerInfo.lat;
points << point;
QString js = QString("addPolyline('%1')").arg(points.join("|"));
runJs(js); //如果isMark则还需要添加对应的点
if (markerInfo.isMark) {
//标注点名称 为空则不显示
QString name = "";
//标注点地址 为空则不显示
QString addr = "";
//标注点弹框信息html格式标题 为空则采用默认的格式
QString title = "";
//title = "<div style=\"color:#CE5521;font-size:25px;\">标题: 测试设备</div>"; //标注点弹框信息html格式内容 为空则采用默认的格式
QString tips = "";
QStringList list;
list << QString("<div style=\"color:#CE5521;font-size:15px;\">经度: %1</div>").arg(markerInfo.lng);
list << QString("<div style=\"color:#CE5521;font-size:15px;\">纬度: %1</div>").arg(markerInfo.lat);
list << QString("<div style=\"color:#CE5521;font-size:15px;\">速度: %1 kv/h</div>").arg(markerInfo.speed);
list << QString("<div style=\"color:#CE5521;font-size:15px;\">时间: [%1]</div>").arg(markerInfo.time);
tips = list.join(""); //标注点弹框信息最小宽度
int width = 150;
//单击以后触发什么动作 0-不处理 1-自己弹框 2-发送信号
int action = 1;
//动画效果 0-不处理 1-跳动 2-坠落
int animation = 0; //动态图 http://lbsyun.baidu.com/jsdemo/img/fox.gif
//静态图 http://api.map.baidu.com/img/markers.png 需要指定iconindex
//本地图 m0.png ./m0.png m1.png 图标必须放在config文件夹下 大小默认53*52
//为空则采用默认图标
QString iconfile = "http://api.map.baidu.com/img/markers.png";
QString js = QString("addMarker('%1', '%2', '%3', '%4', %5, '%6', %7, %8, '%9')")
.arg(name).arg(addr).arg(title).arg(tips).arg(width)
.arg(point).arg(action).arg(animation).arg(iconfile);
runJs(js); //移动中心点到当前点,不需要可以注释掉
js = QString("setCenter('%1')").arg(point);
runJs(js);
} int count = ui->tableWidget->rowCount() + 1;
ui->tableWidget->setRowCount(count); QTableWidgetItem *itemLng = new QTableWidgetItem;
QTableWidgetItem *itemLat = new QTableWidgetItem;
QTableWidgetItem *itemMark = new QTableWidgetItem;
QTableWidgetItem *itemSpeed = new QTableWidgetItem;
QTableWidgetItem *itemTime = new QTableWidgetItem; itemLng->setText(markerInfo.lng);
itemLat->setText(markerInfo.lat);
itemMark->setText(markerInfo.isMark ? "是" : "否");
itemSpeed->setText(QString::number(markerInfo.speed));
itemTime->setText(markerInfo.time); ui->tableWidget->setItem(count - 1, 0, itemLng);
ui->tableWidget->setItem(count - 1, 1, itemLat);
ui->tableWidget->setItem(count - 1, 2, itemMark);
ui->tableWidget->setItem(count - 1, 3, itemSpeed);
ui->tableWidget->setItem(count - 1, 4, itemTime);
} void frmMapMarker::clear()
{
points.clear();
ui->tableWidget->setRowCount(0);
runJs("deleteOverlay('')");
} void frmMapMarker::on_btnAdd_clicked()
{
MarkerInfo markerInfo;
markerInfo.lng = ui->txtLng->text().trimmed();
markerInfo.lat = ui->txtLat->text().trimmed();
markerInfo.isMark = (ui->cboxMark->currentIndex() == 0);
markerInfo.speed = ui->txtSpeed->text().trimmed().toInt();
markerInfo.time = ui->txtTime->text().trimmed();
append(markerInfo);
}

Qt编写地图综合应用54-动态点位标注的更多相关文章

  1. Qt编写自定义控件插件开放动态库dll使用(永久免费)

    这套控件陆陆续续完善了四年多,目前共133个控件,除了十几个控件参考网友开源的代码写的,其余全部原创,在发布之初就有打算将动态库开放出来永久免费使用,在控件比较完善的今天抽了半天时间编译了多个qt版本 ...

  2. Qt编写自定义控件59-直方动态图

    一.前言 直方动态图类似于音乐播放时候的柱状图展示,顶部提供一个横线条,当柱状上升的时候,该线条类似于帽子的形式冲到顶端,相当于柱状顶上去的感觉,给人一种动态的感觉,听音乐的同时更加赏心悦目,原理比较 ...

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

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

  4. Qt编写的开源帖子集合(懒人专用)

    回顾自己学习Qt以来九年了,在这九年多时间里面,从本论坛学习不到不少的东西,今天特意整了一下自己开源过的资源的帖子,整理一起方便大家直接跳转下载,不统计不知道,一统计吓一跳,不知不觉开源了这么多代码, ...

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

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

  6. Qt编写自定义控件二动画按钮

    现在的web发展越来越快,很多流行的布局样式,都是从web开始的,写惯了Qt widgets 项目,很多时候想改进一下现有的人机交互,尤其是在现有的按钮上加一些动画的效果,例如鼠标移上去变大,移开还原 ...

  7. Qt编写自定义控件11-设备防区按钮控件

    前言 在很多项目应用中,需要根据数据动态生成对象显示在地图上,比如地图标注,同时还需要可拖动对象到指定位置显示,能有多种状态指示,安防领域一般用来表示防区或者设备,可以直接显示防区号,有多种状态颜色指 ...

  8. Qt编写自定义控件10-云台仪表盘

    前言 做过安防视频监控的同学都清楚,在视频监控系统软件上都可以看到一个云台控制区域,可以对球机进行下下左右等八个方位的运动控制,还可以进行复位,一般都是美工作图好,然后贴图的形式加入到软件中,好处是程 ...

  9. Qt编写数据可视化大屏界面电子看板系统

    一.前言 目前大屏大数据可视化UI这块非常火,趁热也用Qt来实现一个,Qt这个一站式超大型GUI超市,没有什么他做不了的,大屏电子看板当然也不在话下,有了QSS和QPainter这两个无敌的工具组合, ...

  10. Qt编写安防视频监控系统18-云台控制

    一.前言 云台控制是视频监控系统中必备的一个功能,对球机进行上下左右的移动,还有焦距的控制,其实核心就是控制XYZ三个坐标轴,为了开发这个模块,特意研究了各种云台控制的方法和开源库比如soap,有些厂 ...

随机推荐

  1. Java 面向对象高级

    文章目录 1.静态 1.1 static修饰成员变量 1.2 static修饰成员变量的应用场景 1.3 static修饰成员方法 1.4 工具类 1.5 static的注意事项 1.6 static ...

  2. Python实现摇号系统

    1.引言 摇号系统在现代社会中有广泛的应用,特别是在车牌摇号.房屋摇号等公共资源分配领域.摇号系统的主要目的是通过随机分配的方式,确保资源的公平.公正分配.本文将详细介绍如何使用Python实现一个简 ...

  3. IWeb4j 项目解决web自动化回归测试痛点!

    IWeb4j 项目思想 IWeb项目的测试用例使用数据驱动测试,当下数据驱动使用最多的无非是excel.yaml.json.数据库(后续通过SpringDataJPA实现数据库驱动)作为数据驱动的载体 ...

  4. orange pi 香橙派 zero 刷openwrt当作有wifi的小路由器用

    前面写过我用香橙派zero来测量温度 https://www.cnblogs.com/jar/p/15848178.html 最近准备把他改造成路由器 https://www.right.com.cn ...

  5. 初步学习Nuxt3

    Nuxt3 用于制作ssr 网页 支持vue3 所有的语法,并且支持了TypeScript, vite+vue3+composition api + ts.SPA单页面应用不能进行SEO优化,SSR应 ...

  6. 使用 MySQL Shell 获取 MySQL 诊断信息(译)

    收集全面的诊断信息可能会让人望而却步.知道要运行哪些查询以获取所需数据更像是一种艺术形式,而非其他什么.幸运的是,对于那些不太擅长艺术的人来说,MySQL Shell 使得获取这些信息变得更加容易.让 ...

  7. 我和JVM初次约会

    前言:该篇是参考结合<高手深度解析:JVM是什么>,自己剔除添加了一些内容整理的而来,这里感谢<高手深度解析:JVM是什么>的文章的指点讲解. JVM的生命周期 "J ...

  8. Hibernate 之Hibernate缓存

    1.缓存:缓存是什么,解决什么问题? 位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为 Cache(摘自Robbin的<缓存技术浅谈>).目的:让数据 ...

  9. go官方包依赖管理工具之mod

    1.1.go mod是什么 go mod 是Golang 1.11 版本引入的官方包(package)依赖管理工具,用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理. 之前Golang ...

  10. 无快不破,在本地 docker 运行 IDEA 里面的项目?

    目录 前言 Docker Compose 1. Docker Compose是什么? 2. Docker Compose 的具体步骤 3. 如何在IDEA项目里面使用Docker Compose 启动 ...