文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Qt如何编写地图实现省市区域图

2023-06-22 04:20

关注

这篇文章主要介绍了Qt如何编写地图实现省市区域图,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、前言

省市区域图也可以叫省市轮廓图,就是将每个省份、市区的边界区域变成轮廓展示,只是个大概的轮廓,和真是的地图基本一致,毕竟都是一个个点堆起来的,可能会有很小很小的误差,之前做大屏系统中间那个中国地图的时候,客户千方百计交代清楚,千万要注意有九段线,不然在展会上被别人看到如果连九段线都没有的话会被人骂死,可能在部分早期的数据由于不是很完善所以未必有,后期的最新的地图数据都是有的,包括轮廓图数据。

echart本身是没有提供省市区域轮廓图的,需要引入外部的js文件才能绘制,为了拿到全国各省市的对应轮廓图js文件,特意去网上搜索了很多的相关文章并理解,下载到了对应的省市区域的json数据,然后根据js的规则特意写了个类专门用来转换json数据到js文件,然后生成了所有省市区域的js文件,在echart中用到哪个只需要那个的js文件即可,这些js文件在那个下载地址中都有的,至于这些区域的轮廓图其实是一些乱七八糟的符号具体什么含义我也没有搞懂,你说是base64编码吧仔细看也不像,管他呢,是正确的的能用就行,具体的原理估计也要研究echart的源码才行。

之前的闪烁点图或者迁徙图也好,都是用中国地图轮廓图作为背景的,可以鼠标缩放,其实svg也可以做到类似的效果,类似于矢量图,除了中国地图以外,其实还可以有世界地图,至于世界其他国家的地图估计要自己通过其他方式转换慢慢得到了,按道理来说应该有不少的应用软件给国外客户用的话会有。

二、功能特点

三、体验地址

体验地址:https://pan.baidu.com/s/1Ie1xGLv7tSL-9vfsv28w1Q 提取码: wf4f   文件名:bin_map.zip
国内站点:https://gitee.com/feiyangqingyun
国际站点:https://github.com/feiyangqingyun

四、效果图

Qt如何编写地图实现省市区域图

五、相关代码

QStringList EchartJs::getInfoFromData(const QByteArray &data){    //取出对应的城市名称和经纬度    //以下两种方法测试过解析时间,json大概1S,字符串分割大概5S,json方法更快    QStringList result;#if (QT_VERSION > QT_VERSION_CHECK(5,0,0))    //采用qt内置的json方法解析    QJsonParseError error;    QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);    if (error.error == QJsonParseError::NoError) {        QJsonObject rootObj = jsonDoc.object();        //qDebug() << rootObj.keys();        if (rootObj.contains("features")) {            QJsonArray features = rootObj.value("features").toArray();            for (int i = 0; i < features.count(); i++) {                QJsonValue value = features.at(i);                QJsonObject subObj = value.toObject();                if (subObj.contains("properties")) {                    QJsonObject nodeObj = subObj.value("properties").toObject();                    QStringList list;                    QJsonArray array = nodeObj.value("cp").toArray();                    for (int k = 0; k < array.count(); k++) {                        list << QString::number(array.at(k).toDouble());                    }                    QString name = nodeObj.value("name").toString();                    QString cp = list.join(",");                    result << QString("%1|%2").arg(name).arg(cp);                }            }        }    }#else    //采用字符串分割方法解析    QString temp = data;    temp = temp.mid(0, temp.length() - 24);    QString flag = "properties";    int len = temp.length();    for (int i = 0; i < len; i++) {        QString str = temp.mid(i, 10);        if (str == flag) {            str = temp.mid(i, 100);            str = str.mid(13, str.indexOf("},") - 13);            str = str.replace("}", "");            //到这步数据已经变成 "cp":[121.490317,31.222771],"name":"黄浦区","childNum":1            //cp name的顺序可能不一样,所以需要分割字符串重新判断            QString name, cp;            QStringList list = str.split(",");            foreach (QString s, list) {                if (s.startsWith("\"cp\"")) {                    cp = s.mid(6, s.length());                } else if (s.startsWith("\"name\"")) {                    name = s.mid(8, s.length());                    name = name.replace("\"", "");                } else if (s.startsWith("\"childNum\"")) {                } else {                    //经纬度会拆分成两部分,一部分在这里 31.222771]                    cp = QString("%1,%2").arg(cp).arg(s.left(s.length() - 1));                }            }            result << QString("%1|%2").arg(name).arg(cp);        }    }#endif    return result;}

感谢你能够认真阅读完这篇文章,希望小编分享的“Qt如何编写地图实现省市区域图”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯