【共创季稿事节】「毕业季 · 鸿蒙同行」基于 HarmonyOS 的智慧校园导航系统毕业设计全解析
文章目录
-
- 每日一句正能量
- 一、选题背景:为什么毕业设计适合做“智慧校园导航”
- 二、需求分析:从“能导航”升级到“会理解校园”
- 三、HarmonyOS 6.1 技术选型
- 四、系统总体架构设计
- 五、数据模型设计
- 六、核心模块拆分
- 七、业务流程:从“问一句”到“开始导航”
- 八、Intents Kit:实现“系统入口一键导航”
- 九、AI 智能问路:让系统听懂校园语言
- 十、NavigationService:路线生成核心
- 十一、ArkUI 页面:手机和平板双端适配
- 十二、跨设备接续:手机发起,平板查看
- 十三、离线缓存:校园场景的稳定性保障
- 十四、无障碍导航:让毕业设计更有温度
- 十五、通知与活动推荐
- 十六、开发难点与解决方案
- 十七、性能测试与优化
- 十八、成果展示:毕业设计可以怎么演示
- 十九、答辩 PPT 结构建议
- 二十、总结

每日一句正能量
不必对全世界失望,百步之内必有芳草。
当你觉得周围全是荆棘,提醒自己:美好不会很远,可能就在下一个转角。

标记:参与方向三「毕业季 · 鸿蒙同行」文章投稿。
一、选题背景:为什么毕业设计适合做“智慧校园导航”
每年毕业季,我都会在校企合作课程里遇到一个很典型的问题:学生希望毕业设计既有技术含量,又能落到真实场景;企业导师希望项目不要停留在“页面展示”,而是能体现移动端工程能力、用户体验设计和系统架构能力。
“智慧校园导航系统”正好处在这两个需求的交叉点。
对新生来说,开学第一周最常见的痛点不是“没有地图”,而是“地图不懂校园”:教学楼有简称,实验室有门禁,活动地点会临时变更,食堂和校医院在高峰期有明显时间差;对老师和访客来说,校园内部道路、停车点、会议室、无障碍路线同样需要更贴近场景的导航。传统地图解决的是城市级路径,而智慧校园导航解决的是“校园知识 + 导航体验 + 多端协同”。
因此,本篇以 HarmonyOS 6.1(API 23) 为目标环境,设计一个增强版毕业设计方案:不仅实现校园地图浏览和路径规划,还加入 AI 智能问路、Intent Framework 一键导航、元服务快速入口、手机到平板的跨设备接续、课程表联动、活动推荐、离线缓存与无障碍路线推荐。项目既适合毕业答辩展示,也适合作为校企合作课程中的综合实训案例。
二、需求分析:从“能导航”升级到“会理解校园”
本系统的用户分为四类:
- 学生用户:查看课程地点、快速导航到教室、查询食堂/图书馆/实验室。
- 教师用户:会议室导航、实验室预约地点导航、课程地点变更提醒。
- 访客用户:校门到学院楼、停车场到会议地点、无障碍路线。
- 管理员用户:维护楼宇、POI、活动地点、道路状态和推荐内容。
围绕这些角色,系统划分为八个核心功能:
- 校园地图浏览:展示教学楼、宿舍、食堂、运动场、图书馆等 POI。
- 智能路线规划:支持最短路线、少楼梯路线、夜间安全路线。
- AI 智能问路:支持“从东门到物联网实验室怎么走”这类自然语言输入。
- 课程表联动:从课程卡片直接进入教室导航。
- HarmonyOS 意图直达:通过搜索、语音或系统入口触发“导航到图书馆”。
- 元服务入口:迎新、访客、活动场景可快速进入导航服务。
- 跨设备接续:手机发起导航,平板展示校园总览和路线详情。
- 离线缓存与无障碍:在网络不稳定或特殊用户场景下保障可用性。

三、HarmonyOS 6.1 技术选型
本案例采用以下技术栈:
- ArkTS:作为主要开发语言,负责页面、状态管理、服务层逻辑。
- ArkUI:构建声明式 UI,适配手机和平板不同窗口尺寸。
- Stage Model:通过 UIAbility 管理页面生命周期和入口路由。
- Intents Kit:将“去图书馆”“导航到 A302”等业务能力暴露为可被系统理解的意图。
- Location Kit:获取当前位置、监听定位变化、支持到达提醒。
- Map Kit / POI 能力:承接地图展示、地点详情和位置检索。
- ArkData / 分布式数据同步:同步路线令牌、收藏地点、历史路线等轻量数据。
- 元服务与服务卡片:把校园导航入口前置到迎新、活动、访客等高频场景。
在毕业设计中,最重要的不是堆 API,而是说明“为什么这样分层”。因此我建议把系统拆成四层:入口层、业务层、能力层和数据层。入口层解决用户从哪里进来,业务层处理导航流程,能力层封装 HarmonyOS 能力,数据层沉淀校园知识。

四、系统总体架构设计
系统采用“端侧优先 + 校园数据服务 + 管理后台”的架构。
端侧 App 负责地图展示、路线渲染、离线缓存、意图接收、页面交互和跨端接续;校园数据服务负责 POI、楼宇、路线图谱、活动地点和通知内容;管理后台负责数据维护、活动发布、路线审核和运营看板。
这种设计有三个好处:
第一,端侧体验稳定。常用 POI 和路线图谱可缓存到本地,网络抖动时仍可搜索教学楼和查看历史路线。
第二,后台可维护。学校道路施工、活动地点变更、临时封路等信息可以通过管理后台更新,而不是重新发版。
第三,适合毕业答辩。学生可以在答辩中清楚展示客户端、服务端、后台和 HarmonyOS 能力之间的关系,避免项目看起来只是几个页面。

五、数据模型设计
校园导航系统的核心不是地图图片,而是结构化校园数据。建议至少设计四张表或四类实体:
export interface CampusPoi {
id: string
name: string
alias: string[]
category: 'building' | 'classroom' | 'canteen' | 'library' | 'lab' | 'office'
latitude: number
longitude: number
floor?: number
tags: string[]
openTime?: string
accessible: boolean
}
export interface CampusRouteNode {
id: string
poiId?: string
latitude: number
longitude: number
floor?: number
nodeType: 'gate' | 'road' | 'stairs' | 'elevator' | 'classroom' | 'service'
}
export interface CampusRouteEdge {
from: string
to: string
distance: number
cost: number
accessibleCost: number
nightSafeCost: number
}
export interface CourseNavigationTask {
courseName: string
classroom: string
startTime: string
targetPoiId: string
}
这里有一个教学上的重点:路线规划不是简单地把经纬度连线,而是把校园道路抽象成图结构。对于普通路线,使用 distance + cost;对于无障碍路线,提高楼梯节点的代价,优先选择电梯或坡道;对于夜间路线,提高偏僻小路的代价,优先选择主干道和照明区域。
六、核心模块拆分
项目建议按以下目录组织:
entry/src/main/ets/
├── entryability/
│ └── EntryAbility.ets
├── pages/
│ ├── HomePage.ets
│ ├── MapPage.ets
│ ├── RouteDetailPage.ets
│ ├── AskPage.ets
│ └── ProfilePage.ets
├── model/
│ ├── CampusPoi.ets
│ ├── CampusRoute.ets
│ └── CourseTask.ets
├── service/
│ ├── CampusPoiService.ets
│ ├── NavigationService.ets
│ ├── IntentRouter.ets
│ ├── AiQuestionService.ets
│ ├── OfflineCacheService.ets
│ └── DeviceHandoffService.ets
├── component/
│ ├── SearchBar.ets
│ ├── PoiCard.ets
│ ├── RoutePanel.ets
│ └── CampusMapView.ets
└── common/
├── PermissionHelper.ets
├── Logger.ets
└── Constants.ets
这个结构适合毕业设计,也适合课堂讲解:页面只负责 UI,服务层负责业务,模型层负责数据结构,common 层封装权限、日志和常量。
七、业务流程:从“问一句”到“开始导航”
用户可以通过三个入口进入导航:搜索框输入、课程表点击、系统意图直达。进入后统一由 CampusIntentRouter 解析为导航任务,再交给 NavigationService 生成路线。

核心流程如下:
- 获取用户输入,例如“带我去图书馆三楼自习区”。
- 从自然语言中抽取地点、楼层、时间、路线偏好。
- 校验定位权限和网络状态。
- 使用 POI 服务匹配“图书馆”“三楼自习区”等别名。
- 根据当前位置和目标地点生成路线。
- 在手机端展示步行导航,在平板端展示总览地图。
- 到达后记录历史路线,支持收藏和反馈。
八、Intents Kit:实现“系统入口一键导航”
在 HarmonyOS 6.1 中,意图框架的价值在于把应用内部能力暴露成系统可理解的业务功能。对于本案例,我们不希望用户每次都打开 App、点击搜索框、输入地点,而是希望用户说一句“导航到图书馆”就可以直接进入路线页。
示例意图配置可以设计为:
{
"module": {
"abilities": [
{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ets",
"exported": true,
"skills": [
{
"actions": [
"ohos.want.action.viewData"
],
"uris": [
{
"scheme": "campus",
"host": "navigate",
"path": "poi"
}
]
}
]
}
]
}
}
业务侧统一解析 Want 参数:
import { Want } from '@kit.AbilityKit'
export class CampusIntentRouter {
static parseTarget(want: Want): string {
const params = want.parameters ?? {}
const poiName = params['poiName'] as string
const classroom = params['classroom'] as string
const keyword = params['keyword'] as string
if (poiName && poiName.length > 0) {
return poiName
}
if (classroom && classroom.length > 0) {
return classroom
}
if (keyword && keyword.length > 0) {
return keyword
}
return ''
}
static buildRouteParam(target: string): Record<string, string> {
return {
target,
source: 'intent',
routeMode: 'normal'
}
}
}
教学建议:答辩时不要只说“用了意图框架”,而要展示它解决了什么问题。这里它解决的是“服务直达”问题,让校园导航不再依赖 App 内的层层点击。
九、AI 智能问路:让系统听懂校园语言
校园问路的难点在于地点表达并不规范。例如“信工楼”“信息楼”“信工院楼”可能指同一个地点,“A302”可能需要结合课程表和学院楼上下文才能定位。
本系统的 AI 智能问路不追求复杂大模型本地化,而是采用“轻量语义解析 + 校园知识库匹配 + 本地路线校验”的方案。

示例代码如下:
export interface AskResult {
originText: string
targetName: string
routeMode: 'normal' | 'accessible' | 'night'
confidence: number
}
export class AiQuestionService {
private poiAliases: Map<string, string> = new Map([
['信工楼', '信息工程学院楼'],
['信息楼', '信息工程学院楼'],
['图书馆自习区', '图书馆'],
['二饭', '第二食堂'],
['校医务室', '校医院']
])
parseQuestion(question: string): AskResult {
let routeMode: 'normal' | 'accessible' | 'night' = 'normal'
if (question.includes('无障碍') || question.includes('少走楼梯')) {
routeMode = 'accessible'
}
if (question.includes('晚上') || question.includes('夜间')) {
routeMode = 'night'
}
let targetName = ''
this.poiAliases.forEach((standardName, alias) => {
if (question.includes(alias)) {
targetName = standardName
}
})
if (!targetName) {
const match = question.match(/去(.+?)(怎么走|在哪|导航|$)/)
targetName = match && match[1] ? match[1].trim() : question
}
return {
originText: question,
targetName,
routeMode,
confidence: targetName.length > 0 ? 0.86 : 0.42
}
}
}
这个实现很适合毕业设计:可解释、可答辩、可演示,也不会把项目做成不可控的“黑盒 AI”。
十、NavigationService:路线生成核心
路线生成模块需要考虑普通路线、无障碍路线和夜间安全路线。为了便于课堂讲解,可以用 Dijkstra 或 A* 作为核心算法,再根据场景调整边权。
export interface RoutePlan {
routeId: string
targetPoi: CampusPoi
nodes: CampusRouteNode[]
distance: number
durationMinute: number
mode: 'normal' | 'accessible' | 'night'
tips: string[]
}
export class NavigationService {
constructor(
private poiService: CampusPoiService,
private graph: CampusRouteGraph
) {}
async createPlan(currentLat: number, currentLng: number, targetKeyword: string,
mode: 'normal' | 'accessible' | 'night'): Promise<RoutePlan> {
const target = await this.poiService.searchBestMatch(targetKeyword)
if (!target) {
throw new Error(`未找到目标地点:${targetKeyword}`)
}
const startNode = this.graph.findNearestNode(currentLat, currentLng)
const endNode = this.graph.findNearestNode(target.latitude, target.longitude)
const nodes = this.graph.shortestPath(startNode.id, endNode.id, mode)
const distance = this.calculateDistance(nodes)
return {
routeId: `${Date.now()}_${target.id}`,
targetPoi: target,
nodes,
distance,
durationMinute: Math.ceil(distance / 75),
mode,
tips: this.buildTips(nodes, mode)
}
}
private calculateDistance(nodes: CampusRouteNode[]): number {
let total = 0
for (let i = 1; i < nodes.length; i++) {
total += this.graph.distanceBetween(nodes[i - 1].id, nodes[i].id)
}
return total
}
private buildTips(nodes: CampusRouteNode[], mode: string): string[] {
const tips: string[] = []
if (mode === 'accessible') {
tips.push('已优先选择坡道、电梯和无障碍入口')
}
if (mode === 'night') {
tips.push('已优先选择主干道和照明区域')
}
if (nodes.some(node => node.nodeType === 'stairs')) {
tips.push('路线中包含楼梯,请注意安全')
}
return tips
}
}
十一、ArkUI 页面:手机和平板双端适配
毕业设计答辩时,手机端适合展示“随身导航”,平板端适合展示“路线总览”。ArkUI 的自适应布局可以让同一套业务在不同设备上呈现不同信息密度。
@Entry
@Component
struct HomePage {
@State keyword: string = ''
@State quickPois: string[] = ['图书馆', '第二食堂', '校医院', '体育馆']
@State todayCourse: string = '物联网实验室 A302'
build() {
Column() {
Text('智慧校园导航')
.fontSize(28)
.fontWeight(FontWeight.Bold)
.margin({ top: 24, bottom: 16 })
TextInput({ placeholder: '搜索教学楼 / 食堂 / 实验室', text: this.keyword })
.height(48)
.borderRadius(16)
.onChange((value: string) => {
this.keyword = value
})
.onSubmit(() => {
this.openRoute(this.keyword)
})
this.CourseCard()
Grid() {
ForEach(this.quickPois, (item: string) => {
GridItem() {
Button(item)
.height(48)
.borderRadius(16)
.onClick(() => this.openRoute(item))
}
})
}
.columnsTemplate('1fr 1fr')
.rowsGap(12)
.columnsGap(12)
.margin({ top: 20 })
Button('AI 智能问路')
.height(52)
.margin({ top: 24 })
.onClick(() => {
router.pushUrl({ url: 'pages/AskPage' })
})
}
.padding(20)
.width('100%')
.height('100%')
}
@Builder
CourseCard() {
Column({ space: 8 }) {
Text('今日课程')
.fontSize(18)
.fontWeight(FontWeight.Medium)
Text(`10:10 ${this.todayCourse}`)
.fontSize(16)
Button('一键导航到教室')
.onClick(() => this.openRoute(this.todayCourse))
}
.padding(16)
.borderRadius(20)
.margin({ top: 20 })
}
private openRoute(target: string) {
if (!target || target.trim().length === 0) {
return
}
router.pushUrl({
url: 'pages/RouteDetailPage',
params: { target }
})
}
}
这段代码可以作为答辩现场讲解的 UI 主线:搜索、课程、快捷地点、AI 问路四个入口最终都进入同一个路线能力。
十二、跨设备接续:手机发起,平板查看
智慧校园导航非常适合展示 HarmonyOS 的跨设备体验。实际设计中,不建议把整条路线大对象直接塞到 Want 参数里,而是生成一个轻量的 routeToken,再通过同应用数据同步或服务端查询获取完整路线。

export interface RouteHandoffPayload {
routeToken: string
targetPoiId: string
mode: 'normal' | 'accessible' | 'night'
createdAt: number
expireAt: number
}
export class DeviceHandoffService {
async createHandoff(plan: RoutePlan): Promise<RouteHandoffPayload> {
const payload: RouteHandoffPayload = {
routeToken: plan.routeId,
targetPoiId: plan.targetPoi.id,
mode: plan.mode,
createdAt: Date.now(),
expireAt: Date.now() + 10 * 60 * 1000
}
await this.saveToDistributedStore(payload)
return payload
}
async receiveHandoff(routeToken: string): Promise<RoutePlan | null> {
const payload = await this.readFromDistributedStore(routeToken)
if (!payload || payload.expireAt < Date.now()) {
return null
}
return await this.restoreRoutePlan(payload)
}
private async saveToDistributedStore(payload: RouteHandoffPayload): Promise<void> {
// 教学示例:实际项目可接入 ArkData 分布式数据库或服务端同步接口
}
private async readFromDistributedStore(routeToken: string): Promise<RouteHandoffPayload | null> {
return null
}
private async restoreRoutePlan(payload: RouteHandoffPayload): Promise<RoutePlan | null> {
return null
}
}
跨设备接续的答辩亮点在于“轻量同步”:同步的是令牌和状态,不是大图层和大路线对象,这样可以降低冲突、提高安全性,也便于控制过期时间。
十三、离线缓存:校园场景的稳定性保障
校园场景经常遇到网络信号弱、教学楼内定位漂移、迎新期间并发访问高等问题。因此系统需要离线缓存:
- 常用 POI:教学楼、食堂、图书馆、学院楼。
- 地图基础数据:校园道路节点、路线边权、无障碍入口。
- 用户历史:最近导航、收藏地点、课程常用教室。
- 版本信息:本地数据版本号、远端更新时间、增量更新记录。
export class OfflineCacheService {
private versionKey: string = 'campus_map_version'
async loadPoiCache(): Promise<CampusPoi[]> {
// 实际项目可使用 Preferences、关系型数据库或键值数据库
return []
}
async refreshIfNeeded(remoteVersion: string): Promise<void> {
const localVersion = await this.getLocalVersion()
if (localVersion === remoteVersion) {
return
}
const latestPoi = await this.fetchLatestPoi()
const latestGraph = await this.fetchLatestGraph()
await this.saveLocalData(latestPoi, latestGraph, remoteVersion)
}
private async getLocalVersion(): Promise<string> {
return '2026.07.demo'
}
private async fetchLatestPoi(): Promise<CampusPoi[]> {
return []
}
private async fetchLatestGraph(): Promise<CampusRouteGraph> {
return new CampusRouteGraph()
}
private async saveLocalData(poi: CampusPoi[], graph: CampusRouteGraph, version: string): Promise<void> {
// 保存本地缓存
}
}
十四、无障碍导航:让毕业设计更有温度
很多校园项目只强调“最快路线”,但真实校园里还有轮椅通行、临时受伤、夜间安全、雨天避雨等需求。无障碍导航可以作为毕业设计的加分点。
实现方式不是另写一套地图,而是在同一张路线图上调整边权:
- 楼梯节点:无障碍模式下提高代价。
- 电梯和坡道:无障碍模式下降低代价。
- 夜间偏僻道路:夜间模式提高代价。
- 主干道和有照明区域:夜间模式降低代价。
- 雨天连廊:雨天模式降低代价。
答辩时可以展示三种路线对比:普通路线、无障碍路线、夜间安全路线。这样评委能直观看到系统不是简单地图壳,而是把校园细节融入算法。
十五、通知与活动推荐
校园导航还可以和活动系统联动。例如用户点击“创新创业讲座”,系统直接展示地点、时间、报名状态和导航按钮。对于即将开始的课程或活动,可通过通知提醒用户提前出发。
export interface CampusEvent {
id: string
title: string
locationPoiId: string
startTime: string
tags: string[]
}
export class EventRecommendService {
recommend(events: CampusEvent[], userTags: string[]): CampusEvent[] {
return events
.filter(event => event.tags.some(tag => userTags.includes(tag)))
.sort((a, b) => Date.parse(a.startTime) - Date.parse(b.startTime))
.slice(0, 5)
}
}
在文章投稿里,这部分可以强调“导航不是孤立功能”,而是校园信息服务的基础入口。
十六、开发难点与解决方案
难点一:校园地点别名多
解决方案:建立 POI 别名表,把“信工楼、信息楼、信息工程学院楼”映射到同一标准 POI。AI 问路只做语义提取,最终地点必须通过 POI 服务校验。
难点二:室内外路线混合
解决方案:路线节点中增加 floor 和 nodeType 字段,把楼梯、电梯、门禁口、教室作为图节点统一处理。室内地图不完整时,可先实现楼宇入口到教室的分段提示。
难点三:跨设备数据同步冲突
解决方案:跨端接续只同步路线令牌和目标状态,完整路线由接收端恢复。令牌设置过期时间,避免旧路线误用。
难点四:隐私与定位授权
解决方案:首次进入导航页时明确说明定位用途;没有授权时提供手动选择起点;历史路线只保存必要字段,不保存连续轨迹。
难点五:答辩展示容易散
解决方案:答辩现场采用“新生从校门到教室”作为主线,依次展示搜索、AI 问路、课程联动、跨设备接续和无障碍路线,不要把所有功能零散点击一遍。
十七、性能测试与优化
教学样例工程中,我们对四个关键路径进行 20 次重复测试,记录平均耗时。测试数据仅用于说明优化方向,不作为行业通用结论。

优化策略包括:
- 首页首屏:拆分组件,延迟加载非首屏 POI。
- POI 检索:本地别名索引 + 最近访问缓存。
- 路线生成:预加载校园路线图,路线边权提前计算。
- 跨端接续:同步 routeToken,不同步完整路线对象。
- UI 渲染:地图图层和路线面板分离,减少状态更新范围。
十八、成果展示:毕业设计可以怎么演示
建议录制 45 秒演示视频:
- 手机端打开元服务入口,进入智慧校园导航首页。
- 点击课程卡片“一键导航到 A302”。
- 展示路线详情和预计时间。
- 输入“晚上从图书馆回宿舍怎么走”,展示夜间安全路线。
- 点击跨设备接续,平板展示校园总览路线。
- 切换无障碍路线,展示少楼梯路线提示。
- 管理后台修改活动地点,手机端刷新活动导航入口。
这样的视频脚本清晰、有节奏,也能体现 HarmonyOS 特性和毕业设计成果。
十九、答辩 PPT 结构建议
PPT 建议控制在 18~22 页:
- 项目标题与成员信息
- 选题背景
- 用户痛点
- 需求分析
- 系统总体架构
- HarmonyOS 技术选型
- 核心功能展示
- 校园数据模型
- 路线规划算法
- AI 智能问路
- 意图框架一键导航
- 元服务快速入口
- 跨设备接续
- 离线缓存
- 无障碍导航
- 系统界面展示
- 性能测试
- 开发难点
- 项目成果
- 总结与展望
二十、总结
这篇毕业设计的核心价值不是“做一个校园地图”,而是把 HarmonyOS 的系统能力与校园真实场景结合起来:通过 ArkUI 构建双端体验,通过 Intents Kit 实现服务直达,通过元服务降低入口门槛,通过分布式能力实现跨设备接续,通过离线缓存和无障碍路线提升实际可用性。
从校企合作教学角度看,这个项目非常适合作为毕业设计:它有清晰的用户痛点,有可展示的界面,有可讲解的架构,有算法和数据模型,也能体现 HarmonyOS 6.1 的平台能力。对于学生来说,它不是一份“为了答辩而做的系统”,而是一份能继续迭代、能进入作品集、也能迁移到真实校园服务中的综合项目。
转载自:https://blog.csdn.net/u014727709/article/details/162997764
欢迎 👍点赞✍评论⭐收藏,欢迎指正
更多推荐



所有评论(0)