一个功能完整的公共交通导航系统,包含Java桌面应用程序和Web交互式地图两个独立但相互补充的部分。系统提供智能路径规划、实时地图可视化、线路管理及3D网页地图展示功能。
本项目由两大核心模块组成:
- Java桌面应用:基于Swing开发的完整交通导航系统,提供用户导航、管理员管理等功能
- Web交互地图:基于百度地图GL API的现代化Web应用,提供3D地图视图和路径规划
两者可通过Java应用中的"打开3D网页地图"按钮无缝衔接,为用户提供完整的跨平台出行解决方案。
- 智能导航:支持四种导航策略(时间最短、换乘最少、只坐公交、只坐地铁)
- 线路查询:查看任意线路的详细站点信息和运营时间
- 直连查询:快速查询两站之间的直达线路
- 交互式地图:支持缩放、拖拽、视图切换(全部/地铁/公交)
- 管理功能:完整的CRUD操作(增删改查站点、线路、连接)
- 数据持久化:自动保存到
routes.txt文件 - 现代化UI:采用2025年流行的莫兰迪色系和卡片设计
- 3D地图视图:支持倾斜、旋转、缩放等3D操作
- 路径规划:驾车、公交、步行、骑行多种出行方式
- 地铁专图:独立的地铁线路图,支持线路查询和站点详情
- 实时定位:获取用户当前位置
- 样式切换:简洁模式与默认模式切换
- 路线详情:详细的步骤说明和时间估算
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-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文件在正确的包结构中
- 准备
routes.txt数据文件(项目已包含示例数据) - 运行主类:
javac Main.java && java Main
- 在
config.js中配置百度地图AK(需要自行申请) - 使用现代浏览器打开
index.html - 或者通过Java应用的"打开3D网页地图"按钮自动启动
- 默认密码:
123456 - 可在
PublicTransportSystem.java中修改密码
- 前往百度地图开放平台注册账号
- 创建应用,获取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 11+
- GUI框架:Swing (AWT图形绘制)
- 数据结构:邻接表图 + 优先队列 (Dijkstra算法)
- 算法:加权最短路径搜索,支持多种策略
- 文件IO:自定义文本格式解析器
-
-
-
- 地图引擎:百度地图GL API(WebGL)
- 前端技术:HTML5, CSS3, JavaScript (ES6+)
- 架构:模块化JavaScript,面向对象设计
- 交互:鼠标/触摸事件,3D视图控制
-
-
系统实现了加权Dijkstra算法,支持多种策略:
| 策略类型 | 权重计算 | 适用场景 |
|---|---|---|
| 时间最短 | 连接时间 + 换乘罚时(5分钟) | 最快到达 |
| 换乘最少 | 固定权重1 + 换乘惩罚(1000) | 最少换乘 |
| 只坐公交 | 过滤地铁连接 | 公交优先 |
| 只坐地铁 | 过滤公交连接 | 地铁优先 |
- 现代化UI:卡片设计、圆角元素、平滑过渡
- 智能排序:线路图例按类型(地铁/公交)和数字智能排序
- 视觉区分:地铁(粗线)、公交(细线)、换乘站(特殊图标)
- 实时反馈:所有操作即时在地图上可视化
- 代码结构:MVC架构,职责分离清晰
- 3D视图:支持45度倾斜视角,提供立体感
- 地铁专图:独立的地铁线路查看模式
- 响应式设计:适配桌面和移动设备
- 离线支持:Java应用内置HTTP服务器,无需网络连接
Java应用与Web地图通过以下方式集成:
- 一键启动:Java应用中的"打开3D网页地图"按钮启动本地HTTP服务器
- 功能互补:Java提供完整的CRUD管理,Web地图提供3D可视化
- 百度地图AK:Web地图需要有效的百度地图AK才能正常运行
- 坐标系统:Java应用使用整数坐标系统,Web地图使用真实经纬度
- 数据一致性:两个系统需要保持数据格式的一致性
- 端口冲突:HTTP服务器默认使用8899端口,避免与其他服务冲突
- 在
NavigationService.java中添加策略常量 - 修改
search()方法中的权重计算逻辑 - 在
UserPanel.java中更新下拉框选项
- 修改
VisualMapPanel.java中的COLOR_PALETTE - 调整
drawLegend()方法中的图例布局 - 修改站点/线路的绘制逻辑
- 准备包含真实站点和线路的
routes.txt - 可使用Python/Excel脚本转换公开的GTFS数据
- 调整地图缩放和偏移参数
本项目为课程设计/毕业设计作品,遵循开源协议。具体协议信息请查看LICENSE文件。
- 感谢百度地图开放平台提供的地图API
- 感谢南京邮电大学计算机学院的指导
- 感谢所有参与测试和改进的同学
项目状态:已完成 ✅
最后更新:2025年12月
联系方式:如有问题,请通过GitHub Issues提交
南京公共交通导航系统 - 为南京市民和游客提供便捷的出行解决方案