做定位功能后,我才知道手机根本不是靠GPS定位的 刚接触定位功能的时候我一直有个非常朴素的认知手机定位 GPS。直到后来做顺风车、地理围栏、门店推荐这些业务我才发现这个理解只对了一半。甚至很多时候GPS根本没有参与定位。那次事故让我开始怀疑GPS事情发生在一个很普通的需求上。产品希望用户打开小程序后自动显示您当前距离XX门店 300 米逻辑并不复杂获取坐标 → 计算距离 → 返回最近门店。上线第一周就收到用户反馈我明明站在门店门口为什么推荐的是另一家店最开始我怀疑算法。然后怀疑坐标转换。最后把用户的原始定位日志拉出来看。发现用户定位精度显示accuracy: 860m860米。这已经不是误差了。这属于猜。后来进一步排查发现用户当时在地下停车场。而地下停车场最大的特点就是GPS基本失效。GPS其实很脆弱很多人以为GPS是万能的。实际上它工作条件非常苛刻。GPS本质上是在接收天上的卫星信号。手机需要同时收到多颗卫星的数据才能计算自己的位置。所以室外开阔地 → 精度通常5~10米高楼林立的街道 → 精度20~50米商场内部 → 精度100~500米地下停车场 → 基本失效这也是为什么很多导航软件进入地下车库之后会突然漂移。不是软件坏了。而是GPS信号真的进不来。那手机为什么还能知道你在哪这是我后来研究位置服务时最惊讶的一件事。因为手机定位其实是一套融合系统。GPS只是其中一个数据源。现代手机真正使用的是第一层GPS最准确。但也是最脆弱的。有遮挡就容易失效。第二层基站定位你的手机永远在和附近基站通信。运营商天然知道你当前连接的是哪些基站。以及这些基站的大概位置。通过多个基站的信号强度和覆盖范围可以反推出一个大概位置。精度通常几十米到几百米。地下停车场里大多数手机其实就是靠它在工作。第三层WiFi定位很多人不知道。你家路由器的位置很可能早就被记录进数据库了。当手机扫描到附近WiFi时WiFi A WiFi B WiFi C定位系统会发现这些WiFi过去经常一起出现。并且对应某个固定区域。于是即使没有GPS也能大概知道手机在哪里。很多商场里的定位本质上依赖的就是WiFi指纹库。第四层蓝牙定位商场导航经常会用到。停车场找车也会用到。蓝牙信标覆盖后精度甚至可以进入10米以内。很多室内导航方案其实都在使用这种技术。真正工作的是融合定位后来我才意识到一个问题开发者拿到的只是一个经纬度。但这个经纬度背后可能经历了非常复杂的计算。比如GPS坐标基站信息WiFi列表传感器数据历史轨迹全部融合之后才得到最终结果。很多地图厂商对外暴露的只是latitude longitude但内部已经跑完了一整套定位引擎。为什么同一个地方不同APP定位结果不一样这个问题以前也困扰过我。后来才明白。因为不同平台拥有的数据资产完全不同。有的平台WiFi数据库更大有的平台基站样本更多有的平台融合算法更激进所以即使站在同一个地方高德、百度、腾讯、苹果地图得到的位置也可能不同。做位置业务之后我们开始关注另一件事以前接地图SDK。只关注地图展示。后来发现真正消耗调用量的根本不是地图。而是各种位置数据服务。比如地理编码逆地理编码坐标转换IP定位行政区划查询WiFi定位融合定位这些能力很多业务都需要。但未必需要完整地图SDK。后来我们把这部分能力单独拆出来。测试过几家位置服务方案之后最终接入了迈云LTS的位置数据服务。原因很简单我们要的是位置能力不是地图页面。对于顺风车、门店推荐、围栏触发这类业务来说稳定的数据接口反而更重要。最后现在如果有人问我手机是怎么知道你在哪里的我不会再回答靠GPS。更准确的答案应该是GPS只是参与者之一。真正让定位工作起来的是背后那套融合了卫星、基站、WiFi、蓝牙和海量历史数据的位置服务系统。而大多数时候我们看到的那个蓝点只是最终结果而已。评论区聊聊你第一次发现GPS并不是万能的时候是在什么场景