boxmoe_header_banner_img

Hello! 欢迎来到Bin's Home!

加载中

文章导读

南京公共交通导航系统


avatar
Bin 2025年12月26日 75

🚇 南京公共交通导航系统 (Nanjing Public Transport Navigation System)

最近的课程设计要求制作一个导航系统,因此我把自己的课设放在这里。

浏览仓库请移步https://github.com/ElovisiaWinslow/JavaBaiduMapNav

这是一个功能完整的公共交通导航系统,包含Java桌面应用程序Web交互式地图两个独立但相互补充的部分。系统提供智能路径规划、实时地图可视化、线路管理及3D网页地图展示功能。

🌟 项目概述

本项目由两大核心模块组成:

  1. Java桌面应用:基于Swing开发的完整交通导航系统,提供用户导航、管理员管理等功能
  2. Web交互地图:基于百度地图GL API的现代化Web应用,提供3D地图视图和路径规划

两者可通过Java应用中的”打开3D网页地图”按钮无缝衔接,为用户提供完整的跨平台出行解决方案。

✨ 功能特色

🖥️ Java桌面应用(Swing GUI)

  • 智能导航:支持四种导航策略(时间最短、换乘最少、只坐公交、只坐地铁)
  • 线路查询:查看任意线路的详细站点信息和运营时间
  • 直连查询:快速查询两站之间的直达线路
  • 交互式地图:支持缩放、拖拽、视图切换(全部/地铁/公交)
  • 管理功能:完整的CRUD操作(增删改查站点、线路、连接)
  • 数据持久化:自动保存到routes.txt文件
  • 现代化UI:采用2025年流行的莫兰迪色系和卡片设计

🌐 Web交互地图(百度地图GL)

  • 3D地图视图:支持倾斜、旋转、缩放等3D操作
  • 路径规划:驾车、公交、步行、骑行多种出行方式
  • 地铁专图:独立的地铁线路图,支持线路查询和站点详情
  • 实时定位:获取用户当前位置
  • 样式切换:简洁模式与默认模式切换
  • 路线详情:详细的步骤说明和时间估算

📁 项目结构

Java桌面应用部分

Nanjing-Transport-System/
├── controller/
│   └── PublicTransportSystem.java      # 主控制器,管理界面切换
├── model/
│   ├── Connection.java                 # 连接模型(站点间关系)
│   ├── GeoCoordinate.java              # 地理坐标模型
│   ├── LineInfo.java                   # 线路元数据模型
│   ├── RouteResult.java                # 导航结果模型
│   └── TransportGraph.java             # 交通图数据结构(核心)
├── service/
│   └── NavigationService.java          # 导航算法服务
├── view/
│   ├── AdminPanel.java                 # 管理员操作面板
│   ├── LoginPanel.java                 # 登录主界面
│   ├── ModernUI.java                   # 现代化UI工具类
│   ├── StationAutoCompleter.java       # 自动补全组件
│   ├── UserPanel.java                  # 用户操作面板
│   ├── VisualMapPanel.java             # 可视化地图组件
│   └── MiniServer.java                 # 网页地图服务器
├── Main.java                           # 程序入口
├── routes.txt                          # 数据文件(线路信息)
└── README.md                           # 项目说明文档

Web地图部分

Web-Map/
├── index.html                          # 主页面
├── style.css                           # 样式文件
├── config.js                           # 配置(百度地图AK等)
├── main.js                             # 主应用程序
├── controls.js                         # 地图控件管理
├── utils.js                            # 工具函数
├── route-planner.js                    # 路径规划逻辑
├── route-search-panel.js               # 路线搜索面板
├── subway-manager.js                   # 地铁图管理
├── markers.js                          # 景点标记数据
└── 其他可能的资源文件(如图片等)

🚀 快速开始

环境要求

  • Java 11+ (推荐JDK 17)
  • 现代浏览器(支持WebGL的Chrome/Firefox/Edge等)

Java应用运行步骤

  1. 克隆或下载项目到本地
  2. 确保所有Java文件在正确的包结构中
  3. 准备routes.txt数据文件(项目已包含示例数据)
  4. 运行主类:javac Main.java && java Main

Web地图使用

  1. config.js中配置百度地图AK(需要自行申请)
  2. 使用现代浏览器打开index.html
  3. 或者通过Java应用的”打开3D网页地图”按钮自动启动

管理员登录

  • 默认密码:123456
  • 可在PublicTransportSystem.java中修改密码

🔧 配置说明

百度地图AK配置

  1. 前往百度地图开放平台注册账号
  2. 创建应用,获取AK(访问密钥)
  3. config.js文件中配置:
const BAIDU_MAP_CONFIG = {
    AK: '您的AK',   // 替换为您的AK
    API_URL: '//api.map.baidu.com/api',
    VERSION: '1.0',
    TYPE: 'webgl'
};

4.在Miniserver.java中配置你磁盘中真实的Web项目中index.html的路径

数据文件格式

系统使用自定义的routes.txt格式存储交通网络数据:

线路数据示例

LINE|1号线|06:00|22:30|南京站,2,新模范马路,3,玄武门,2,鼓楼
LINE|公交1路|06:30|21:00|黄里,5,吴家村,4,红土凹
COORD|南京站|118.796875|32.085299

字段说明

  • LINE|线路名|首班|末班|站点1,时间1,站点2,时间2,...
  • COORD|站点名|经度|纬度
  • 时间单位:分钟

🛠️ 技术栈

Java桌面应用

  • 核心语言:Java 11+
  • GUI框架:Swing (AWT图形绘制)
  • 数据结构:邻接表图 + 优先队列 (Dijkstra算法)
  • 算法:加权最短路径搜索,支持多种策略
  • 文件IO:自定义文本格式解析器

Web交互地图

  • 地图引擎:百度地图GL API(WebGL)
  • 前端技术:HTML5, CSS3, JavaScript (ES6+)
  • 架构:模块化JavaScript,面向对象设计
  • 交互:鼠标/触摸事件,3D视图控制

📊 导航算法

系统实现了加权Dijkstra算法,支持多种策略:

策略类型权重计算适用场景
时间最短连接时间 + 换乘罚时(5分钟)最快到达
换乘最少固定权重1 + 换乘惩罚(1000)最少换乘
只坐公交过滤地铁连接公交优先
只坐地铁过滤公交连接地铁优先

🎨 设计亮点

Java桌面应用

  1. 现代化UI:卡片设计、圆角元素、平滑过渡
  2. 智能排序:线路图例按类型(地铁/公交)和数字智能排序
  3. 视觉区分:地铁(粗线)、公交(细线)、换乘站(特殊图标)
  4. 实时反馈:所有操作即时在地图上可视化
  5. 代码结构:MVC架构,职责分离清晰

Web交互地图

  1. 3D视图:支持45度倾斜视角,提供立体感
  2. 地铁专图:独立的地铁线路查看模式
  3. 响应式设计:适配桌面和移动设备
  4. 离线支持:Java应用内置HTTP服务器,无需网络连接

🔌 模块间集成

Java应用与Web地图通过以下方式集成:

  1. 一键启动:Java应用中的”打开3D网页地图”按钮启动本地HTTP服务器
  2. 功能互补:Java提供完整的CRUD管理,Web地图提供3D可视化

📝 注意事项

  1. 百度地图AK:Web地图需要有效的百度地图AK才能正常运行
  2. 坐标系统:Java应用使用整数坐标系统,Web地图使用真实经纬度
  3. 数据一致性:两个系统需要保持数据格式的一致性
  4. 端口冲突:HTTP服务器默认使用8899端口,避免与其他服务冲突

🔧 扩展开发

添加新导航策略

  1. NavigationService.java中添加策略常量
  2. 修改search()方法中的权重计算逻辑
  3. UserPanel.java中更新下拉框选项

自定义地图样式

  • 修改VisualMapPanel.java中的COLOR_PALETTE
  • 调整drawLegend()方法中的图例布局
  • 修改站点/线路的绘制逻辑

集成真实数据

  1. 准备包含真实站点和线路的routes.txt
  2. 可使用Python/Excel脚本转换公开的GTFS数据
  3. 调整地图缩放和偏移参数

📄 许可证

本项目为课程设计/毕业设计作品,遵循开源协议。具体协议信息请查看LICENSE文件。

🙏 致谢

  • 感谢百度地图开放平台提供的地图API
  • 感谢南京邮电大学计算机学院的指导
  • 感谢所有参与测试和改进的同学

项目状态:已完成 ✅
最后更新:2025年12月
联系方式:如有问题,请通过GitHub Issues提交


南京公共交通导航系统 – 为南京市民和游客提供便捷的出行解决方案



评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字

插入代码