校园地图

利用Qt框架和数据结构,制作了一个校园地图应用,支持选择起点和终点显示路线。通过贴图显示地图,使用自定义的简单寻路算法有效找到路径,同时具备节点信息展示功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.项目描述

  趁课余时间做了一个小作品,项目是校园地图,主要目的是练习Qt和一些基本的数据结构和算法。该项目的主要功能是从下拉列表中选择出发地和目的地,然后地图上可以显示路线。主要的显示方法是通过贴图来显示。时间久远才想起来整理,当时也是经历了一个星期的断断续续的修补,最后形成了一个比较完善的小地图软件。

2.基本思路

  01.首先需要构建路网(很重要),我首先写了一个该版本,然后把路网标记后保存。具体用来储存的数据结构是一个具有节点信息的结构体,然后借用C++的 vector (vector真的太好用了)来记录所有的路网节点。

 typedef struct road_dot{
        int i;   // 该节点的id
        int vistable; //该节点是否可访问
        cv::Point self; //该节点在地图上的位置
        std::vector<size_t> others_id;  // 保存与该节点相连的节点的id
    }Road_node;

 

  下面是我用来标记路网并自动储存的模块:

/************************************************************************************************
 *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *   These under codes construct a tool to get the road nodes infomation                   *
 *   <2016-10-29><wuhui>                                                                   *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 */
 void MainWindow::mousePressEvent(QMouseEvent *event)
{

    if(0<x&&x<1480&&0<y&&y<800)  // if on the pic
    {



         Road_node new_node;
         new_node.self = Point(x,y);
         new_node.i = 200;  // not a pos

         cv::circle(img,Point(x,y),6,cv::Scalar(255,0,255),-1);
         qimg = Mat2QImage(img);
         ui->pic->setPixmap(QPixmap::fromImage(qimg));




         if(!first_node)
         {start_node = new_node;start_set_flag = 1; first_node =2;pre_nodes_id = 0;}

         for(int i = 0;i<point.size();i++)
         {
             if((abs(x-point[i].x) <10 )&& (abs(y-point[i].y)<10))  // if at pos
               {
                 new_node.i = i;
                 qDebug()<<"this is pos "<<i;
                 break;
               }
         }

         road.push_back(new_node);// record this new node ;


       for(int i = 0;i<road.size()-1;i++)
       {
           if((abs(x-road[i].self.x) <10 )&& (abs(y-road[i].self.y)<10))  // if at node
           {  // yes

               road.p
【摘要】西南科技大学抓住西部大开发和绵阳科技城建设的历史机遇,践行“厚德、博学、笃行、创新”校训,建设出一座美丽的校园。为此通过对《数据结构》这一课程的应用,用图的模型对学校景点抽象。用邻接矩阵存储方法和狄克斯特拉算法及图的遍历实现对校园导游系统的模拟。此系统七个功能:浏览学校景点、查看单个景点信息、查看校园地图、导游推荐、查两景点最短路线、查两景点所有景点、退出系统。 目 录 一、问题描述及设计思路..............................................3 二、详细设计过程....................................................3 2.1设计校园平面图...............................................3 2.1.1景点分析.......................................................4 2.1.2平面图.........................................................4 2.2实现景点信息查询.............................................4 2.2.1景点存储.......................................................5 2.2.2景点信息查询功能实现...........................................5 2.3图实现路径查询...............................................5 2.3.1图的建立.......................................................5 2.3.2最短路径实现...................................................6 2.3.3两点间所有路径.................................................8 2.3.4路径查找设计结果...............................................8 三、结论体会.......................................................11 四、附录...........................................................12 4.1.1Mai.cpp.......................................................124.1.3Sight.h.......................................................13 4.1.2G.h...........................................................15 五、参考文献.......................................................20
### 校园地图设计与实现的关键要素 校园地图的设计与实现在现代信息技术的支持下变得越来越便捷,同时也需要综合考虑多个方面的技术和需求。以下是关于校园地图设计的一些核心要点: #### 1. 功能划分 校园地图的功能可以根据用户角色的不同进行划分,通常分为学生用户功能和管理员功能两部分[^1]。 - **学生用户功能**:主要包括定位服务、路线规划、兴趣点(POI)查询等功能。 - **管理员功能**:涉及地图数据更新、权限管理以及后台监控等。 #### 2. 技术选型 在技术层面,可以选择多种工具和技术栈来支持校园地图的开发: - 使用百度地图API作为底层的地图框架,提供基本的地图展示和服务能力[^2]。 - 结合Unity3D渲染引擎实现三维实时渲染效果,提升用户体验。 - 如果仅需二维平面地图,则可以通过HTML+CSS构建简单的网页版校园地图[^4]。 #### 3. 地图绘制 地图绘制是整个项目的重要环节之一。具体流程可能包括以下几个方面: - 初步草图绘制可以在纸上完成初步构思后再转移到计算机上细化处理[^3]。 - 对于复杂地形或者建筑物分布密集区域,建议借助专业的GIS软件辅助制图。 #### 4. 数据存储与算法应用 为了实现高效的路径查找功能,可以采用邻接矩阵或邻接表的形式存储节点间关系,并利用经典的最短路径算法解决实际问题[^5]。例如: - Dijkstra算法适用于单源点最短路径计算; - Floyd-Warshall算法能够一次性求得所有顶点间的最小距离。 ```python import sys def floyd_warshall(graph): V = len(graph) dist = [[0 for _ in range(V)] for __ in range(V)] # 初始化距离矩阵 for i in range(V): for j in range(V): dist[i][j] = graph[i][j] # 计算每一对节点之间的最短路径 for k in range(V): for i in range(V): for j in range(V): if (dist[i][k] + dist[k][j]) < dist[i][j]: dist[i][j] = dist[i][k] + dist[k][j] return dist ``` 上述代码展示了Floyd-Warshall算法的具体实现过程,可用于寻找任意两点之间是否存在更优路径。 --- ####
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值