当前位置: 首页 > news >正文

Qt地铁智慧换乘系统浅学( 一 )存储站点,线路信息

存储

  • 定义所需要的容器
  • 定义最大最小经纬度
  • [统计站点信息 在经纬度网站](https://map.jiqrxx.com/jingweidu/)
  • 读取统计的信息存储到容器
  • 其他的一些相关函数
    • debug 显示存储的信息
    • 更新最小最大经纬度的函数
    • 获取两点之间的距离 根据经纬度

定义所需要的容器

extern QMap<QString,node> Station; //画图使用
extern QMap<QString,QList<QString> > edge; // 跑最短路
extern QMap<QString,QSet<QString> > Station_Line; // 站点所属线路总
extern QMap<QString,QColor> LineColor;  //  线路颜色
extern QMap<QString,QMap<QString,int> >dp; //两站点之间的距离;
extern QMap<QString,QMap<QString,QSet<QString> > >mp; //两站站点共同的线路

定义最大最小经纬度

extern double minLongi;
extern double minLati;
extern double maxLongi;
extern double maxLati;

统计站点信息 在经纬度网站

在这里插入图片描述
统计如下
在这里插入图片描述

读取统计的信息存储到容器

void infoinit(){QFile file(":/src/lineQD.txt");file.open(QIODevice::ReadOnly);if(!file.isOpen()){qDebug()<<"error open";return ;}QTextStream in(&file);QString buffer;QString Name;QString Color;int Num;while(true){in>>buffer>>buffer;if(in.atEnd()) break;in>>buffer>>buffer; // line name;Name = buffer;in>>buffer>>buffer; // line colorColor = buffer;in>>buffer>>buffer; // startin>>buffer;         // endin>>buffer>>buffer; // station numNum = buffer.toInt();/*extern QMap<QString,node> Station; //画图使用extern QMap<QString,QList<QString> > edge; // 跑最短路extern QMap<QString,QSet<QString> > Station_Line; // 站点所属线路总extern QMap<QString,QString> LineColor;  //  线路颜色*/node stal[100];for(int i=0;i<Num;i++){  // 存储站点信息,存储站点所属线路in>>buffer>>stal[i].name>>stal[i].e>>stal[i].n;updateBound(stal[i].e,stal[i].n);qDebug()<<stal[i].name<<stal[i].e<<stal[i].n<<"\n";qDebug()<<maxLati<<" "<<maxLongi<<" "<<minLati<<" "<<minLongi<<"\n";Station[stal[i].name] = stal[i];Station_Line[stal[i].name].insert(Name);}node sta,laststa;for(int i=0;i<Num;i++){  //存储边if(i>=1) { edge[stal[i].name].append(stal[i-1].name); dp[stal[i].name][stal[i-1].name]=getDistance(stal[i].name,stal[i-1].name);mp[stal[i].name][stal[i-1].name].insert(Name);}if(i<Num-1) { edge[stal[i].name].append(stal[i+1].name); dp[stal[i].name][stal[i+1].name]=getDistance(stal[i].name,stal[i+1].name);mp[stal[i].name][stal[i+1].name].insert(Name);}}LineColor[Name] = QColor(Color);   // 存储线路颜色}for(auto i:Station.keys()) {Station[i].coord.setX((Station[i].n-minLongi)/(maxLongi-minLongi)*1000+30);Station[i].coord.setY((Station[i].e-minLati)/(maxLati-minLati)*500+30);qDebug()<<Station[i].coord<<"\n";}return;
}

其他的一些相关函数

debug 显示存储的信息

void ddebug(){qDebug()<<"all station\n";QString s;for(auto &i:Station.keys()) {qDebug()<<Station[i].name<<" "<<Station[i].e<<" "<<Station[i].w<<" ";s=*Station_Line[i].begin();if(Station_Line[i].size()!=1)  qDebug()<<"black  ";}
}

更新最小最大经纬度的函数

void updateBound(const double lati,const double longi){if(minLati>lati)minLati=lati;if(maxLati<lati)maxLati=lati;if(minLongi>longi)minLongi=longi;if(maxLongi<longi)maxLongi=longi;
}

获取两点之间的距离 根据经纬度

int getDistance(const QString sta1,const QString sta2){const double EARTH_RADIUS = 6378.137;double rlati1 = Station[sta1].w * M_PI / 180;double rlati2 = Station[sta2].w * M_PI / 180;double rlongi1 = Station[sta1].e * M_PI / 180;double rlongi2 = Station[sta2].e * M_PI / 180;double vlongi = abs(rlongi1-rlongi2);double vlati = abs(rlati1-rlati2);double h = HaverSin(vlati)+cos(rlati1)*cos(rlati2)*HaverSin(vlongi);double ret = 2*EARTH_RADIUS*asin(sqrt(h));return (int)(ret*1000);
}
double HaverSin(double theta)
{double v = sin(theta / 2);return v * v;
}
http://www.lryc.cn/news/176076.html

相关文章:

  • Python之xToolkit库
  • 2w+深度梳理!全网最全NLP面试题总结!
  • Spring 学习(五)JavaConfig 实现配置
  • 【Synapse数据集】Synapse数据集介绍和预处理,数据集下载网盘链接
  • 【运动规划算法项目实战】Dynamic Window Approach算法(附ROS C++代码)
  • 第十四届蓝桥杯大赛软件赛决赛 C/C++ 大学 B 组 试题 A: 子 2023
  • Unity 场景淡入淡出效果
  • 快速使用Spring Cache
  • Scrum敏捷开发培训内训:提升团队能力和效率的重要途径
  • kaggle新赛:Optiver 美股价格预测赛题解析
  • Vue 学习笔记 错误ResizeObserver loop completed with undelivered notifications
  • Wi-Fi直连分享:Android设备间的高速连接
  • LeetCode 面试题 05.06. 整数转换
  • 增强for循环和一般for循环的对比使用
  • 云原生之使用Docker部署RSS阅读器Huntly
  • Powershell 实现禁用密码复杂性,空密码
  • 【c语言】详解动态内存管理
  • 深度学习概念——端对端
  • 苹果触控笔有必要买吗?平价ipad电容笔推荐
  • React的高阶函数
  • Java8实战-总结34
  • uniapp项目实践总结(二十四)安卓平台 APP 打包教程
  • GeoServer地图服务器权限控制
  • Python+requests+unittest+excel实现接口自动化测试框架
  • 25807-2020 间脲基苯胺盐酸盐 课堂随笔
  • 苹果手机通讯录联系人如何一键删除? 1个方法轻松解决!
  • 【Linux成长史】Linux编辑器-gcc/g++使用
  • 【CNN-FPGA开源项目解析】卷积层03--单格乘加运算单元PE 单窗口卷积块CU 模块
  • 一文教你学会ArcGIS Pro地图设计与制图系列全流程(2)
  • ICML 2017: 基于卷积的Seq2Seq解决方案