<?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>JerryQu的小站 &#187; gears</title>
	<atom:link href="http://www.qgy18.com/tag/gears/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.qgy18.com</link>
	<description></description>
	<lastBuildDate>Tue, 16 Mar 2010 03:42:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>使用Gears获取当前地理位置</title>
		<link>http://www.qgy18.com/2009/09/using_geolocation/</link>
		<comments>http://www.qgy18.com/2009/09/using_geolocation/#comments</comments>
		<pubDate>Sat, 05 Sep 2009 15:36:57 +0000</pubDate>
		<dc:creator>Jerry Qu</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[gears]]></category>

		<guid isPermaLink="false">http://www.qgy18.com/?p=156</guid>
		<description><![CDATA[晚上在Google Code上闲逛，发现google gears从0.4版开始新增了一个获取当前地理位置的Geolocation API。试用了一下，居然准确地找到了我的当前位置，很神奇～ 相信大家对Google Gears都已经很熟悉了，三大主要功能：本地存储DataBase、本地服务器LocalServer、任务池WorkerPool，外加一个桌面相关功能DeskTop。如果对Gears的这几个特性不是很了解，可以参看老六写的这篇文章。在我这篇文章里... ]]></description>
			<content:encoded><![CDATA[<p>晚上在Google Code上闲逛，发现google gears从0.4版开始新增了一个获取当前地理位置的<a href="http://code.google.com/apis/gears/api_geolocation.html">Geolocation API</a>。试用了一下，居然准确地找到了我的当前位置，很神奇～<img src="http://www.qgy18.com/wp-content/401705e0-e662-44bc-9099-72c5e4ad7ed7.JPG" alt="401705e0-e662-44bc-9099-72c5e4ad7ed7" title="401705e0-e662-44bc-9099-72c5e4ad7ed7" width="326" height="249" class="alignright size-full wp-image-157" /></p>
<p>相信大家对Google Gears都已经很熟悉了，三大主要功能：本地存储DataBase、本地服务器LocalServer、任务池WorkerPool，外加一个桌面相关功能DeskTop。如果对Gears的这几个特性不是很了解，可以参看老六写的<a href="http://www.welefen.com/2008/09/20/gears/">这篇文章</a>。在我这篇文章里只讨论Geolocation API。</p>
<p>这个API使用起来很简单，下面简单的列一下：</p>
<div class="hl-surround"><div class="hl-main"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">geo</span><span style="color: Gray;"> = </span><span style="color: Blue;">factory</span><span style="color: Gray;">.</span><span style="color: Blue;">create</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">beta.geolocation</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">//创建geolocation对象</span><span style="color: Gray;"><br /></span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">okCallback</span><span style="color: Gray;"> = </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">d</span><span style="color: Olive;">){</span><span style="color: Gray;"><br />&nbsp; </span><span style="color: Blue;">alert</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">当前位置(纬度，经度): </span><span style="color: #8b0000;">'</span><span style="color: Gray;"> + </span><span style="color: Blue;">d</span><span style="color: Gray;">.</span><span style="color: Blue;">latitude</span><span style="color: Gray;"> + </span><span style="color: #8b0000;">'</span><span style="color: Red;">,</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> + </span><span style="color: Blue;">d</span><span style="color: Gray;">.</span><span style="color: Blue;">longitude</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br /></span><span style="color: Olive;">}</span><span style="color: Gray;">;<br /></span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">errorCallback</span><span style="color: Gray;"> = </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">err</span><span style="color: Olive;">){</span><span style="color: Gray;"><br />&nbsp; </span><span style="color: Blue;">alert</span><span style="color: Olive;">(</span><span style="color: Blue;">err</span><span style="color: Gray;">.</span><span style="color: Blue;">message</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br /></span><span style="color: Olive;">}</span><span style="color: Gray;">;<br /></span><span style="color: Blue;">geo</span><span style="color: Gray;">.</span><span style="color: Blue;">getCurrentPosition</span><span style="color: Olive;">(</span><span style="color: Blue;">okCallback</span><span style="color: Gray;"> , </span><span style="color: Blue;">errorCallback</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></div></div>
<p>基本就是这样了，在这之前创建factory以及获得permission的代码就不贴了，<a href="http://www.qgy18.com/lab/gears/gears_mini.js">看下源码</a>就OK了。</p>
<p>另外，随手抓包看了下这个API实现的原理，其实就是post当前用户的一些信息给google服务器（我这里，post的数据有wifi的ssid，信号强度啥的），服务器就会返回当前的位置，这个技术上没啥特别的，关键在于数据的丰富程度与是否精确。</p>
<blockquote><p>
<strong>request:</strong><br />
<strong>post</strong> http://www.google.com/loc/json<br />
<strong>data</strong> { &#8220;access_token&#8221; : &#8220;2:FIcsRNHXKylSLYpZ:N7RPZxjyMIX4AiMb&#8221;, &#8220;host&#8221; : &#8220;test.*.*.com&#8221;, &#8220;radio_type&#8221; : &#8220;unknown&#8221;, &#8220;request_address&#8221; : false, &#8220;version&#8221; : &#8220;1.1.0&#8243;, &#8220;wifi_towers&#8221; : [ { "mac_address" : "00-*-*-*-*-ea", "signal_strength" : -73, "ssid" : "***" }, { "mac_address" : "00-*-*-*-*-aa", "signal_strength" : -80, "ssid" : "*-*" }, { "mac_address" : "00-*-*-*-*-ba", "signal_strength" : -44, "ssid" : "*-*" } ] }</p>
<p><strong>response:</strong><br />
{&#8220;location&#8221;:{&#8220;latitude&#8221;:40.050772,&#8221;longitude&#8221;:116.308348,&#8221;accuracy&#8221;:150.0}}
</p></blockquote>
<p>大家有空也可以试一试，看Gears能不能找到你的位置（需要先安装Google Gears，Chrome已经内置了Gears）。<a href="http://www.qgy18.com/lab/gears/">点这里</a></p>
<p><strong>Update：</strong><a href="https://developer.mozilla.org/En/Using_geolocation">firefox3.5+已经内置了geolocation</a>，所以修改了一下Demo，在firefox3.5+中不需要安装Gears也可以用了，具体实现还是看Demo吧～另外，Gears几大特性逐渐被各大浏览器所内置，Gears也算功德圆满，<a href="http://www.cnbeta.com/articles/104653.htm">不久将会退出历史的舞台</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qgy18.com/2009/09/using_geolocation/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
