Qt编写地图实现动态点位标注的示例代码

 更新时间:2022年02月10日 16:27:38   作者:feiyangqingyun  
动态点位标注是定制的一个功能模块,提供直接地图上选点设置标记点,点位信息用结构体存储,其中包括了经度、纬度、速度、时间等信息。本文将介绍实现这一功能的示例代码,需要的可以参考一下

一、前言

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

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

二、功能特点

定时器排队下载省市轮廓图点坐标集合存储到JS文件。

支持一个行政区域多个不规则区域下载。

自动计算行政区域的下载轮廓数量。

可精确选择省份、市区、县城,也可直接输入行政区域的名称。

可以设置下载间隔、随时开始下载和停止下载。

提供编辑边界功能,可以直接在地图上编辑好不规则区域的点集合,然后获取边界点集合数据,这个可以用来自己绘制区域拿到数据,比如某个乡镇甚至某个小区的行政区域数据,很牛逼。

三、体验地址

体验地址:https://pan.baidu.com/s/15ZKAlptW-rDcNq8zlzdYLg  提取码:uyes 文件名:bin_map.zip

国内站点:https://gitee.com/feiyangqingyun

国际站点:https://github.com/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编写地图实现动态点位标注的示例代码的详细内容,更多关于Qt动态点位标注的资料请关注脚本之家其它相关文章!

相关文章

  • 在while中使用cin>>a 为条件及注意事项说明

    在while中使用cin>>a 为条件及注意事项说明

    这篇文章主要介绍了在while中使用cin>>a 为条件及注意事项说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 详解用C语言实现三子棋游戏流程

    详解用C语言实现三子棋游戏流程

    三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了
    2021-11-11
  • C语言变长数组 struct中char data[0]的用法详解

    C语言变长数组 struct中char data[0]的用法详解

    下面小编就为大家带来一篇C语言变长数组 struct中char data[0]的用法详解。小编觉得挺不错的现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 一文弄懂C语言EOF

    一文弄懂C语言EOF

    在 C语言中,EOF 是一个宏定义,EOF 常常用于文件的输入输出中,当读取到文件结束时,会返回 EOF,本文就详细的介绍一下具体使用方法,感兴趣的可以一起来了解一下
    2023-05-05
  • C++实现的打字母游戏示例

    C++实现的打字母游戏示例

    这篇文章主要介绍了C++实现的打字母游戏,涉及C++字体操作、时间及键盘响应相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • C++实现迷宫游戏

    C++实现迷宫游戏

    这篇文章主要为大家详细介绍了C++实现迷宫游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • C++ OpenCV绘制简易直方图DrawHistImg

    C++ OpenCV绘制简易直方图DrawHistImg

    本文主要介绍了一个能绘制简易直方图的简单函数DrawHistImg,可以帮助大家快速掌握绘制的原理,可以根据自己的创意对其进行改善和补充。需要的朋友可以参考一下
    2021-12-12
  • 浅析C语言中的内存布局

    浅析C语言中的内存布局

    以下是对C语言中的内存布局进行了详细的分析介绍。需要的朋友可以过来参考下
    2013-08-08
  • C++/JAVA/C#子类调用父类函数情况总结

    C++/JAVA/C#子类调用父类函数情况总结

    今天小编就为大家分享一篇关于C++/JAVA/C#子类调用父类函数情况总结,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • C/C++并查集的查询与合并实现原理

    C/C++并查集的查询与合并实现原理

    这篇文章主要介绍了C/C++并查集的查询与合并,并查集是一种用来管理元素分组情况的数据结构。并查集可以高效地进行如下操作
    2023-02-02

最新评论