
封面:地铁站与地下商业人员定位
题注:封面为示意性视觉图,非真实现场照片。
节假日的大客流时段,站厅里人贴着人,值班站长凭肉眼判断"要不要限流";换乘通道内三层人流交汇,谁堵住了谁说不清;地下商业与地铁共构的区域里,禁入设备区偶有人误闯,事后只能翻监控一帧帧找。这三类困扰的共同点是:缺一个可信的量化数字。安保预案需要知道哪个区域在哪个时段超过每平方米几个人,运营调度需要知道客流从哪层哪段通道灌进来,而误入追溯需要知道那个人几点几分站在哪一层的哪个区。这篇文章面向承接这类系统的前端与全栈工程师,讲清楚地下空间的人员定位怎么从信号一路做到屏幕上的那个数——数据从哪来、楼层怎么判、密度怎么算、界面怎么不被数据洪流压垮、口径怎么定才不会让两个部门各说各话。
读完你应该能回答:为什么地下空间的定位必须先解决"第几层"再解决"哪个区",以及为什么客流看板上那个数字的可信度,八成取决于你看不到的一些后端约定。
地下空间的人员定位问题,按依赖顺序排有四层。
最底下一层是垂直定位。地上场景默认"人都在地面",地下不成立:站厅层、设备夹层、站台层、地下商业负一层负二层,平面坐标几乎相同而楼层不同。水平手段在这里有个物理困境——上下层之间的楼板对无线电衰减有限,同一位置的终端往往同时收到两三层信标的信号,最强信号未必来自人所处的层。所以"人在哪一层"必须由一条独立于水平定位的证据链回答,气压高度就是这条链。
第二层才是水平定位:在已确定的层里,把人落到站厅东区、换乘通道西段这样的分区。分区粒度由信标密度决定,这是成本与价值的平衡点——地下商业要的是"哪个店铺门口堵了",不是"谁的坐标在东经多少度"。
第三层是聚合:把个体位置升格为密度。这一步开始和前端发生直接关系——聚合窗口多大、网格切多细、同一人多次上报怎么算一个,三个参数决定看板上每个数字的含义。
第四层是呈现与告警:分层地图怎么渲染、拥挤等级怎么升怎么降、告警怎么不被刷屏。四层之间是硬依赖:楼层错了密度就串层,口径不一致告警就没法比,前端直连原始数据流就会被高峰期的报文淹没。任何一层单独优化都救不了整体。

图1 三条链路的原理对照
题注:图1 按信号来源、测量方式、位置解算与误差来源对照气压楼层、蓝牙分区与 Wi-Fi 补位三条链路。
信号来源有两端:终端气压计读取所在位置的大气静压;室外露天固定的气压基准站持续上报海平面基准气压 P0。两路数据在同一时刻配对,才能把"本机读数"变成"相对高差"。
测量方式基于气压随高度近似指数递减的物理关系。楼层间高差只有几米,落在小量区间内可以用线性近似换算高度差;层高 3~4.5 米对应的气压差在消费级气压传感器分辨率之上,理论可分辨——但"可分辨"的前提是基准稳定,0.3 百帕的天气漂移就足以吃掉半个层高的压差。
位置解算是查表映射:把换算出的高度差对照建筑垂直基准参数(首层海拔、层高、地平层定义)落到楼层编号,输出带置信度的楼层事件。置信度不是装饰——它是前端决定"这个楼层值敢不敢上屏"的依据。
误差来源四类:基准站被搬动或遮挡;门窗气流与空调风压扰动读数;天气骤变让 P0 整体漂移;自动扶梯与楼梯井形成"活塞效应",气流压差剧变,人还在扶梯上,读数已经画出一段不存在的高度曲线。前三类靠基准站运维与历史分布校准压住,第四类要靠与蓝牙楼层标识互验来兜底。
信标固定在各层通道与关键区,周期广播带楼层与分区标识的信号;终端被动扫描,不建连接。测量读的是信号强度(RSSI),按对数路径损耗模型排序,衰减指数 n 用现场标定。
解算输出分区归属:多帧投票选主导信标,扫到即获得"这层这区"的候选。它同时兼任楼层佐证——信标标识里写着楼层号,气压算出的层与扫到的层一致才给高置信。
误差核心是串层:楼板对 2.4 GHz 的衰减有限,上下层信号穿透导致最强信号可能来自隔壁层;3~5 米的分区粒度成立的前提是信标密度与安装高度匹配、遮挡可控,节假日人流本身的吸收会让读数整体劣化。电梯轿厢是特例区,金属厢体屏蔽加楼层快速变化,进出电梯前后的数据段单独处理。
商业区既有接入点的 2.4 GHz 广播是免费信号源。终端扫描记录接入点标识与强度,指纹匹配法(预采集网格信号向量建库,在线用最近邻 KNN 或加权质心比对)条件满足时给出 5~10 米的粗定位。
它只做两件事:信标覆盖空洞的补位,以及热力图边缘的平滑。店铺接入点开关频繁、信道调整是家常便饭,指纹衰减比办公场景快得多,所以它的输出永远带着"低置信度"标签进融合层,不参与楼层判定,不进告警口径。
维度 | 气压楼层 | 蓝牙分区 | Wi-Fi 扫描 | 卫星 | 基站辅助 |
|---|---|---|---|---|---|
回答什么 | 第几层 | 哪层哪个区 | 粗分区补位 | 出入口与室外衔接 | 大区域连续性 |
粒度 | 一层 | 3~5 m(条件值) | 5~10 m(条件值) | 数米级(开阔处) | 百米级区块 |
楼内可用性 | 强 | 取决于布设 | 取决于接入点 | 深地下不可用 | 可用 |
基础设施 | 一座基准站 | 每层每区信标 | 复用既有网络 | 无 | 无 |
怕什么 | 气流与天气 | 串层与遮挡 | 网络变动 | 地下环境 | 边界跳变 |
前端要不要显式消费 | 置信度必须 | 分区+置信度 | 仅平滑用 | 出入口段用 | 仅解释用 |
分工由物理决定,不由偏好决定:地下深处卫星基本不可用,基站粒度太粗,能撑起"层+区"的只有气压与蓝牙两条链路加 Wi-Fi 补位。值得比较的反而是投入边界——信标密度加密一档,分区串层率明显下降,但每个点位的安装与供电都是运维存量;多数项目的合理位置是"通道节点与区域入口加密、开阔中段稀疏",用轨迹连续性弥补单点密度。

图2 五层架构与数据流
题注:图2 给出五层架构、上下行数据流与前端契约要点。
自下而上五层。感知层:乘客与员工终端的气压读数与蓝牙扫描结果、楼层信标、露天基准站、商业区接入点。链路层:蜂窝上报分位置流与状态流双通道,地下弱网段终端本地缓存、恢复后补传;补传数据走独立队列限速进管线,不挤实时流。
管线与解算层:时序对齐以事件时间为主轴,乱序数据按水位线等待并标记;分层解算各走各的主链路——气压出楼层、信标出分区、Wi-Fi 出网格,两路楼层证据冲突的样本进复核通道;轨迹拼接时同层内直接串联,跨层移动按电梯与楼梯通道的拓扑约束连接,禁止出现"斜穿楼板"的轨迹。
判定与聚合层是前端的分水岭:密度按"网格×楼层"聚合,窗口滑动,同人同窗去重;拥挤判定用分级阈值加持续时长去抖,阈值按站点规模独立标定——大枢纽的"拥挤"和支线站的"拥挤"不是同一个数。所有统计口径参数(窗口长度、网格尺寸、去重规则、阈值)由服务端下发并版本化,输出数据自带口径版本号。
呈现与权限层:分层地图按层切片加载,三维楼层视图只做结构示意、不冒充实拍;实时数据走事件增量推送,前端绝不订阅原始上报流——高峰时段每站每秒上千条原始位置报文,直接接进浏览器只会换来卡顿和延迟肉眼可见的看板。个体轨迹的查看权限按最小必要收敛,每次访问留痕。
气压与信标楼层标识一致,楼层事件标高置信直接进聚合;冲突样本不进密度统计,进复核通道攒批分析。复核通道的数据是金矿:冲突集中出现在扶梯中段,就给该段加历史分布先验;集中在某部电梯,就检查轿厢信标。把这批样本当噪声扔掉,串层问题会永远在。
一个实现细节:扶梯段的"活塞效应"高度曲线有形状特征(快速拉升后回稳),用垂直速度的物理范围过滤跳变段,再与相邻楼层信标的多帧投票结果做多数决,能把误判率压到可用水平。
网格尺寸对齐业务问题而非建筑模数:要回答"哪个店铺门口堵",网格就该是店面开间量级;要回答"换乘通道能不能进人",网格就该沿通道切段。窗口长度决定灵敏度与平滑度的 trade-off——30 秒窗口能跟上突发客流但毛刺多,5 分钟窗口平滑但告警滞后。建议双窗口并行输出:短窗口驱动现场提醒,长窗口驱动看板趋势,两者都带口径版本,看板角落注明当前口径,让用户知道自己在看哪种窗口。
去重规则要防两件事:一人多终端重复计数(按人员主键归并),终端短时间抖动跨网格来回(按驻留时长加权归属)。这两条不做,密度天然虚高,阈值永远调不稳。
看板消费的是聚合结果,但事件回溯需要原始轨迹。分两层存:聚合层滚动更新、内存态供实时读;明细层冷存按"人-时段"分片,回看单人轨迹时按需拉取拼接。前端拿到的是聚合密度流加按需的轨迹查询接口,两个通道的权限模型分开——看聚合的人不需要个体轨迹权限,这条边界在接口层就要划清,不是靠界面藏按钮。
三维视图的正确实现是"结构示意+数据图层":楼层几何体静态加载,人流密度作为热力图层按帧更新,两者渲染管线分离。实时推送做节流合帧——服务端 1 秒合并一次增量,前端按帧重绘变化网格,单点变化不全图重算。高峰期实测这类优化能把渲染帧率从个位数拉回流畅区间,比换更大的屏幕有效。告警列表同理:同类告警按区域聚合折叠,处置状态变更走增量,避免"刷屏—麻木—漏处置"的连锁。

图3 密度聚合链路与三类关键问题
题注:图3 拆解一次拥挤告警的聚合判定链路,并汇总串层、数据洪流、口径分歧三类问题。
串层误判。 站厅人流被计入夹层,层间数字此消彼长。根因是上下层信标穿透加基准站风压污染。对策是双源一致才计层、基准站纳入搬动重标与极端天气复核流程;已经上屏的历史数据不追改,用口径版本标注,留可解释空间。
数据洪流压垮前端。 高峰看板卡顿。根因通常是订阅了原始上报流或每个数据点触发全图重绘。对策见渲染一节:只订阅聚合流、增量合帧、按层懒加载;实在要下钻原始数据,走异步查询而不是实时通道。
口径分歧。 同一时刻两处读出不同拥挤等级。两个部门各自解释"我们的数是对的"——这时唯一仲裁者是口径版本。服务端统一下发参数、输出必带版本号、变更走发布记录,分歧就变成"版本不同"的可查证事实,而不是立场之争。
节假日精度整体劣化。 人流密度本身吸收与遮挡无线电,越挤读数越乱,密度估计与定位误差叠加,出现"越需要的时候越不准"的悖论。对策:拥挤等级判定加入"数据质量降级"状态位——高密度时段的告警附注置信度下降,提醒处置人结合现场;这也解释了为什么阈值要按站点与场景独立标定,全局一刀切必然在极端日失真。
隐私与访客数据。 乘客数据用于客流统计时,最小必要的实现是"到聚合为止":个体轨迹仅在安全事件调查等授权场景按流程调取,全程留痕;商场会员类终端的识别关联要符合个人信息保护要求,展示侧脱敏。前端把这些约束如实反映在界面上(比如轨迹回放的授权提示),比藏起来更容易获得使用方的信任。
以客流运营为主的商圈站: 信标按"通道节点+区域入口"中密度布设,气压配露天基准站,Wi-Fi 只做热力平滑。密度口径双窗口并行,看板展示长窗口、现场提醒用短窗口。前提是接受基准站的持续运维投入。
以安全管控为主的枢纽站: 在上一档基础上,把设备区与禁入边界的双源互验加严(冲突即告警),扶梯与电梯段单独建模。预算重心从"全域均匀"转向"边界与咽喉通道加密"。
与地下商业共构的站点: 商业侧复用既有接入点做指纹补位,但商业数据与轨道安全数据在管线层就分域存储、分域授权——两边部门看各自的板,跨域查询走审批接口,这是共构项目里最容易谈崩也最必须先谈拢的事。
预算有限的初建站: 先只做"层"不做"区":气压楼层加少量电梯厅信标佐证,密度用大网格粗算。楼层可信后,分区加密是纯增量投入;反过来先铺满信标而基准站缺位,看板连层都是错的。
统一记住三条边界:3~5 米与 5~10 米是条件值,节假日人流会临时劣化条件;密度数字永远带口径版本,脱离口径比较数字没有意义;聚合先行、明细后置,前端与个体数据之间隔着权限,这是设计不是补丁。
回到开头那个值班站长的肉眼。气压、蓝牙、Wi-Fi 三条链路各管一段——层、区、补位——经过"双源互验、聚合去重、口径版本化"三步加工,肉眼判断才被替换成可以复盘的数字。这套方案的适用边界同样清楚:它给的是"某层某区此刻每平方米大约几人"的可信近似,给不了每个人的精确坐标;拥挤告警在极端客流下会主动声明置信度下降,这不是缺陷,是把误差如实告诉处置人的正确姿势。
落地风险还是那三处:基准站被当成一次性设备、口径被各部门私设、前端直连了原始流。下一步的优化方向也不在算法炫技:把复核通道的冲突样本变成边界修订的输入,把口径变更做成有记录的发布,把"数据质量降级"状态真正接进处置流程。对前端工程师,这套系统最后沉淀成一句话:看板上每个可信的数字背后,都有一条没人注意的后端纪律。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。