在地图开发和GIS中,处理WebGL(例如MapLibre、Cesium还有Three.js),坐标系统会经常被提到。虽然经纬度、米制坐标和投影方式常被混淆,但今天把这三个概念彻底讲清楚,以后在会议上遇到提问就不再犯迷糊。我们先从大地坐标系开始,这是给地球定规矩的第一步,它决定了地球的形状和大小。常见的大地坐标系包括WGS84,它是GPS信号里用的坐标;还有CGCS2000,是中国用的导航标准;还有NAD83,北美用的老大哥。同一个位置在不同的坐标系中可能会偏移几十米甚至上百米,这种偏差在物流和城市规划中是不能忽视的细节。地理坐标系则是把地球折成角度来表达位置,纬度告诉我们离赤道有多远,经度告诉我们离本初子午线有多远。椭球体让地球看起来更接近真实形状:两极稍扁、赤道略鼓。东京的坐标就是在WGS84这个椭球体上截取的切片,没有它导航仪就会把东京送到太平洋去了。地理坐标系与大地坐标系是相辅相成的关系:大地是底座,地理是表达方式。 接下来我们来看投影坐标系。因为屏幕是二维的而地球是三维的,所以必须把球面摊平在屏幕上进行渲染。常见的投影方式包括Web Mercator(EPSG:3857),这是Google Maps用的锅盖投影;UTM投影把地球切成60片独立编号的“扑克牌”,精确度很高;高斯-克吕格则是中国测绘系统用的投影方式。在Web Mercator下格林兰看起来比非洲还大,这是因为投影方式的原因。高放大倍数下地图会抖动得很厉害,需要使用高低精度瓦片或世界原点漂移技术来平衡性能和精度问题。 处理经纬米时需要注意直接减经纬度算距离会有误差;必须先转成投影坐标再算距离才正确。总结一下:大地坐标系先给地球立规矩;地理坐标系再把规矩折成角度;投影坐标系最后把角度摊成米制方便屏幕渲染和距离计算。下次遇到选择WGS84还是CGCS2000时可以淡定反问一句屏幕分辨率多少或者支持到哪级缩放——选对了坐标系项目才不会翻车。