在群里面遇到一个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.这些名字主要指不同的椭球体,与地理坐标系还是投影坐标无关。