这篇不整虚的,直接告诉你Geo服务里那个“高度”参数到底该怎么填,别再用默认值瞎蒙了,否则你的定位偏差能大到让你怀疑人生。
我是干这行十五年的老油条了,见过太多新手在Geo服务的高程数据上栽跟头。很多人一上来就问:“这玩意儿离地到底多远?”其实这问题本身就有点陷阱。因为“Geo”这个词太宽泛了,你是指卫星定位的高度,还是地图渲染的高度,或者是基站定位的高度?这三者之间的差距,有时候比你和老板的薪资差距还大。
先说最让人头疼的GPS或者北斗卫星定位。很多人以为拿到的高度数据就是离地面的真实距离,大错特错。那个数据是基于WGS84椭球体算出来的,也就是所谓的“大地高”。而咱们平时说的海拔,是“正高”,也就是相对于平均海平面的高度。这两个概念之间有个巨大的鸿沟,叫“高程异常”。在平原地区,这个偏差可能也就几十米,但在山区或者地形复杂的地方,偏差能拉到一百多米。我有个做物流的老客户,以前用默认的高程数据,结果他的无人机配送路线规划总出错,因为系统以为他在山顶,其实他在山谷里,差点撞树。后来我们特意做了椭球高到正高的转换,虽然转换算法不完美,但误差缩小到了5米以内,这就够用了。
再说说手机里的基站定位或者Wi-Fi定位。这种定位方式根本不提供精确的高度信息,它给的那个“高度”,很多时候是系统根据你所在城市的平均海拔硬塞给你的一个估算值。这就好比你问一个人现在几点了,他看的是手表,但手表没电了,他就随便猜一个时间给你。这种数据,你要是拿来搞工程测量,那就是闹着玩。我之前帮一个做智慧城市的项目方调试数据,他们发现不同品牌的手机在同一栋楼里,上报的高度数据能差出二十米。这哪是定位啊,这是算命。
那到底该怎么解决“geo距地面距离”不准的问题?我的建议是,别迷信单一数据源。如果你做的是高精度的地图应用,必须引入数字高程模型(DEM)。简单说,就是给地图铺上一层厚厚的“地形垫子”。当你的GPS数据飘忽不定时,用DEM里的地形高度去修正它。虽然DEM也有分辨率的问题,比如30米分辨率的DEM,在山区可能连个小山坡都识别不出来,但对于大多数商业应用来说,已经比直接裸奔强太多了。
还有个容易被忽视的点,就是室内场景。在商场或者地下停车场,卫星信号基本是废的。这时候很多系统会强行返回一个0或者默认值,这简直就是灾难。我见过一个做室内导航的案例,因为高度数据一直是0,导致用户的楼层判断完全错误,明明在3楼,导航却指引他去1楼找厕所。解决这个问题,得靠蓝牙信标或者气压计。气压计虽然受天气影响大,但在短时间内,它能很好地反映楼层的变化。不过要注意,气压计的数据需要定期校准,否则随着时间推移,误差会越来越大。
说到底,没有绝对的“geo距地面距离”,只有“在这个应用场景下可接受的误差范围”。你要是做共享单车开锁,差个两米无所谓;你要是做地质勘探,差两米那就是事故。所以,别纠结于那个具体的数字是多少,而要纠结于你的业务需要多精确。
最后提一嘴,很多开发者喜欢用开源的DEM数据,觉得免费香。但你要知道,免费的数据往往更新慢,分辨率低。如果你做的是高端商业地图,建议还是去买商业级的地形数据,或者自己采集。别为了省那点钱,最后花十倍的时间去修bug。这行干久了你就明白,数据质量就是生命线,别拿用户的体验去赌概率。希望这点经验能帮你少走点弯路,毕竟我在坑里摔过不止一次了。