2010年3月8日星期一

Google Map API 国内地图偏移的解决

由于国内地图采用的坐标系统和国际通用的不一样,所以如果直接用GPS取得的经纬度来请求Google Map,会发现有偏移。CSDN上有个牛人找到了Google修正偏移的接口,完美解决了这个问题

在使用他所说的方法之前,为了解决地图偏移问题,找了不少资料,发现对引起国内地图偏移的原因有所误解,也就是说,其实不是以前一直以为的有关部门瞎折腾。

简单地说,地球不是一个完美的椭圆体,所以如何以经纬度及海拔来标识地球上面的一个点,与选择什么样的近似椭圆体是有关的。(外行表述,行家请指教)国际上比较通用的体系叫做WGS84,中国现在的地图则基本采用了北京54体系,另外国内还有一个西安80体系,看到资料貌似现在新建设的GIS系统还要采用一个2000年的标准。

一个国家采用自己的标准,也不是只有中国这么干,貌似现在有上百个这类的坐标系。坐标系之间是可以互相转换的。首先,要将一个坐标系的经纬度和海拔BLH这三个数据,根据选择的椭圆形的长径和扁率来转换成称为大地坐标的XYZ,然后使用另外一个体系的长径和扁率来将XYZ转换成新的BLH。所有的坐标体系所选择的椭圆形的半径和扁率都是公开的,包括国内的这些。

这样看起来貌似没问题,但是实际上通过这样的转换是无法得到正确的坐标的。因为各个坐标体系选择地球的哪个点来作为椭球的中心,以及坐标轴的方向,都不一样的。所以,在将XYZ转换成新的BLH之前,还需要对XYZ进行一次变换。外行的我不知道原因,只知道地球上各个点要进行变换所需要的参数是不一样的,而且是没法通过公式计算的。

其它的坐标体系会把变换所需要的参数公开,但是北京54和西安80则只公开了这两者之间互转的参数,原因是基于国家安全的理由。所以,世界上的GIS系统支持很多坐标系,但是就是没法支持这两个,也增加了国内搞GIS的人很多麻烦。

总而言之,国内采用自己的坐标系,不是特立独行瞎折腾,只不过……

没有评论: