首页 > 代码库 > 地图入门_坐标系统

地图入门_坐标系统

    在群里面遇到一个GPS空间查询计算的问题,查询过程中发现两个坐标点的空间距离越近,距离计算的越不准。
车子在圆中,但是算出来的不在


范围变大计算结果正确
导致这个问题的原因之一:地图坐标系统。
     坐标系统就是对一个坐标的描述。要描述一个坐标就需要空间参考系统。假设问你一个坐标(1024,720)在你屏幕的什么位置。你首先要确定的就是起算点在那里,左上角还是左下角。同理(102.13,34.24)这在地球的上的什么地方。起算点是本初子午线和赤道的交点么?
     问题没有那么简单。屏幕坐标是笛卡尔坐标系。但是地图上用的坐标可是角度,60进一位的角度。它是用来描述球面上某点的。

     知道了坐标(102.13,34.24)的空间参考系统是个球。如果这个球的名字叫 WGS84 那它的球心就是地球的质心,他的长半轴6378137±2m。在准确点其实它还有扁率,因为这个球是个椭球体。地球本身也不是个正圆体。 
     我们在来看一下百度地图的距离计算函数
 function getDistance(g, i) {
     //无关内容省略
     var a = 6370996.81;
     return a * Math.Acos((Math.Sin(i) * Math.Sin(g) + Math.Cos(i) * Math.Cos(g) * Math.Cos(e - f)));
}
     在计算两点距离时用到了球体的半径。问题就在这个半径上。数据库里面存的GPS数据的坐标系统,使用的椭球半径是6378137±2m。从前台传入查询的坐标是百度地图的坐标参考系统,用的球半径是6370996.81。两个坐标不是一个空间参考系统,误差肯定很大。想要得到准确的值那就要进行坐标转换。从 WGS84->百度坐标,百度里面提供了这样的接口。但是想把百度坐标->WGS84,这个基本不可以,至少百度地图是不允许的。

扩展一下-------------
常用的坐标系统主要有两种。
1.地理坐标系:以椭球体为基础建立的坐标系,用经纬度度量坐标。上面说的就是这种。
2.投影坐标系:在特定椭球体基础之上经过地图投影建立的平面坐标系。在测绘行业最常用的。
     简单来说,虽然我们生活的地球是圆的,但是人力所及的地球环境都是平的。所以直接在一个平面上绘制地图更简单而且更有利于测量还可以提高绘制精度。不过你也不能随便来,还要通过一套复杂的方法把地球投影到平面上然后分块绘制。这样才能方便的把各地的地图整合拼接起来。


地图投影几何分类主要包括

最后说一下,如果有人给你说 北京54,西安80,WGS84.这些名字主要指不同的椭球体,与地理坐标系还是投影坐标无关。