<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>安特网 &#187; 电子地图</title>
	<atom:link href="http://www.anttna.com/archives/tag/%e7%94%b5%e5%ad%90%e5%9c%b0%e5%9b%be/feed" rel="self" type="application/rss+xml" />
	<link>http://www.anttna.com</link>
	<description>www.anttna.com</description>
	<lastBuildDate>Mon, 12 Dec 2011 02:35:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>完美解决Google电子地图偏移问题</title>
		<link>http://www.anttna.com/archives/468.html</link>
		<comments>http://www.anttna.com/archives/468.html#comments</comments>
		<pubDate>Wed, 13 Jan 2010 00:45:22 +0000</pubDate>
		<dc:creator>ant</dc:creator>
				<category><![CDATA[LBS技术]]></category>
		<category><![CDATA[偏移修正]]></category>
		<category><![CDATA[地图偏移]]></category>
		<category><![CDATA[电子地图]]></category>
		<category><![CDATA[google maps]]></category>

		<guid isPermaLink="false">http://www.anttna.com/?p=468</guid>
		<description><![CDATA[受中国的一些政策法规的限制，Google电子地图必需加上偏移。其实，不光是google地图，国内所有做地图的公司的产品都是要加上偏移的。各公司在自己的客户端上再加上修正算法，从而保证使用他们的产品不会产生偏移。 注意:2010/03/31 因Google更换了API，本文所提的方法已经失效。 请使用本站的偏移修正接口： http://www.anttna.com/goffset/goffset1.php?lat=纠偏前的纬度值&#38;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获取偏移值的方法，接口地址为 http://ditu.google.cn/maps/vp?spn=0.0,0.0&#38;z=18&#38;vp=xxxx,xxxx ，只要提交同样的经纬度到该接口，返回的结果里就包含了该经纬度的偏移值。 为了简化操作，ant封装了该接口，可以提交经纬度到接口 http://www.anttna.com/goffset/goffset.php?lat=xxx&#38;lon=xxx 直接获得偏移值。返回格式为: zoom,offset_x,offset_y zoom: 这个值在做坐标运算时需要用到。 offset_x: 指定经纬度X方向的偏移值 offset_y:指定经纬度Y方向的偏移值 有了这三个值就可以在google map里修正坐标了 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; } [...]]]></description>
			<content:encoded><![CDATA[<p>受中国的一些政策法规的限制，Google电子地图必需加上偏移。其实，不光是google地图，国内所有做地图的公司的产品都是要加上偏移的。各公司在自己的客户端上再加上修正算法，从而保证使用他们的产品不会产生偏移。<span id="more-468"></span></p>
<h2><span style="color: #ff0000;">注意:2010/03/31 因Google更换了API，本文所提的方法已经失效。</span></h2>
<p><span style="color: #ff0000;">请使用本站的偏移修正接口： http://www.anttna.com/goffset/goffset1.php?lat=纠偏前的纬度值&amp;lon=纠偏前的经度值</span></p>
<p><strong>Google电子地图偏移的原理</strong></p>
<p><strong> </strong>google 地图在显示指定经纬度(lat,lon)的坐标点(x,y)点时，根据偏移函数算出该点的偏移值(a,b)，把该点的坐标减去偏移值后的结果(x-a,y-b)显示在电子地图上。</p>
<p><strong>Google电子地图偏移的修正方法</strong></p>
<p><strong></strong>知道了原理后，修正的方法就很简单了：用同样的方法获取该点的偏移值(a,b)，预先给定位点加上这个偏移值，把结果(x+a,y+b)提交给google map,google map再经过上面的算法处理后(x+a-a,y+b-b)，显示在地图上的就是(x,y)了。</p>
<p><strong>如何得到该点的偏移值(a,b)?</strong></p>
<p><strong></strong>网上已经有人研究出了google获取偏移值的方法，接口地址为 http://ditu.google.cn/maps/vp?spn=0.0,0.0&amp;z=18&amp;vp=xxxx,xxxx ，只要提交同样的经纬度到该接口，返回的结果里就包含了该经纬度的偏移值。</p>
<p>为了简化操作，ant封装了该接口，可以提交经纬度到接口 http://www.anttna.com/goffset/goffset.php?lat=xxx&amp;lon=xxx 直接获得偏移值。返回格式为: zoom,offset_x,offset_y</p>
<p>zoom: 这个值在做坐标运算时需要用到。</p>
<p>offset_x: 指定经纬度X方向的偏移值</p>
<p>offset_y:指定经纬度Y方向的偏移值</p>
<p>有了这三个值就可以在google map里修正坐标了</p>
<pre class="brush: jscript; title: ;">
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);//原经纬度点
//通过接口http://www.anttna.com/goffset/goffset.php?lat=xxx&amp;lon=xxx获得的数据
var zoom=18;
var offset_x=100;
var offset_y=200;
//修正经纬度
point=convertCoord(point,zoom,offset_x,offset_y);
//
</pre>
<p>效果测试</p>
<p>之前和zhjtan讨论过<a href="http://www.anttna.com/guestbook/comment-page-2#comment-362" target="_blank">关于google map的偏移问题</a>，这里仍然用该经纬度(22.535076,114.021229)做测试。</p>
<p>未修正的地图（电子地图和卫星地图不一致）</p>
<p><a href="http://www.anttna.com/wp-content/uploads/2010/01/gmapoffset1.png" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-full wp-image-478" title="gmapoffset1" src="http://www.anttna.com/wp-content/uploads/2010/01/gmapoffset1.png" alt="" width="500" height="300" /></a></p>
<p><a href="http://www.anttna.com/wp-content/uploads/2010/01/gmapoffset2.png" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-full wp-image-479" title="gmapoffset2" src="http://www.anttna.com/wp-content/uploads/2010/01/gmapoffset2.png" alt="" width="500" height="300" /></a></p>
<p>下面是修正后的地图（电子地图和卫星地图一致）</p>
<p><a href="http://www.anttna.com/wp-content/uploads/2010/01/gmapoffset3.png" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-full wp-image-480" title="gmapoffset3" src="http://www.anttna.com/wp-content/uploads/2010/01/gmapoffset3.png" alt="" width="500" height="300" /></a></p>
<p>从测试效果来看，使用该修正方法可以完美的解决google地图偏移的问题。</p>
<p><p><script type="text/javascript"><!--
google_ad_client = "pub-4525448440186199";
google_ad_slot = "0511824612";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anttna.com/archives/468.html/feed</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
	</channel>
</rss>

