跳到正文Seminar Week 10 Summary · Jimmy Huang's BlogSeminar Week 10 Summary
本页目录· 75 条
Learning Outcomes
本周 Seminar 的主题是位置感知计算(Location-aware Computing)。根据课件的 Overview 和课堂 transcript,本周可以整理为以下学习目标:
理解位置感知计算的基本概念,以及它为什么对移动设备和移动应用很重要。
区分相对位置(Relative Location)和绝对位置(Absolute Location)。
理解经纬度(Latitude and Longitude)的表示方式,以及为什么澳大利亚的位置常见为“负纬度 + 正经度”。
理解三边测量(Trilateration)与三角测量(Triangulation)的区别。
理解全球定位系统(GPS / Global Positioning System)的基本架构、工作流程和误差来源。
理解室内定位系统(IPS / Indoor Positioning Systems)的必要性、常见技术和核心挑战。
理解地理围栏(Geofencing)如何把位置、半径和进入/离开事件结合起来,用于位置触发服务。
理解 Android 应用中集成 Google Maps 的两种方式:Web APIs 与 Android SDK / Maps Compose。
掌握与位置服务相关的 Android 权限、依赖、API Key 配置和基础 Compose Map 代码结构。
本周在课程中的位置
本周内容从“移动应用如何感知用户上下文”进一步推进到“移动应用如何理解用户或对象的位置”。在移动与分布式计算系统中,位置数据是非常典型的上下文数据(Context Data):
对用户来说,位置服务可以支持导航、配送、打车、旅游、提醒、追踪和附近服务推荐。
对开发者来说,位置服务涉及设备传感器、网络通信、第三方 API、隐私权限、能耗管理和用户体验设计。
对 Assignment 4 来说,本周内容可以直接支持高级功能,例如地图展示、附近地点、位置提醒、Geofencing、配送/领取点导航、校园或商场范围内的服务触发等。
课堂中老师也强调,本周主题不仅是理论概念,还会影响你们正在开发或即将开发的移动应用功能。也就是说,这一周是把前面学过的 Android 开发、权限管理、API 调用和 Compose UI 连接到真实位置服务场景的一周。
1. Location-aware Computing 是什么
位置感知计算(Location-aware Computing)指系统能够知道或估计某个对象、设备或人的物理位置,并基于这个位置提供服务。
位置感知计算的本质不是“显示地图”,而是让应用能够根据位置改变行为。例如:用户进入某个区域时显示提醒;用户靠近某个地点时推荐服务;设备在建筑物内移动时估计它所在的位置。
2. Location 的两种理解:相对位置与绝对位置
课件首先区分了两种位置表达方式:相对位置(Relative Location)和绝对位置(Absolute Location)。
3. 经纬度:Latitude 与 Longitude
3.1 Latitude:纬度
纬度(Latitude)表示某个点相对于赤道(Equator)向北或向南的角距离。
赤道是 0°。
北半球通常用正数表示。
南半球通常用负数表示。
纬度范围通常是 90° 到 90°。
例如,澳大利亚在南半球,所以在 Google Maps 中看到的纬度通常是负数。
3.2 Longitude:经度
经度(Longitude)表示某个点相对于本初子午线(Prime Meridian)向东或向西的角距离。
本初子午线是 0°。
东半球通常用正数表示。
西半球通常用负数表示。
经度范围通常是 180° 到 180°。
3.3 经纬度的表示方式
课件给出的 Monash Caulfield campus 示例是:
课件还提到,一个 degree 大约接近 69 miles。这个数值主要用于帮助理解经纬度单位的尺度,不需要当作所有场景下完全固定的距离,因为经度对应的实际地表距离会随纬度变化。
4. 为什么位置服务对移动应用重要
移动应用和桌面应用最大的区别之一,是用户和设备经常处于移动状态。因此,位置可以成为应用功能的重要输入。
Google Maps:根据当前位置导航、搜索附近地点。
Uber / rideshare:根据乘客和司机的位置匹配、预测接送距离和时间。
Food delivery:追踪骑手和订单位置。
旅游应用:根据用户所在地点推荐附近景点。
商场或校园应用:当用户进入某个区域时显示相关通知。
家庭定位或 Find My 类服务:显示家庭成员或设备的大致位置。
课堂中老师还用 Google Maps 演示了坐标与 Plus Code 的区别:
经纬度更适合机器精确处理。
Plus Code 或地址更适合人类分享。
应用开发中通常需要在这两种表达之间转换。
5. 三边测量与三角测量
5.1 Trilateration:基于距离定位
三边测量(Trilateration)通过测量目标点到多个参考点的距离,来推算目标位置。
如果只知道你离某个参考点有多远,你只能知道自己在一个圆或球面上。
如果知道你离两个参考点有多远,可能缩小到两个圆的交点或两个球面的交线。
如果知道你离三个或更多参考点有多远,就可以进一步缩小并确定位置。
Trilateration 问的是:“我离几个已知点分别有多远?”然后用这些距离交叉定位。
5.2 Triangulation:基于角度或方向定位
三角测量(Triangulation / Angulation)主要利用方向、角度和三角几何关系来定位。
Triangulation 问的是:“目标相对于几个已知点分别在哪个方向?”然后用角度关系推算位置。
5.3 两者对比
课堂中老师特别抛出过一个问题:GPS 使用哪一种方法?答案是 GPS 主要使用三边测量,因为它根据卫星信号传播时间计算距离,再通过多个卫星参考点确定位置。
6. 2D Trilateration 示例:在美国迷路
6.1 第一个参考点:Boise
6.2 第二个参考点:Minneapolis
6.3 第三个参考点:Tucson
第三个圆只会与其中一个候选点匹配,所以可以排除另一个可能性。
7. Mariner Example:用雾角和声音定位船只
课件接着用海上船只定位例子解释传播时间(Propagation Time)如何转化为距离。
雾角的位置;
声音从雾角发出到船只听见用了多久;
声速;
船和雾角之间的时钟需要同步。
7.1 误差问题
课件强调,到达时间(TOA / Time of Arrival)测量可能有误差。
如果每个距离测量都带有误差,那么多个圆不一定会精确交于一点,而是形成一个“估计区域”。
GPS 也是通过传播时间计算距离,只是 GPS 使用的是无线电波,传播速度接近光速;同时 GPS 对时钟同步和误差控制要求更高。
8. GPS:Global Positioning System
全球定位系统(GPS / Global Positioning System)是典型的室外定位系统。
GPS 可以在全球范围提供位置和时间信息。
用户可以通过 GPS 接收器免费接收信号。
接收器可以估计位置,包括:纬度(Latitude);
经度(Longitude);
高度(Altitude)。
GPS 通常适用于室外定位。
9. GPS 的架构
卫星负责“发信号”,接收器负责“收信号并计算”,地面站负责“校准和维护整个系统”。
10. GPS 的历史与 GNSS
第一颗可运行的 GPS 卫星于 1978 年发射。
GPS 卫星系统 Navstar 由美国政府维护。
GNSS(Global Navigation Satellite System)是更广义的全球导航卫星系统。
除了美国 GPS,还有其他卫星导航系统,例如:Galileo:欧洲系统;
BeiDou:北斗,中国系统。
课堂中老师也解释了为什么会有不同国家或地区的卫星导航系统:这不仅是技术问题,也与国家安全、军事和基础设施可靠性有关。如果一个国家完全依赖其他国家控制的导航系统,在特殊时期可能存在风险。
11. GPS 卫星数量与轨道安排
这个对比帮助理解:为什么 GPS 不需要成千上万颗卫星,而卫星互联网需要非常多低轨卫星。
12. GPS 的 3D Trilateration 工作过程
GPS 使用的是三维空间中的三边测量(3D Trilateration),不是二维平面上的圆,而是三维空间中的球体。
12.1 一个卫星:得到一个球面
如果你知道自己距离卫星 A 是 10 miles,那么你可能在以卫星 A 为球心、10 miles 为半径的巨大球面上的任意一点。
12.2 两个卫星:两个球面相交成一个圆
如果你同时知道自己距离卫星 B 是 15 miles,那么两个球面会相交。
12.3 三个卫星:缩小到两个候选点
12.4 为什么还需要四个或更多卫星
课件强调,GPS 接收器通常会寻找四个或更多卫星来提高准确性。
三个卫星可以帮助形成空间几何定位,但实际 GPS 通常需要四个或更多卫星来解决时钟偏差和提高精度。
13. GPS 距离计算公式
接收器记录自己收到信号的时间,然后计算信号传播了多久。
由于光速非常快,哪怕极小的时间误差都会造成明显的位置误差,所以时钟同步是 GPS 中非常关键的问题。
14. GPS 工作流程总结
定位四个或更多卫星。
通过信号传输时间 × 光速,计算接收器到每颗卫星的距离。
使用三边测量计算位置。
处理接收器时钟偏差,也就是时间同步问题。
GPS 不是“卫星直接告诉手机你在哪里”,而是“卫星告诉手机它们自己在哪里以及信号什么时候发出,手机再根据多个卫星的距离反推出自己的位置”。
15. 为什么 GPS 不适合室内定位
GPS 主要适合室外场景。进入建筑物内部后,GPS 信号会受到墙体、地下空间、金属结构和其他障碍物影响。
因此,室内环境通常需要室内定位系统(IPS / Indoor Positioning Systems)。
16. IPS:Indoor Positioning Systems
室内定位系统(IPS / Indoor Positioning Systems)用于在建筑物内部估计人或对象的位置。
室外定位常依赖卫星;室内定位更常依赖 WiFi、Bluetooth、RFID、传感器和信号强度模式。
17. IPS 常见技术
课堂中老师强调,室内定位往往不会只依赖单一机制,而可能结合多个协议和传感器进行混合测量。
18. RSS:Received Signal Strength
接收信号强度(RSS / Received Signal Strength)是室内定位中的一个核心概念。
然后系统可以估计设备距离各个 AP 的远近,并进行室内位置计算。
RSS 不一定直接告诉你“设备在哪里”,但它可以提供一种信号模式。系统通过比较不同地点的信号模式,推测设备最可能在哪个位置。
课堂中老师用商场或机场 WiFi 举例:如果你的手机连接或扫描到多个 WiFi / Bluetooth 信号,系统可以根据这些信号强度估计你的位置。但信号强弱也会受到墙体和障碍物影响,所以室内定位通常比室外 GPS 更复杂。
19. Location Fingerprinting:位置指纹
位置指纹(Location Fingerprinting)是基于 RSS 的一种室内定位方法。
19.1 Offline Phase:离线训练阶段
在室内区域选择一组参考点。
在每个参考点测量来自不同 AP 的 RSS。
把这些 RSS 数据存入数据库。
形成该区域的无线电地图数据库(Radio Map Database)。
离线阶段是在给建筑物“做信号地图”。每个位置都有一个独特或近似独特的信号强度模式。
19.2 Online Phase:在线定位阶段
测量当前移动设备接收到的 RSS。
把当前 RSS 模式与数据库中的历史模式进行比较。
找到最相似的 fingerprint。
根据最相似 fingerprint 对应的位置估计当前设备位置。
在线阶段是在问:“我现在测到的信号模式,最像之前在哪个参考点测到的模式?”
课件提到 Microsoft RADAR 是这种思想的经典例子。
20. LiFi for Indoor Positioning
LiFi 是一种可见光通信技术(Visible Light Communication / VLC),它通过 LED 光调制来传输数据。
LiFi 室内定位把“灯”变成固定参考点。设备接收到灯发出的标识和时间信息后,可以估计自己相对这些灯的位置。
21. Location-aware Clock using Cell IDs
课件还介绍了 Whereabouts Clock 这个例子。
显示家庭成员当前所在的大致位置。
使用手机上的 Cell ID 提供位置数据。
这个例子说明,位置感知不一定总是精确地图导航,也可以是面向家庭、社交或日常生活的“位置状态展示”。
22. Location-aware Computing 的挑战
隐私与安全问题(Privacy and Security Issues)
准确性(Accuracy)
能源管理(Energy Management)
多种位置感知技术的集成(Integration of Multiple Location Sensing Technologies)
22.1 隐私与安全
位置数据非常敏感,因为它可以反映用户的生活习惯、出行路径、工作地点、家庭地址和社交活动。
不应在用户不知情时收集或上传位置。
不应请求与功能无关的位置权限。
应在用户拒绝权限时优雅处理,而不是让应用崩溃。
课堂中老师强调,如果应用在不告知用户的情况下偷偷同步位置到远程服务器,这接近 spyware 的行为,是开发者必须避免的。
22.2 准确性
打车软件如果不能准确告诉司机接送点,会造成用户体验问题。
Find My 类应用有时可能显示用户在附近错误地点,例如误差到几百米外。
室内定位中墙体、楼层、障碍物和信号反射会进一步降低准确性。
因此,设计位置服务时要考虑误差范围,不要把估计位置当成绝对事实。
22.3 能源管理
持续使用 GPS 或其他定位传感器会明显消耗电池。
22.4 多技术集成复杂度
为了提高准确性,系统可能会结合 GPS、WiFi、Bluetooth、Cellular、传感器和地图数据。
可以覆盖更多场景;
室内外切换更自然;
可在 GPS 不可用时继续估计位置。
系统设计更复杂;
权限更多;
能耗更高;
数据融合和误差处理更困难。
23. Geofencing:地理围栏
地理围栏(Geofencing)把用户当前位置与某个兴趣点区域结合起来。
23.1 Geofencing 可以检测什么
Geofencing 可以利用移动设备的位置服务检测:
Android Geofencing 中通常需要设置:
课堂中老师补充说,Android 应用中可以定义多个 geofences;老师提到的数量级大约是 100 个左右,具体限制以官方文档为准。
23.2 Geofencing 的应用场景
用户进入商场时收到促销信息;
用户靠近某个门店时收到优惠券;
用户接近取餐点时提醒取餐。
政府或社区在紧急事件中向特定区域用户发送警报;
Bushfire、火灾、地震、疏散通知;
校园范围内的安全提醒;
家庭照护中进入或离开安全区域的提醒。
Geofencing 不是一直盯着地图,而是预先定义“区域规则”。当用户进入或离开区域时,系统触发对应动作。
24. Google Maps:API 与 SDK 两种方式
课件区分了在 Android 应用中使用 Google Maps 的两种方式:
直接调用 Google Maps Web APIs。
使用 Google Maps SDK for Android。
API 更像“向地图服务请求数据”;SDK 更像“把地图引擎嵌入 App”。
如果使用 Google Maps 服务,需要创建 Google Cloud 项目。
需要启用对应的 Maps API 或 SDK。
需要创建 API key。
课堂中老师建议使用个人 Gmail,因为 Monash account 可能受限制。
可能需要配置 billing,但老师提到在一定免费额度内可能不会产生费用;实际使用时仍要检查 Google Cloud 当前政策和账户设置。
25. Android Manifest 与位置权限
如果使用 SDK 方式,需要在 AndroidManifest.xml 中声明权限和 API key。
25.1 精确位置权限
ACCESS_FINE_LOCATION 允许应用访问设备精确位置,适合用户地图追踪、精确导航等功能。
25.2 粗略位置权限
ACCESS_COARSE_LOCATION 允许应用访问设备大致位置。
课件特别提醒,在 Android 12(API level 31)或更高版本中,请求精确位置时通常也需要同时处理 coarse location,因为用户可以选择只给 approximate location。
25.3 在 Manifest 中添加 API Key
这种写法说明 API Key 不应该直接硬编码在地图代码里,而是通过资源文件引用。
26. Gradle Dependencies
如果使用 SDK / Maps Compose 方式,课件要求添加:
课件提醒,Play Services 和 Maps Compose 的版本必须与 Jetpack Compose 库兼容。
runtime error;
resource null;
app crash;
地图无法正常显示。
27. Creating a Composable Function:地图组件核心结构
课件中创建 Map Composable 的核心思路是:
27.1 LatLng 与 Camera Position
这里的 15f 表示比较接近街道级别的 zoom。
LatLng 决定地图看哪里,CameraPosition 决定用什么视角、什么缩放比例来看。
27.2 GoogleMap 与 Marker
GoogleMap 是地图容器。
modifier 控制 UI 大小和布局。
cameraPositionState 控制地图镜头位置、缩放和视角。
最后的 lambda 用于添加 marker、circle、polyline 等地图覆盖层。
课堂中老师特别提醒,要确认 Marker 等组件来自 Google Maps Compose 对应 namespace,不要误用其他库里的同名类。
28. Google Maps 的额外功能:Circle、Polyline、Distance
28.1 在地图上画圆形区域
可以使用 Circle 在某个地点周围画出半径区域,例如 1 km 范围。
这个功能可以和 geofencing 的概念联系起来:
Geofence 在逻辑上定义一个区域。
Circle 可以在 UI 上把这个区域可视化。
28.2 用 Polyline 显示路径
Polyline 可以把多个位置点连接起来,适合展示访问路径、移动轨迹或路线。
28.3 计算多个点之间的总距离
课件使用 android-maps-utils 中的 SphericalUtil.computeDistanceBetween 计算两个经纬度点之间的球面距离。
这个例子说明,地图 SDK 不只是显示地图,还可以结合地理计算实现更复杂的位置功能。
29. 课堂讨论:手机在商场里如何定位
如果你在大型购物中心地下层,手机如何估计你的位置?
GPS 在地下或室内可能不可用或不准确。
手机可能依赖 WiFi、Bluetooth、Cellular 或其他信号。
关键不是“有没有 WiFi”本身,而是系统能否测量信号强度(RSS)并与室内信号地图匹配。
信号强度下降可能说明离 AP 更远,也可能说明中间有墙体或障碍物,所以室内定位存在歧义。
更可靠的方案通常会结合多种技术,例如 WiFi + Bluetooth + sensors。
30. Assignment / A4 相关提醒
这一部分来自课堂 transcript,属于老师在 Seminar 中补充的作业提醒,不是位置感知理论本身,但对后续提交有帮助。
30.1 Week 12 Demo 安排
报告的 extension 不会自动适用于 Week 12 in-class demo。
Week 12 demo / presentation 仍需要按 lab session 安排进行。
TA 会通知具体时间和地点。
如果与其他不可控活动冲突,例如其他 unit expo 或测试,应尽早 email 老师并 copy 所有 TA。
30.2 GitLab contribution
不只是每个人在自己的 feature branch 工作,还需要体现工作如何合并到主分支或最终发布分支。
如果最终稳定版本不在 master / main,而是在 dev 或其他分支,应该在 README 中明确说明。
如果 TA 看不到个人活动,可能影响 individual contribution mark。
团队应尽早合并和整理分支,避免最后主分支与实际提交版本不一致。
30.3 UI / UX diagram
高分设计通常清晰、直接、不需要过度设计。
Screen flow diagram 要清楚显示从一个屏幕到另一个屏幕的 transition。
需要标出触发跳转的用户动作,例如点击按钮、选择列表项、提交表单等。
如果图比较复杂,可以提供 Lucidchart read-only link,方便 marker 放大查看细节。
31. 本周常见复习问题
Q1:GPS 是用 trilateration 还是 triangulation?
GPS 主要使用 trilateration。它通过测量 GPS 接收器到多颗卫星的距离,再根据这些距离交叉定位。
Q2:为什么 GPS 通常需要四颗或更多卫星?
因为实际系统需要处理时钟同步和 clock bias。三颗卫星可以帮助几何定位,但四颗或更多卫星可以提高准确性并校正接收器时钟误差。
Q3:为什么 GPS 在室内不好用?
因为卫星信号容易被建筑物、墙体、地下空间和障碍物阻挡或削弱。室内定位通常需要 WiFi、Bluetooth、RFID、Cellular、LiFi 和传感器等方法。
Q4:Location Fingerprinting 的 offline 和 online 阶段分别是什么?
Q5:Geofence 由什么组成?
它可以触发 enter、exit 或停留相关事件。
Q6:Google Maps API 和 SDK 有什么区别?
32. 关键术语速查
33. 原课件参考线索
Location sensing techniques:位置感知技术基础。
Wireless indoor positioning:无线室内定位技术综述。
RADAR:基于 WiFi / RF 的建筑物内定位与追踪系统。
WLAN fingerprinting:基于 WiFi 指纹的室内定位方法。
LiFi indoor positioning:LiFi 在室内定位系统中的部署。
GPS 教学视频与 Lehigh University GPS workshop materials。
这些参考资料不是本周复习必须逐篇阅读的材料,但可以用于理解 GPS、IPS、RSS fingerprinting 和 LiFi 等技术的研究背景。
Summary
本周 Seminar 的核心是位置感知计算。首先,课程区分了相对位置和绝对位置,并解释了经纬度如何表达地球上的精确位置。然后,课程通过 2D 圆形交点和海上雾角例子解释了三边测量的基本思想,为 GPS 的工作机制做铺垫。
GPS 的重点在于:卫星广播时间和位置,接收器根据传输时间乘以光速计算距离,再通过三维三边测量估计自身位置。实际 GPS 通常需要四颗或更多卫星,因为系统必须处理时钟同步和 clock bias。GPS 适合室外,但在室内会受到墙体和地下空间影响,因此需要室内定位系统。
室内定位系统通常依赖 WiFi、Bluetooth、RFID、Cellular、LiFi 和传感器数据。RSS 和 Location Fingerprinting 是本周室内定位的重点:系统先在离线阶段建立 radio map,再在在线阶段用实时信号强度与数据库匹配来估计位置。LiFi 则展示了使用 LED 可见光作为定位参考点的另一种思路。
最后,课程把理论连接到 Android 实现:Geofencing 用坐标和半径定义位置触发区域;Google Maps 可以通过 Web APIs 或 SDK 集成;Android 中需要处理位置权限、API key、Gradle 依赖和 Compose Map 组件。开发位置服务时,除了实现功能,还必须认真考虑隐私、安全、准确性、能耗和用户拒绝权限时的处理方式。
37.876823°S, 145.045837°E
你距离 Boise, Idaho 625 miles。
你距离 Minneapolis, Minnesota 690 miles。
你距离 Tucson, Arizona 615 miles。
Distance = (Receiver Receive Time - Satellite Transmit Time) × Speed of Light
距离 =(接收器收到信号的时间 - 卫星发出信号的时间)× 光速
Geofence = Location (latitude + longitude) + Proximity (radius)
Geofence = latitude + longitude + radius
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/maps_api_key" />
implementation(libs.maps.compose)
implementation(libs.play.services.maps)
implementation(libs.play.services.location)
val location = LatLng(latitude, longitude)
val cameraPositionState = rememberCameraPositionState {
position = CameraPosition.fromLatLngZoom(location, 15f)
}
GoogleMap(
modifier = Modifier.fillMaxSize(),
cameraPositionState = cameraPositionState
) {
Marker(
state = MarkerState(position = location),
title = title
)
}
Circle(
center = location,
radius = circleRadiusMeters,
strokeColor = Color.Blue,
strokeWidth = 4f,
fillColor = Color.Blue.copy(alpha = 0.1f)
)
Polyline(
points = visitedLocations,
color = Color.Red,
width = 6f
)
val totalDistanceKm = remember(visitedLocations) {
if (visitedLocations.size < 2) {
0.0
} else {
var distance = 0.0
for (i in 0 until visitedLocations.size - 1) {
distance += SphericalUtil.computeDistanceBetween(
visitedLocations[i],
visitedLocations[i + 1]
)
}
distance / 1000.0
}
}