Chinaunix首页 | 论坛 | 博客
  • 博客访问: 983225
  • 博文数量: 152
  • 博客积分: 4937
  • 博客等级: 上校
  • 技术积分: 1662
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-05 16:55
文章分类

全部博文(152)

文章存档

2013年(12)

2012年(6)

2011年(58)

2010年(43)

2009年(1)

2008年(15)

2007年(17)

我的朋友

分类: WINDOWS

2011-10-13 15:14:57

 

完美解决Google电子地图偏移问题

2010年1月13日 发表评论 阅读评论 14,272 views

受中国的一些政策法规的限制,Google电子地图必需加上偏移。其实,不光是google地图,国内所有做地图的公司的产品都是要加上偏移的。各公司在自己的客户端上再加上修正算法,从而保证使用他们的产品不会产生偏移。

注意:2010/03/31 因Google更换了API,本文所提的方法已经失效。

请使用本站的偏移修正接口: 纠偏前的纬度值&lon=纠偏前的经度值

Google电子地图偏移的原理

google 地图在显示指定经纬度(lat,lon)的坐标点(x,y)点时,根据偏移函数算出该点的偏移值(a,b),把该点的坐标减去偏移值后的结果(x-a,y-b)显示在电子地图上。

Google电子地图偏移的修正方法

知道了原理后,修正的方法就很简单了:用同样的方法获取该点的偏移值(a,b),预先给定位点加上这个偏移值,把结果(x a,y b)提交给google map,google map再经过上面的算法处理后(x a-a,y b-b),显示在地图上的就是(x,y)了。

如何得到该点的偏移值(a,b)?

网上已经有人研究出了google获取偏移值的方法,接口地址为 ,只要提交同样的经纬度到该接口,返回的结果里就包含了该经纬度的偏移值。

为了简化操作,ant封装了该接口,可以提交经纬度到接口 直接获得偏移值。返回格式为: zoom,offset_x,offset_y

zoom: 这个值在做坐标运算时需要用到。

offset_x: 指定经纬度X方向的偏移值

offset_y:指定经纬度Y方向的偏移值

有了这三个值就可以在google map里修正坐标了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function convertCoord(vertex,zoom,offsetX,offsetY)
 {
 var projection = gMap.getCurrentMapType().getProjection();
var point = projection.fromLatLngToPixel(vertex, zoom);
 point = new GPoint(point.x offsetX, point.y offsetY);
 vertex = projection.fromPixelToLatLng(point, zoom);
 return vertex;
 }
var point = new GLatLng(lat,lng);//原经纬度点
//通过接口获得的数据
var zoom=18;
var offset_x=100;
var offset_y=200;
//修正经纬度
point=convertCoord(point,zoom,offset_x,offset_y);
//

效果测试

之前和zhjtan讨论过关于google map的偏移问题,这里仍然用该经纬度(22.535076,114.021229)做测试。

未修正的地图(电子地图和卫星地图不一致)

下面是修正后的地图(电子地图和卫星地图一致)

从测试效果来看,使用该修正方法可以完美的解决google地图偏移的问题。

阅读(43121) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~