本文主要介绍Qt如何编图实现省市区域地图,具有一定的参考价值。有兴趣的朋友可以参考一下。希望大家看完这篇文章后收获多多。让边肖带你去了解一下。
00-1010省市区域图也可以称为省市轮廓图,即把每个省市的边界区域变成轮廓显示,这只是一个大致的轮廓,与实景图基本一致。毕竟都是一个个堆砌起来的,可能会有小错误。在大屏系统中间制作中国地图之前,客户想尽一切办法想清楚,一定要注意九段线。不然在展会上被别人看到,连九段线都没有,会被骂死。可能有些前期数据因为不完善可能没有,但后期最新的地图数据是有的,包括轮廓数据。
Echart本身不提供省市的轮廓图,需要引入外部js文件进行绘制。为了得到全国各省市对应大纲图的js文件,我特意在网上搜索了很多相关文章并了解了一下,下载了对应省市的json数据,然后专门编写了一个类,根据js规则将jsON数据转换成js文件,然后生成各省市的JS文件。在echart中使用哪一个只需要那个的js文件。这些js文件可以在下载地址找到。至于这些区域的轮廓图,其实是一些凌乱的符号。不知道具体是什么意思。你说这是base64编码。仔细看不像。不管怎样,用它是对的。具体原理估计还需要研究echart的源代码。
之前的闪烁点图或者迁移图都是基于中国的轮廓图,可以用鼠标缩放。事实上,svg也可以达到类似的效果,类似于矢量地图。除了中国地图,还可以有世界地图。至于世界上其他国家的地图,估计要通过其他方式慢慢转换。原则上应该有很多针对国外客户的应用软件。
00-1010还支持闪烁点图、迁移图、区域图、仪表盘等。
可以设置标题、提示信息、背景色、文字色、线条色、区域色等各种颜色。
可以设置城市的名称、数值、经纬度集。
您可以设置地图的放大倍数以及是否允许鼠标滚轮缩放。
内置世界地图、国家地图、省地图、区域地图可精准到县,所有地图均离线使用。
内置json数据文件到各省市js文件的功能,如有数据更新,可自行转换,支持单文件转换,所有文件一键转换。
内置从json文件或js文件获取该区域所有名称和经纬度信息集的功能,通过这种方法可以获取信息进行显示。
根据显示地图的浏览器组件,提供的演示支持webkit、webengine和ie加载网页。
极具拓展性,可以根据葫芦画瓢自行添加各种精美的echarts组件,制作出令人敬畏的效果。
内置仪表盘组件提供交互功能,演示演示包含相应的代码。
界面友好统一,使用简单方便,就一个类。
支持任何Qt版本,任何系统和任何编译器。
00-1010体验地址:https://pan.baidu.com/s/1Ie1xGLv7tSL-9vfsv28w1Q提取代码: wf4f文件名:bin_map.zip
国内网站:https://gitee.com/feiyangqingyun
国际网站:https://github.com/feiyangqingyun
一、前言
二、功能特点
qstrillistechartjs : getinofromdata(constQByteArraydata)
{
//取出对应的城市名称和经纬度。
//下面两种方法测试了解析时间,json大概是1S,字符串分段大概是5s,JSON方法比较快。
qstringlisterresult;
# if(QT _ VERSION QT _ VERSION _ CHECK(5,0,0))
//用qt内置的json方法解析
QJsonParseErrorerror
QJsonDocumentjsonDoc=qjsondocument: fromjson(数据,错误);
if(错误. er
ror == 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如何编写地图实现省市区域图”这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/153411.html