Qt编写地图综合应用50-获取区域边界
一、前言
区域边界也是一些坐标点集合,而且不同的行政区划得到的区域边界点数组集合个数不同,觉得部分都是一个集合,少部分有一些飞地之类的,需要多个闭合区域,所以会得到多个数组集合,绘制的时候都要分别取出来绘制就行。
获取边界点一般和行政区划搭配起来使用,比如用户输入一个省市的名称,然后自动定位到该省市,然后对该轮廓获取所有边界点集合输出到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
- 个人主页:https://blog.csdn.net/feiyangqingyun
- 知乎主页:https://www.zhihu.com/people/feiyangqingyun/
四、效果图

五、相关代码
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编写地图综合应用50-获取区域边界的更多相关文章
- Qt编写安防视频监控系统17-在线地图
一.前言 在线地图模块在一开始设计整个系统的时候就考虑进去了,主要功能就是在摄像机管理中,提供经纬度信息,然后加载百度地图在浏览器中显示,根据摄像机信息表中的每个摄像机的经纬度信息,自动生成设备点在地 ...
- Qt编写的开源帖子集合(懒人专用)
回顾自己学习Qt以来九年了,在这九年多时间里面,从本论坛学习不到不少的东西,今天特意整了一下自己开源过的资源的帖子,整理一起方便大家直接跳转下载,不统计不知道,一统计吓一跳,不知不觉开源了这么多代码, ...
- Qt编写项目作品大全(自定义控件+输入法+大屏电子看板+视频监控+楼宇对讲+气体安全等)
一.自定义控件大全 (一).控件介绍 超过160个精美控件,涵盖了各种仪表盘.进度条.进度球.指南针.曲线图.标尺.温度计.导航条.导航栏,flatui.高亮按钮.滑动选择器.农历等.远超qwt集成的 ...
- Qt编写安防视频监控系统(界面很漂亮)
一.前言 视频监控系统在整个安防领域,已经做到了烂大街的程序,全国起码几百家公司做过类似的系统,当然这一方面的需求量也是非常旺盛的,各种定制化的需求越来越多,尤其是这几年借着人脸识别的东风,发展更加迅 ...
- Qt编写自定义控件11-设备防区按钮控件
前言 在很多项目应用中,需要根据数据动态生成对象显示在地图上,比如地图标注,同时还需要可拖动对象到指定位置显示,能有多种状态指示,安防领域一般用来表示防区或者设备,可以直接显示防区号,有多种状态颜色指 ...
- Qt编写安防视频监控系统18-云台控制
一.前言 云台控制是视频监控系统中必备的一个功能,对球机进行上下左右的移动,还有焦距的控制,其实核心就是控制XYZ三个坐标轴,为了开发这个模块,特意研究了各种云台控制的方法和开源库比如soap,有些厂 ...
- Qt编写气体安全管理系统10-数据导出
一.前言 数据导出一般指导出到excel表格,可能有部分用户还需要导出到pdf,因为pdf基本上不可编辑,防止用户重新编辑导出的数据,excel可能绝大部分用过电脑的人都知道,广为流行,主要就是微软的 ...
- Qt编写自定义控件38-高亮按钮
一.前言 高亮按钮控件,既可以作为类似于交通指示灯使用,也可以作为设备状态指示灯使用,控件内置多套颜色风格,还可以自己设置颜色风格,按钮可以增加文字显示,非常适合需要在状态设备上显示小量的文字展示,按 ...
- Qt编写自定义控件34-磁盘容量统计
一.前言 磁盘容量统计控件,说白了,就是用来统计本地盘符占用的容量,包括但不限于已用空间.剩余空间.总大小.已用百分比等,其中对应的百分比采用进度条显示,该进度条的前景色和背景色及文字颜色可以设置,在 ...
- Qt编写自定义控件20-自定义饼图
前言 上次在写可视化数据大屏电子看板项目的时候,为了逐步移除对QChart的依赖(主要是因为QChart真的太垃圾了,是所有Qt的模块中源码最烂的一个,看过源码的人没有一个不吐槽,不仅不支持10W级别 ...
随机推荐
- MongoDB安装及配置Navicat MongoDB Tools
一.下载MongoDB 1.下载网址:https://www.mongodb.com/try/download/community 注:本文档以Windows和msi安装为例 二.安装MongoDB ...
- JOI Open 2017(口胡)
T1 Amusement Park 题意:通信题.给定一张 \(n\) 个点 \(m\) 条边的无向连通图.Alice 会得到一个 \([0, 2^{60})\) 中的数 \(x\),并且她需要给这张 ...
- 分享一个很好用的代理转发工具:rinetd
rinetd介绍: 安装与使用:https://zhuanlan.zhihu.com/p/530875131 注意事项: 1.如果发现配置中的端口在进程中没找到,那就是配置填写错误导致的,笔者就遇到过 ...
- 欢迎来到IoT解忧杂货铺
这是一间特殊的杂货铺 门面不大,却包罗万物 如果你也遇到一些烦恼 欢迎来到,IoT解忧杂货铺 解忧秘方·工业 厂里的几十台设备真让人头疼 协议种类太多太复杂 设备没法全联网 产线故障了也不知道 自己出 ...
- WebDriver常用属性和方法
除了上一篇的元素定位方法,Selenium中的WebDriver类中还有一些常用的属性和方法 一.常用的属性 1.下表列出了WebDriver的常用属性 # 属性 属性描述 用途 1 driver.n ...
- 熟悉使用DOS操作命令
DOS操作实验 一.实验目的 DOS是市场上早期获得巨大成功的桌面操作系统,现在很多同学都不太熟悉.本实验的目的就是让同学们读者从操作系统理论的观点来重新认识它们,了解和掌握DOS有关用户接口的特点. ...
- 推荐一个跨平台支持Word, Excel, CSV, Email等30多种格式的操作库
更多开源项目请查看:一个专注推荐优秀.Net开源项目的榜单 在我们日常项目开发中,经常需要解析操作文档,比如Office文档.Email文件.PDF.Xml.图片.Mp3等音频文件,操作Office. ...
- P4690 Ynoi2016 镜中的昆虫
P4690 Ynoi2016 镜中的昆虫 原题不会见祖宗. 前置 珂朵莉树.cdq 分治.树状数组 思路 单点修改区间查询 定义 \(pre_i\) 表示 \(col_i\) 的前一个一样颜色的位置, ...
- The Bento Box Adventure
题目来源:codeforces 2041A 题目名称:The Bento Box Adventure 题目链接:https://codeforces.com/contest/2041/problem/ ...
- Liunx-Shell脚本
shell可以理解为对命令行的一个解释器,命令行输入命令,shell执行,linux系统输出结果 1. shell脚本格式 开头: #!/bin/bash #!告诉系统其后路径所指定的程序即是解释此脚 ...