丽水市汽车运输集团股份有限公司信息中心
苟安廷
由于天朝上国的特色,我们接收到的GPS坐标并不是真实的坐标,而是GPS设备按照国家加密算法进行加偏以后的坐标,这个算法是一致的,和具体GPS设备无关,收到GPS坐标后,我们不能直接把这个坐标显示到电子地图上,因为每种电子地图会在此基础上进行二次加偏,也就是说,我们必须把GPS坐标转换成地图对应的地图坐标,才能正确显示出来,这样,我们将接触到三个坐标:真实坐标、在真实坐标基础上加偏的GPS坐标、在GPS加偏基础上再加偏的地图坐标。GPS设备收到真实坐标后,会按统一算法加偏,得到GPS坐标,并传给我们,这个过程是硬件完成的,我们将收到的GPS加偏坐标,按每种地图提供的纠偏接口,转换成地图坐标,再显示到地图上。GPS本身的加偏算法是一样的,尽管我们并不知道具体怎么算的,但不同地图二次加偏的算法不一样,我们只有拿到该地图对应的加偏算法才能在该地图上正确显示位置信息,这个过程我们通常称之为纠偏,每种地图都有自己的纠偏接口,也就是将GPS坐标转换成该地图对应的地图坐标,关于百度地图纠偏的方法,请参加我的另外一篇博客:http://blog.csdn.net/gatr/article/details/9569189,但这些纠偏方法,都没有提供逆向的,也就是说没有将地图坐标转换成GPS坐标的直接方法,而这种需求往往又是必须的,比如,我们有一个百度地图的坐标,需要正确显示到谷歌地图上,显然,无法直接将百度地图坐标转换成谷歌地图坐标,最理想的方式,就是先把百度坐标转换成GPS坐标,然后,再把GPS坐标转换成谷歌坐标。
我们知道,地图坐标加偏是非线性的,也就是说,不同区域,偏移量不一样,但同一个区域,偏移量却差不多,因此,我们只要找到该区域的偏移量,就可以反算GPS坐标了,那么,如何找到偏移量呢?一个简单的办法,就是把当前地图坐标当成GPS坐标来使用,然后以此计算出对应地图的地图坐标,最后,将原坐标和新得到的坐标相减,就得到了偏移了,既然有了偏移,将该偏移和原坐标叠加,就反算出了对应的GPS坐标了。为了使用整数表示,我们参照GPS通用做法,将经纬度分别乘以一百万,示例代码如下(不同地图加偏方式不一样,这里,我们用一个方法模拟):
/// <summary>
/// 模拟地图纠偏,每种地图纠偏算法参照对应的接口
/// </summary>
/// <param name="p">GPS坐标</param>
/// <returns>对应的地图坐标</returns>
private Point GpsToMap(Point p)
{
return new
Point(p.X - 1000, p.Y - 500);
}
/// <summary>
/// 将地图坐标转还原为GPS坐标
/// </summary>
/// <param name="p">当前地图坐标</param>
/// <returns>GPS坐标</returns>
private Point MapToGps(Point p)
{
//将当前地图坐标,当成GPS坐标使用,根据地图转换接口,得到地图坐标
Point temp = GpsToMap(p);
//用当前坐标(模拟的GPS坐标)减去得到的地图坐标,得到偏移
int offX = p.X - temp.X;
int offY = p.Y - temp.Y;
//根据地图坐标与偏移的叠加,反算出GPS坐标,并返回
return new
Point(p.X + offX, p.Y + offY);
}
//测试代码
private void button1_Click(object sender,
EventArgs e)
{
/定义一个GPS坐标
Point ptTest =
new Point(120123456, 28123456);
//模拟纠偏得到地图坐标
Point pt1 = GpsToMap(ptTest);
//根据地图坐标,反算出GPS坐标,我们可以看到,pt2和ptTest相同
Point pt2 = MapToGps(pt1);
}
上面的代码实现了将地图坐标转换成GPS坐标的功能,需要注意的是,实际使用时,同样的GPS坐标,每次调用地图纠偏接口时,得到的地图坐标都可能不一样,都有一定的随机误差,因此,不要指望这种转换是严格一对一的,实际只能是近似值而已。
分享到:
相关推荐
各地图工具都有坐标转换 API 可用,但是成千上万的 GPS 数据通过 API 转换是一件很消耗资源的事,所以需要提供一种离线转换的方式。 本人在项目中曾也用过 API 转换的方式,但是当设备数量一增加,在坐标转换这一个...
GPS坐标转换为百度地图坐标(JS),包括在线和离线算法2种方式,在线调用百度api进行坐标转换,离线使用算法进行坐标转换
通过GPS坐标的经纬度,经计算返回一组百度坐标数据,简单方便
GPS系统接收数据坐标转换 GPS接收的数据往往是三维坐标,而在科学研究中我们通常用二维坐标。因此必须 进行坐标转换,下面我们介绍一种坐标转换,即把WGS84坐标转换为高斯—克吕 格坐标系。数字地图投影的...
GPS坐标转换为百度地图坐标(JS),包括在线和离线算法2种方式,在线调用百度api进行坐标转换,离线使用算法进行坐标转换
一、坐标分类 地图坐标大致分为几种: 1、GPS、WGS84,也就是原始坐标体系,这是国际公认的世界标准...二、坐标转换 1、使用高德地图sdk转换 public AMapLocation fromGpsToAmap(Location location) { AMapLoc
软件界面使用为百度API的坐标转换, 内部代码包含 GPS设备/谷歌地球坐标(WGS84)、谷歌中国/腾讯/高德地图坐标(GCJ02)、百度坐标(BD09) 的坐标互转的本地算法 内含示例 本地算法都会有一定的偏差 此本地算法实测WGS84...
一篇关于gps的坐标如与电子地图坐标匹配的论文
将历史GPS坐标点转化成百度地图上的坐标方便使用百度地图开发
GPS经纬度坐标转换为大地坐标,WGS84到大地坐标的转换源码,含调用界面及示例,高斯克吕格投影算法
3、其他特殊坐标体系,一般都是由火星坐标通过偏移算法计算得出的,比如百度使用的是BD-09坐标,搜狗使用的是自己的搜狗坐标。 这个里面还有各个坐标体系之间的互转:如“WGS-84 -> BD-09、GCJ-02 -> WGS-84、BD-09...
介绍了如何把GPS坐标转化为直角坐标,如果制作GPS导航的东西可以参考一下
此坐标转换经过本人高精度GPS 验证 误差范围在1米以内,更深入了解的可以私信我
百度地图API前台js脚本实现的GPS转百度坐标只适用于转换,转换后因为是移步调用转换,所以无法实时获取进行画线等操作,只能从后台入手进行转换,再前台直接调用,因为暂时没有找到GPS直接转百度坐标的算法,只能先...
* * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 * * 将 BD-09 坐标转换成GCJ-02 坐标 * * @param * 百度转火星 * * bd_lat * @param bd_lon * @return */ public static GPS bd09_To_Gcj02...
大数据-算法-GPS坐标转换中基于改进遗传算法求解病态方程的探讨.pdf
公路测量GPS坐标转换中病态矩阵与坐标粗差的处理算法.pdf
目前没有找到相关GPS坐标转谷歌坐标的前台Javascript脚本,只能从后台转换了,分享大家
GCJ2000与WGS84坐标转换和GCJ2000与BD09坐标转换源码
采用python实现将GPS的经纬度转换成16进制,输入为GPS坐标。