谷歌地图偏移内地会有偏移,这个偏移怎么理解?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&哪位高手知道:谷歌地图上取的坐标点导入到1:50000地形图 会不会有偏移,怎样解决?_百度知道中国地图坐标偏移算法整理
原文地址:http://dijkst.github.io/blog//zhong-guo-di-tu-zuo-biao-pian-yi-suan-fa-zheng-li/(第九快石头博客),有删改。
& & & & &不知道大家注意没有,谷歌地图中国版,百度地图很多时候找出来的坐标差异很大?为什么原因很简单,为了保密需要,所有的坐标都必须经过国家测绘局进行偏移,这里的坐标,包括某个景点的坐标,甚至是整张地图的坐标(地图是由多个建筑、地形坐标构成)!!而偏移算法目前在正规渠道来说是保密的,根据小伙伴们的观察,偏移量是不一定的,我就在想,一个正方形的建筑,经过这种偏移,会不会偏出一个梯形出来…………
& & & & 既然地图是偏移的,并非真实的地图,那么我们往地图上面标注景点或者建筑的时候,甚至标注用户当前位置时,就不能直接用 GPS 输出的真实值,而是得将 GPS 坐标也进行相同算法的偏移,然后放在地图上就感觉没偏移了——大家一起做漂移~
& & & & 所以市面上,就出现了一种现象,水货的 GPS 设备(有的手机也是),做定位的时候输出真实值,而中国市面上的地图,例如 Google 地图、百度地图等,都是必须遵守国家测绘局规定进行偏移的。所以出现了定位不准的问题。而行货 GPS 设备,由于是正规渠道,里面内置了偏移芯片,所以输出的定位坐标是偏移过的,放在 Google 地图上面就正常了!
& & & & 其实,从正常的方式使用,例如买行货,用 Google、百度地图等,都是没偏移问题。如果遇到需要收集景点的坐标,也得用行货 GPS 设备,那么皆大欢喜!然而,有一个悲剧的问题发生了——香港、澳门从坐标上偏离了大陆,Google 还是采用真实的地图,而百度认为是中国,所以采用偏移的地图,这样就混乱了——同一个香港坐标,在百度和 Google 里面看到的差距很大~(这段话作者写得好混乱,没有看懂)
& & & & 当然咯,最好的办法是,在香港和澳门收集坐标的时候,两套坐标都收集……可是事实上,我们经常没办法弄到……
& & & & 这时候就需要转换算法,将两种坐标算法进行互相转换——更悲剧的是,这个算法,真实坐标-&火星坐标是保密的,火星坐标-&真实坐标是不可逆的!!!
& & & &不过,网络上,不知道从哪里出来了一套算法,我试了一下,还挺准的~
// Krasovsky 1940
// a = , 1/f = 298.3
// b = a * (1 - f)
// ee = (a^2 - b^2) / a^2;
const double a = ;
const double ee = 0.;
// World Geodetic System ==& Mars Geodetic System
BOOL outOfChina(CLLocationCoordinate2D coordinate)
& & if (coordinate.longitude & 72.004 || coordinate.longitude & 137.8347)
& & & & return YES;
& & if (coordinate.latitude & 0.8293 || coordinate.latitude & 55.8271)
& & & & return YES;
& & return NO;
double transformLat(double x, double y)
& & double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * sqrt(abs(x));
& & ret += (20.0 * sin(6.0 * x * M_PI) + 20.0 * sin(2.0 * x * M_PI)) * 2.0 / 3.0;
& & ret += (20.0 * sin(y * M_PI) + 40.0 * sin(y / 3.0 * M_PI)) * 2.0 / 3.0;
& & ret += (160.0 * sin(y / 12.0 * M_PI) + 320 * sin(y * M_PI / 30.0)) * 2.0 / 3.0;
static double transformLon(double x, double y)
& & double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * sqrt(abs(x));
& & ret += (20.0 * sin(6.0 * x * M_PI) + 20.0 * sin(2.0 * x * M_PI)) * 2.0 / 3.0;
& & ret += (20.0 * sin(x * M_PI) + 40.0 * sin(x / 3.0 * M_PI)) * 2.0 / 3.0;
& & ret += (150.0 * sin(x / 12.0 * M_PI) + 300.0 * sin(x / 30.0 * M_PI)) * 2.0 / 3.0;
// 地球坐标系 (WGS-84) -& 火星坐标系 (GCJ-02)
CLLocationCoordinate2D wgs2gcj(CLLocationCoordinate2D coordinate) {
& & if (outOfChina(coordinate)) {
& & double wgLat = coordinate.
& & double wgLon = coordinate.
& & double dLat = transformLat(wgLon - 105.0, wgLat - 35.0);
& & double dLon = transformLon(wgLon - 105.0, wgLat - 35.0);
& & double radLat = wgLat / 180.0 * M_PI;
& & double magic = sin(radLat);
& & magic = 1 - ee * magic *
& & double sqrtMagic = sqrt(magic);
& & dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * M_PI);
& & dLon = (dLon * 180.0) / (a / sqrtMagic * cos(radLat) * M_PI);
& & return CLLocationCoordinate2DMake(wgLat + dLat, wgLon + dLon);
// 地球坐标系 (WGS-84) &- 火星坐标系 (GCJ-02)
CLLocationCoordinate2D gcj2wgs(CLLocationCoordinate2D coordinate) {
& & if (outOfChina(coordinate)) {
& & CLLocationCoordinate2D c2 = wgs2gcj(coordinate);
& & return CLLocationCoordinate2DMake(2 * coordinate.latitude - c2.latitude, 2 * coordinate.longitude - c2.longitude);
const double x_M_PI = M_PI * 3000.0 / 180.0;
// 火星坐标系 (GCJ-02) -& 百度坐标系 (BD-09)
CLLocationCoordinate2D bd_encrypt(CLLocationCoordinate2D coordinate) {
& & double x = coordinate.longitude, y = coordinate.
& & double z = sqrt(x * x + y * y) + 0.00002 * sin(y * x_M_PI);
& & double theta = atan2(y, x) + 0.000003 * cos(x * x_M_PI);
& & return CLLocationCoordinate2DMake(z * sin(theta) + 0.006, z * cos(theta) + 0.0065);
// 火星坐标系 (GCJ-02) &- 百度坐标系 (BD-09)
CLLocationCoordinate2D bd_decrypt(CLLocationCoordinate2D coordinate) {
& & double x = coordinate.latitude - 0.0065, y = coordinate.longitude - 0.006;
& & double z = sqrt(x * x + y * y) - 0.00002 * sin(y * x_M_PI);
& & double theta = atan2(y, x) - 0.000003 * cos(x * x_M_PI);
& & return CLLocationCoordinate2DMake(z * sin(theta), z * cos(theta));
& & & & &&百度坐标系是在火星坐标系上进行二次加密,所以当从真实坐标转换到百度坐标时,需要先转换为火星坐标,再转换为百度坐标。火星坐标转换为真实坐标是大概值,因为算法本身是不可逆的!
可能你对以下的内容也感兴趣:
CopyRight & &老罗的博客(一亩三分地).&&All rights reserved.&&&&蜀ICP备号
本网站由作为空间服务商关于网络地图坐标偏移的说明及校准方法
学GIS的都经常需要从网络上下载一些网络地图,问题的关键是因受中国法律的影响,很多网络地图在中国存在人为偏移,典型代表就是谷歌地图。那我们对下载来的影像如何进行校准呢?用插件ArcBruTile的Bing
Aerial图层坐标作为标准坐标在ArcMap里进行校准,因为微软的Bing卫星地图不存在坐标偏移。
& & 为什么说微软的Bing卫星地图不存在坐标偏移?我从太乐地图ArcTiler3.7的帮助文档里复制一段话来进行说明吧。(太乐地图的说法是否正确我不知道,但我目前是相信了)
太乐地图:“为了响应国家信息安全相关法律法规的原因,国内的地图数据提供商对街道数据、标签数据、地形数
据作了一定的偏移处理,且不同区域偏移值不同,与现实坐标存在较大差距,不管是国内还是国外服务器
的相关数据都存在偏移问题。国外服务器的影像数据不存在偏移问题。 不存在偏移问题的地图包括:谷歌卫星地图(国外)、谷歌混合地图(国外);
&#61557; 必应卫星地图; &#61557; 雅虎卫星地图”
。必应地图的坐标系统参数如下图所示,和谷歌地球的坐标参数是一致的:(截图来自太乐地图)
根据太乐地图的说法,我们通过插件“ArcBruTile”调用微软Bing(必应)卫星地图进行进行图像配准是可行的。至于插件“ArcBruTile”的使用方法在此就不再赘述,网络上有很多,不知道的自己在网上搜索一下即可。(如果发现我的方法有疑问的话,欢迎邮箱联系:
,互相学习,共同进步,祝君生活愉快!)
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。为什么谷歌地图定位标记会偏移?_百度知道}

我要回帖

更多关于 谷歌地图偏移补丁 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信