
在处理一个覆盖 2021 年 1 月至 8 月、包含 2.4 亿条深圳共享单车订单数据集时,我遇到了地理信息分析中的典型难题:大体量时空数据中,坐标系信息随时间可能并不统一。
项目目标是分析共享单车的时空分布,数据集来源方(政府数据开放平台)的官方网站明确指出:“经纬度数据基于 bd09 坐标系”。

基于这一信息,我的初始方案是将数据点直接加载到同样使用 BD-09 坐标系的百度地图上。然而,初次渲染的结果完全偏离预期:数据点并未出现在街道上,而是大面积地偏移到了海中。这一步采用的是 mapvgl baidu 的包,加载的地图是https://api.map.baidu.com/api?v=1.0&type=webgl&ak=。

原始坐标直接加载于百度地图,出现严重偏移
文档与实际表现严重不符,我启动了一系列测试来定位问题根源。
测试一:API 转换的意外结果
BD-09 转换为 GCJ-02,再加载到百度地图。
GCJ-02 坐标,并自动转换为 BD-09 进行显示。我的操作 原始坐标 -> (BD09 to GCJ02 API) -> GCJ02坐标 -> (地图隐式转换) -> BD09坐标,这一来一回的转换恰好修正了问题,但这并不能确定原始坐标系的真实身份。测试二:更换数据批次与验证基准(关键转折)
为了验证假设,我换用了另一份2021 年 1 月 1 日的数据,并引入了更标准的验证基准。
GCJ-02 标准)上。结果:完美对齐:单车点基本分布在路旁,也没有偏移到海面上或者湖泊上,也很少进入小区等封闭区域。
原始坐标在QGIS中与高德地图(GCJ-02)底图完美贴合
GCJ02_to_WGS84 转换,然后将输出结果加载到谷歌影像(公认的 WGS-84 标准)。结果:同样完美对齐。
原始坐标经GCJ02->WGS84转换后,与谷歌卫星影像(WGS-84)底图完美贴合
实测原始坐标当做 gcj02 使用第三方工具转为 wgs1984、叠加谷歌影像(上图)和叠加天地图(下图)都是完美对齐的。

叠加天地图矢量
上述测试形成了一条完整的证据链: 2021 年 1 月 1 日的共享单车数据,其真实坐标系是 GCJ-02,而非官方文档所声称的 BD-09。
这种文档与实际不符的情况,在处理大规模、长周期、多来源的历史数据集时并不少见。数据在采集、导出、分发的漫长流程中,任何一个环节的变更都可能导致坐标系信息的不一致。
这次排查经历,让我总结出一套应对复杂地理数据源的标准化作业流程(SOP)。
重要声明:由于数据体量巨大(2.4 亿条),本次的详细验证仅针对 2021 年 1 月 1 日 的数据样本。本文的核心目的并非为整个数据集的每一天作担保,而是旨在分享一种通用的、可复现的数据坐标系排查与验证方法。面对庞杂数据时,掌握方法比拥有结论更为重要。
如果你对本文章有什么意见、对如何制作文中的图表感兴趣、或者有其它任何问题建议在本文的博客评论区留言,说不定你的问题别人也遇到了。
本文在我的个人网站[1]同步发布和更新,你可以在微信公众号中点击阅读原文跳转。
如果你也觉得这事儿有意思,给我一点反馈吧————点下赞、再看或者转发,让算法知道有人想看;
欢迎在评论区里疯狂吐槽你在 ArcGIS 里遇到的烦心事,或者聊聊你对这个系列、对哪个技术方向最感兴趣。你们的反馈会直接影响我后续内容的侧重点!
参考资料
[1]
个人网站: https://www.renhai.online/
[2]
我的知乎: https://www.zhihu.com/people/Ing_ideas
[3]
我的博客: https://www.renhai.online/blog
[4]
我的 GITHUB: https://github.com/renhai-lab
[5]
我的 GITEE: https://gitee.com/renhai-lab
[6]
RSS: https://www.renhai.online/rss.xml