说起地图总绕不开一个词:经纬度,通常用经纬度来表示地图上的一个点。事实上经纬度总是相对于一个地理坐标系而言的,对面向瓦片地图开发的技术人员而言,有必要对此有较为深入的了解。
首先明确:地理坐标系是针对地球在数学意义上的旋转椭球面定义的坐标系,以期通过经纬度实现对地球表面任一点的坐标定义。因此,经纬度表述椭球面的三维坐标(尽管它只有两个坐标值)。
地球的自然表面是一个由高山、深谷等构成的极不规则的曲面。陆地最高点珠穆朗玛峰高8844.43米,海洋最深处马里亚纳海沟深-11034米,两点高程差将近20000米。这样复杂的曲面在数学上无法表示,是不可以作为地图制图的基准面的。
为了寻求一个合理的基准面,前辈们经过推算发现:虽然地表是一个极不规则的曲面,但对整个地球而言它的形状很接近一个扁率很小的椭圆绕短轴旋转而成的椭球体。这个旋转椭球体是一个可基于椭圆长、短半轴,由简单数学公式表示的曲面,很适合作为地图投影、制图的基准面。
地理坐标系的核心实际上就是如何在数学上表达这样一个椭球体。
瓦片地图的地理坐标系
对于国外开发人员,面向瓦片地图说起起地理坐标系,情况会比较简单:通常就是WGS-84。国外瓦片地图,如:OpenStreetMap、ArcGIS Online、MapQuest、谷歌地球、谷歌地图(国内的不算)等经纬度都基于WGS84地理坐标系。
对国内的开发人员而言,情况就比较悲催了。由于国内某些特殊要求,我们不得不额外面对:GCJ02、BD09这两个东东(都不敢说是地理坐标系)。下面我们逐一介绍WGS84、GCJ02、BD09及其他坐标系。
WGS84
WGS84与GPS相伴相生,WGS84给出地球椭球的定义:
长半轴:6378137 扁率:1:298.257223563 由GPS测量设备给出的经纬度都是基于WGS84地理坐标系,可直接叠加到基于WGS84坐标系的瓦片地图,如国外的OpenStreetMap、ArcGIS Online、MapQuest、谷歌地球等、国内的天地图
GCJ02
GCJ是国测局的拼音首字母。GCJ02坐标系(俗称:火星坐标系)严格意义上来说不是一种地理坐标系,而是在WGS84坐标系上人为随机加偏的坐标系,国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。因此,国内瓦片地图,如:高德地图、腾讯地图、超图、360地图等都是基于GCJ02坐标系。
BD09
百度地图独有坐标系,是在GCJ02上二次加偏的坐标系。
未知坐标系
国内一些瓦片地图,如:搜狗地图和e都市都使用自家独有坐标系。由于应用范围不广,归类于未知坐标系,不做讨论。
EPSG <epsg.io/>
WKID与EPSG
WKID即Well Known ID,众所周知的ID号的意思。EPSG是管理这些ID号的一个组织,网站是epsg.io 通常来说,一个GIS里的坐标系统,必须有一个WKID,某些特别的除外,下面会讲。例如,WKID=4326,即WGS84这个地理坐标系统的ID。 地理坐标系统和投影坐标系统均使用这套定义,但是不会重复,也没有规律说哪一段数字是地理坐标系统,哪一段是投影坐标系统。幸运的是,我们并不需要完全记完,网上这个WKID大全列表很容易找到,而且只需记住项目中用的、以及常见的即可。
常见EPSG:
Ø EPSG4326 WGS84 美国GPS使用的一个全球地理坐标系统
Ø EPSG4490 CGCS2000 中国国家2000地理坐标系统
Ø EPSG3857 Web Mercator投影
ITRF 它是一个地心参考框架,由空间大地测量观测站的坐标和运动速度来定义,是国际地球自转服务的地面参考框架。
坐标框架 坐标系包含的关系。
坐标系包括坐标原点和坐标框架,选择坐标原点就是选择参考系。选择坐标框架就是选择测量单位,两者都离不开观察者的参与。
坐标转换
坐标系转换中主要是GCS转GCS,GCS转PCS就是投影,PCS转PCS是重投影。
GCS转GCS这属于空间解析几何里的空间直角坐标系的移动、转换问题,还有个更高级的说法:仿射变换。
欲将一个空间直角坐标系仿射到另一个坐标系的转换,需要进行平移、旋转、缩放三步,可以无序进行。
平移、旋转又有三个方向上的量,即平移向量=(dx,dy,dz)和旋转角度(A,B,C),加上缩放比例s,完成一个不同的坐标系转换(比如WGS84转西安80),就需要7参数。
地心坐标系是唯一的,即原点唯一,就说明平移向量是0向量,如果缩放比例是1,那么旋转角度(A,B,C)就是唯一的仿射参数,即3参数。
一般而言比较严密的是用七参数法(包括布尔莎模型,一步法模型,海尔曼特等),即X平移,Y平移,Z平移,X旋转,Y旋转,Z 旋转,尺度变化K。 要求得七参数就需要在一个地区需要3个以上的已知点,如果区域范围不大,最远点间的距离不大于30Km(经验值),这可以用三参数(莫洛登斯基模型),即X平移,Y平移,Z平移,而将X旋转,Y旋转,Z旋转,尺度变化K视为0,所以三参数只是七参数的一种特例。 在一个椭球的不同坐标系中转换可能会用到平面转换,现阶段一般分为四参数和平面网格拟合两种方法,以四参数法在国内用的较多,举个例子,在深圳既有北京54坐标又有深圳坐标,在这两种坐标之间转换就用到四参数,计算四参数需要两个已知点。
转换方式
常用的转换方式(针对平面转换)
1.A平面坐标系——B平面坐标系(后面会用到)
此时,A坐标系(转换前)称为源坐标系,B坐标系(转换后)称为目标坐标系。
涉及的常见转换参数:
二参数:
包含X平移,Y平移
四参数:
包含X平移,Y平移,旋转,尺度(缩放)
七参数,最常用的叫布尔莎七参数:
包含X平移,Y平移,Z平移,X旋转,Y旋转,Z旋转,尺度(缩放)
2.相同椭球下,大地坐标系BL——平面坐标系XY(正算)
通过设置椭球参数+投影方式+中央子午线
3.相同椭球下,平面坐标系XY——大地坐标系BL(反算)
同样通过设置椭球参数+投影方式+中央子午线,进行反推
3度带6度带区别,中央经线及带号计算(投影坐标)
我国基本比例尺地形图除1:100万采用兰勃特投影(lambert)外,其他均采用高斯-克吕格投影。为减少投影变形,高斯-克吕格投影分为3度带或6度带投影。
按国家规定我国1:2.5-1:50万地形图均采用6度分带;1:1万及更大比例尺地形图采用3度分带,以保证必要的精度。
6度分带投影:即经差为6度,从零度子午线开始,自西向东每隔6度为一个投影带,全球共分60个带,用1,2,3,4,5,......表示。即东经06度为第一度带,其中央经线的经度为东经3度;东经612度为第二带,其中央经线的经度为东经9度。
3度分带投影:即经差为3度,从东经1.5度开始,自西向东每隔3度为一个投影带,全球共分120个带,用1,2,3,4,5,......表示。即东经1.54.5度为第一度带,其中央经线的经度为东经3度;东经4.57.5度为第二带,其中央经线的经度为东经6度;东经7.5~10.5度为第三带,其中央经线的经度为东经9度。 (这样分带的方法使6度带的中央经线均为3度带的中央经线。)
中央经线计算方法
当地中央子午线决定了当地的直角坐标系统,首先确定您的直角坐标系统是3度带还是6度带投影,然后再根据如下公式推算。
6度带:带号N=round[(L+3)/6],即对(L+3)/6的值四舍五入取整数,L为当地经度;则中央子午线经度L0=6 × N-3。
3度带:带号N=round(L/3),即对(L/3)的值四舍五入取整数,L为当地经度;则中央子午线经度L0=3 × N。
自己的理解:
1.搜要转换的城市的经纬度
2.(经度也就是x/3)*3 (括号里取整)
3.来一个实例,以免时间长了忘记,以扬州坐标为例 x:119 y:32
119/3=39.66666
40*3=120
坐标转换方式
使用postgis <github.com/geocompass/…>导入坐标加偏函数 支持点、线、面的WGS84和CGCS2000与GCJ02和BD09坐标系与之间互转
postgis st_transform() 可转换任意epsg代号坐标
QGIS插件 GeoHey Toolbox