LBS之一:经纬度、地图坐标系知多少
0 一个真实的案例
2017年,我在云栖社区上看到这样一篇文章:PostGIS 坐标转换(SRID)的边界问题 - ST_Transform-阿里云开发者社区,它描述了阿里云一个PostgresSQL数据库用户遇到的经纬度距离计算问题:

针对这个用户提的报错case,阿里云官方最终给出的解决办法是:不要使用26986这个srid值/坐标系。
后来这个问题恰好也在工作中遇到,且在内网技术论坛搜索,竟也发现同样以为是BUG的问题,于是拿起旧课本,去翻找26986到底是什么坐标系。
答:26986为美国马萨诸塞州地方坐标系(区域坐标系/局部坐标系),而我们GPS定位通常用得较多的是WGS84坐标系。以上example1来源postgresql官方文档距离计算函数st_distance的示例,其采用26986是因为其计算的坐标在26986坐标系所定义的原点(-71.5°,41°)附近,采用该区域坐标系有更高的计算精度。而示例example2中,所计算距离的经纬度坐标在中国广西南宁市,采用位于美国的区域坐标系,投影偏差会非常大--这也说明,通常我们照搬国外开源软件的资料,知其然而不知道所以然危害有多大。
后来我回复了在内网技术论坛ATA中已存在很久的这个问题(loading),这里不是是否要不要使用26986的问题,正解是:在example2示例中,可以选择SRID值为3857这个通用的全球性投影坐标系(相对区域坐标系),在大部分互联网商业场景中误差是可接受的,也可以选择中国境内的区域坐标系(如果精度要求更高)。这个问题的解答得到阿里云相关同学的感谢,后也因此受邀参加了阿里云承办的PostgresSQL2017中国大会的邀请,讲解关于postGIS地理扩展部分的使用问题(这是后话~)。
总之,任何坐标(经纬度也是一种坐标),都是在某种坐标参考系下定义的度量值,基于该坐标的计算(距离、面积或其他)都离不开坐标系的原始定义--坐标原点及轴尺度定义。
1 经纬度的来源
百度百科对“经纬度”是这样定义的:经纬度是经度与纬度的合称组成一个坐标系统,称为地理坐标系统,它是一种利用三度空间的球面来定义地球上的空间的球面坐标系统,能够标示地球上的任何一个位置。百度百科_全球领先的中文百科全书

(a)
1.1 经线与经度
经线--也称子午线,和纬线一样是人类为度量方便而假设出来的辅助线,定义为地球表面连接南北两极的大圆线上的半圆弧。任意两根经线的长度相等,相交于南北两极点。每一根经线都有其相对应的数值,称为经度。
经度--是指通过某地的经线面与本初子午面所成的二面角。在本初子午线以东的经度叫东经,在本初子午线/0°经线以西的叫西经。东经用“E”表示,西经用“W”表示。
1.2 纬线与纬度
纬线和经线一样是人类为度量方便而假设出来的辅助线,定义为地球表面某点随地球自转所形成的轨迹。任何一根纬线都是接近正圆的椭圆形而且两两平行。纬线的长度是赤道的周长乘以纬线的纬度的余弦,所以赤道最长,离赤道越远的纬线,周长越短,到了两极就缩为零。
纬度 是指过椭球面上某点作法线,该点法线与赤道平面的线面角,其数值在0至90度之间,赤道以北称北纬,用“N”表示。赤道以南称南纬,用“S”表示,北纬为正数,南纬为负数。

1万+

被折叠的 条评论
为什么被折叠?



