互聯(lián)網(wǎng)不過(guò)是一個(gè)巨大的網(wǎng)絡(luò),上面的每一臺(tái)電腦對(duì)應(yīng)一個(gè) IP 地址,通過(guò)這個(gè) IP 地址,可以知道這個(gè)用戶在什么位置,我們可以通過(guò)查詢 Maxmind GeoIP 數(shù)據(jù)庫(kù) 獲得,Maxmind 還提供了一個(gè) JavaScript 接口讓你在網(wǎng)站上實(shí)現(xiàn)這一功能。
這個(gè)方法(演示)有一個(gè)問(wèn)題,就是說(shuō),你獲得的 IP 地理位置信息未必非常準(zhǔn)確,因?yàn)檫@個(gè) IP 是你的 ISP 分配給你的,你獲得的事實(shí)上是 ISP 的地理位置,另外,如果你使用 VPN,你實(shí)際的得到可能是十萬(wàn)八千里之外的地方了。
通過(guò) IP 地址獲取用戶地理位置還有一個(gè)棘手的問(wèn)題,就是安全和隱私問(wèn)題,畢竟,并不是每個(gè)用戶都愿意自己的地理位置信息被別人知道,鑒于此,人們開發(fā)了很多技術(shù),Google Gears 擁有一個(gè) Geo-Location 服務(wù),Plazes 幫助你保存你的位置,而 Yahoo Fire Eagle 算得上這類技術(shù)中最順手的一個(gè)。然而這些技術(shù)共同的問(wèn)題是,它們要求用戶要么安裝一個(gè)插件,要么需要訪問(wèn)特定的 Web 服務(wù),這有些麻煩。
W3C 有一個(gè) Geo-Location API 可以幫助瀏覽器制造商,在瀏覽器中集成地理信息功能。Firefox 3.5 以上的瀏覽器支持 W3C Geo-LocationAPI,同樣支持該 API 的還有 iPhone 上的 Safari 瀏覽器(需要 OS3.0 以上)。需要通過(guò)瀏覽器查詢自己地理位置的用戶,在瀏覽器中,會(huì)顯示一個(gè)對(duì)話條,請(qǐng)求你的授權(quán)。如下圖所示:
以下是請(qǐng)求使用該功能的代碼:
下面的演示,可以很好地演示上面兩種地理信息獲取技術(shù)的不同,可以看到,他們?cè)?a >測(cè)量用戶地理位置方面有很多不同。
將經(jīng)度/維度信息轉(zhuǎn)換為地位,稱為 “反 Geo-Location”,網(wǎng)絡(luò)上有很多這類服務(wù)可以使用,其中最著名的是 the geo-names Web service, 但它仍有幾個(gè)問(wèn)題,比如,它的結(jié)果是以美國(guó)為中心的。另一個(gè)可免費(fèi)使用,且支持全球信息,但知道的人并不多的服務(wù)來(lái)自一個(gè)讓人有點(diǎn)意外的地方,Flickr。Flickr 的 flickr.places.findByLatLon 服務(wù)可以根據(jù)經(jīng)緯度信息返回地名,你可以在 app explorer 做下體驗(yàn),但目前最簡(jiǎn)單的方法是使用 Yahoo Query Language ( Yahoo 查詢語(yǔ)言,簡(jiǎn)稱 YQL). YQL 的樣子如下:
使用 YQL 查詢語(yǔ)言,你可以得到 XML 或 JSon 格式的數(shù)據(jù),下圖是在 JavaScript 中是使用該查詢語(yǔ)言的例子:
結(jié)合上面的例子,在反 Geo-Location 查詢的幫助下,我們得到了詳細(xì)的地名信息:
經(jīng)緯度雖然可以定位地球上的一個(gè)位置,但經(jīng)緯度有時(shí)候容易引起歧義,為了解決這個(gè)問(wèn)題,Yahoo 和 Flickr (Twitter 很快也會(huì)支持)支持另一種定位方法,叫 Where On Earth Identifier (簡(jiǎn)稱 WOEID) 。使用該方法,我們可以很容易獲取來(lái)自某個(gè)區(qū)域的 Flickr 圖片。
這樣幾句 JavaScript 代碼就可以顯示來(lái)自指定地理位置的圖片:
這些代碼還可以打包成函數(shù),下面的代碼,將顯示來(lái)自巴黎的10幅照片,你可以自己在 YQL console 中體驗(yàn):
假如你想獲得一段文字,或者一個(gè)網(wǎng)頁(yè)內(nèi)容所提到的地名的地理位置的信息,Yahoo 提供了一個(gè)很好的服務(wù),叫 Placemaker。從 Yahoo 那里獲取一個(gè) developer key 就可以使用該服務(wù)了。只需創(chuàng)建一個(gè)發(fā)布表單發(fā)布到 http://wherein.yahooapis.com/v1/document
,將 Developer Key 以 appid 發(fā)布,需要查詢的文字以 documentContent 發(fā)布,將文字類型以 documentType 發(fā)布,同時(shí)用 outputType 定義返回?cái)?shù)據(jù)類型,如下:
你也可以在這里親自體驗(yàn)一下,使用 PHP 調(diào)用該 API ,甚至可以對(duì)輸出數(shù)據(jù)的格式進(jìn)行設(shè)置。這里還有一個(gè)使用 PlaceMaker 設(shè)計(jì) GeoMaker 服務(wù),簡(jiǎn)單輸入文字或 URL,選擇位置,就可以返回地圖。
因?yàn)檫€可以在 JavaScript 中通過(guò) YQL 使用 PlaceMaker,我們可以通過(guò)幾段客戶端腳本使用同樣的功能:
你需要三樣?xùn)|西,一段位于某個(gè) HTML 對(duì)象中的,包含地理位置的文字,一個(gè) Google Maps API Key (申請(qǐng)) 以及以下代碼:
在線地圖有很多,Google Map 是其中的領(lǐng)先者,除了 Google,Yahoo, 微軟都提供地圖服務(wù),還有一個(gè)叫做 Open Street Maps 的開放地圖服務(wù),在上次海地地震救援中被派上用場(chǎng)。在網(wǎng)頁(yè)中插入交互地圖最簡(jiǎn)單的方法是使用 Mapstraction,它提供一個(gè) JavaScript 庫(kù),24ways 曾發(fā)表過(guò)一篇很好的介紹文章。如果你只想在網(wǎng)頁(yè)上放上你的地圖,指示你的位置,而不想使用太多 JavaScript, Google static maps API 是最好的選擇,它會(huì)生成靜態(tài)地圖,以下代碼可以將這個(gè)靜態(tài)地圖插入你的網(wǎng)頁(yè)(Google 還提供了一個(gè)創(chuàng)建靜態(tài)地圖的工具 ):
聯(lián)系客服