🚇 南京公共交通导航系统 (Nanjing Public Transport Navigation System)
最近的课程设计要求制作一个导航系统,因此我把自己的课设放在这里。
浏览仓库请移步https://github.com/ElovisiaWinslow/JavaBaiduMapNav
这是一个功能完整的公共交通导航系统,包含Java桌面应用程序和Web交互式地图两个独立但相互补充的部分。系统提供智能路径规划、实时地图可视化、线路管理及3D网页地图展示功能。
🌟 项目概述
本项目由两大核心模块组成:
- Java桌面应用:基于Swing开发的完整交通导航系统,提供用户导航、管理员管理等功能
- 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应用运行步骤
- 克隆或下载项目到本地
- 确保所有Java文件在正确的包结构中
- 准备
routes.txt数据文件(项目已包含示例数据) - 运行主类:
javac Main.java && java Main
Web地图使用
- 在
config.js中配置百度地图AK(需要自行申请) - 使用现代浏览器打开
index.html - 或者通过Java应用的”打开3D网页地图”按钮自动启动
管理员登录
- 默认密码:
123456 - 可在
PublicTransportSystem.java中修改密码
🔧 配置说明
百度地图AK配置
- 前往百度地图开放平台注册账号
- 创建应用,获取AK(访问密钥)
- 在
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) | 最少换乘 |
| 只坐公交 | 过滤地铁连接 | 公交优先 |
| 只坐地铁 | 过滤公交连接 | 地铁优先 |
评论(0)
暂无评论