文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

QT编写地图实现获取区域边界的方法是什么

2023-06-26 05:26

关注

本篇内容介绍了“QT编写地图实现获取区域边界的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、前言

区域边界也是一些坐标点集合,而且不同的行政区划得到的区域边界点数组集合个数不同,觉得部分都是一个集合,少部分有一些飞地之类的,需要多个闭合区域,所以会得到多个数组集合,绘制的时候都要分别取出来绘制就行。

获取边界点一般和行政区划搭配起来使用,比如用户输入一个省市的名称,然后自动定位到该省市,然后对该轮廓获取所有边界点集合输出到js文件,最后供离线使用,获取边界点还有一个功能就是获取当前区域内的左下角右上角等经纬度坐标,这个主要是供离线地图下载使用的,百度地图很好的提供了bdary.get(cityname, function(rs)的函数来获取行政区划的边界点集合,其中rs.boundaries就是所有的边界点集合,估计他是服务器上存储好的每个区域的集合,查询到了立即返回,可能早期也是人工的一点点圈起来连线好存到到数据库的,按照此方式其实可以搞一个程序自动将全国的所有省市边界点集合数据全部扒下来,给离线地图使用,测试了下貌似只支持到县城级别,不支持具体到乡镇。

二、功能特点

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

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

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

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

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

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

三、体验地址

体验地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取码:o05q 文件名:bin_map.zip

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

国际站点:https://github.com/feiyangqingyun

四、效果图

QT编写地图实现获取区域边界的方法是什么

五、相关代码

void frmMapBoundary::getBoundary(){    //判断当前索引对应的省会的复选框有没有勾选,没有勾选则找到下一个勾选的    int count = names.count();    while (indexMain < count - 1 && !cks.at(indexMain)->isChecked()) {        indexMain++;        indexSub = 0;    }    //到了最后一个省会的索引,停止定时器    if (indexMain == count || !cks.at(indexMain)->isChecked()) {        on_btnStop_clicked();        return;    }    //下载到省会的最后一个县,索引自动跳到下一个省会    QStringList list = names.at(indexMain);    if (indexSub == list.count()) {        indexMain++;        indexSub = 0;        getBoundary();        return;    }    QString name = list.at(indexSub);    addBoundary(name);    indexSub++;    //更新进度条    int value = bars.at(indexMain)->value();    bars.at(indexMain)->setValue(value + 1);    ui->txtTip->setText(name);}void frmMapBoundary::addBoundary(){    //开启编辑状态    QString name = ui->cboxName->currentText();    addBoundary(name, true);}void frmMapBoundary::addBoundary(const QString &name, bool edit){    currentName = name;    QString js = QString("addBoundary('%1', true, %2)").arg(name).arg(edit ? "true" : "false");    runJs(js);}void frmMapBoundary::saveBoundary(const QString &fileName, const QVariant &data){    //传过来的是行政区划的边界点坐标集合,存储到js文件    //可能会有多个数据,比如台湾的金门岛,都是独立的区域形状,存入数组    QStringList boundarys;    QStringList list = data.toString().split("|");    foreach (QString points, list) {        boundarys << QString("{'points': '%1'}").arg(points);    }    //最终js文件内容数据    QString boundary = QString("var boundarys = [%1]").arg(boundarys.join(", "));    QFile file(fileName);    if (file.open(QFile::WriteOnly | QFile::Truncate)) {        QTextStream out(&file);#if (QT_VERSION < QT_VERSION_CHECK(6,0,0))        out.setCodec("utf-8");#endif        out << boundary;    }}

“QT编写地图实现获取区域边界的方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

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

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

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

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

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

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

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