1. 程式人生 > >如何獲取手機使用者的位置資訊

如何獲取手機使用者的位置資訊

移動網際網路會充分挖掘使用者的位置資訊並在這點上展開一系列非常新奇的應用和體驗,谷歌在這點走在了前面。我以前一直以為谷歌是跟中國移動合作取得的資料,看了下面這篇文章我才明白了谷歌原來是“偷”來的資料。轉一下,原理講的很清楚,不得不讚!

在今年初推出的Google Map for Mobile新版本中提供了稱為My Location的功能,不需要GPS的支援,也能在地圖上顯示出當前手機所在的位置。這個功能著實讓人眼前一亮。雖然行動網路本身就可以提供定位的能力,但是Google的My Location並不依賴於行動網路定位能力,完全繞開了運營商的控制。 My Location是怎樣實現的呢?Google網站上介紹了大致的

原理:手機接收到移動基站的訊號,根據基站的資訊可以知道當前處於哪個基站的訊號覆蓋範圍,如果基站的位置是已知的,就可以確定當前的大概位置了。 具體點說,這是一種叫做Cell-Id Positioning Method的技術。GSM網路(3G網路也一樣)覆蓋由Location Area組成,(Location Area是指mobile terminal可以任意移動而不需要進行location update的區域)。Location Area由LAI(Location Area Id)來標識,LAI由MCC,MNC,LAC組成。其中MCC是3位的Mobile Country Code,中國為460;MNC是2位Mobile Network Code,在國家內分配,中國移動為00;LAC為Location Area Code,在network內分配;可見LAI是全世界唯一的。在一個location area中設定一個或多個基站,基站天線的訊號覆蓋一定的區域,稱為cell(小區);根據天線的不同,每個基站可能包含1個或多個cell,定向天線的訊號覆蓋一個扇形範圍,多個天線的扇區為不同的cell。每個cell有自己的Cell-Id,結合LAI和Cell-Id,就可以在全球範圍內唯一確定一個cell。要進行定位,需要有一個cell座標資料庫,根據cell-id來查詢位置資訊。 Google的My Location表示格式為myl:MCC:MNC:LAC:CI。在Google Map for Mobile的about資訊末尾可以看到。如果顯示為myl:n/a,那就是手機不能提供cell-id資訊。很不幸,我正在用的SonyEricsson w810c就不支援:( 下一個問題就是cell座標資料是怎麼來的?行動網路運營商提供,不是太現實。Google不可能與全球所有的運營商達成協議。特別是在中國,凡是涉及精確地理座標的資料都屬於機密範疇,然而我們發現My Location在廣州是可用的,估計其他城市也可以。於是我猜Google是自己採集這些資訊的,例如開輛車周圍轉,記錄各處的cell-id。但有點奇怪的是,在廣州我們發現在天河軟體園得到的位置比較準確,但是在其他地方的就誤差很大,並且表示精確度範圍的圓圈半徑非常大,將半個天河區都包含在內。難道Google只在天河軟體園採集了資料,而其他地方沒有? 最近,一個同事開發了一個程式,利用手機自帶的GPS定位,將cell-id與座標記錄下來。我們討論的時候才恍然大悟,Google很可能就是這樣做的!有些Google Map for Mobile使用者的手機是支援GPS的,當這些使用者執行Google Map時打開了GPS,座標資料以及cell-id就會發送到Google的伺服器,等於有許多使用者在替Google採集資料。在天河軟體園的定位準確,就因為我們(當然也可能有其他人)在這裡試驗Google Map時開啟過GPS。在我們這裡,支援GPS的手機的擁有率不高,同時又使用Google Map的更少,因此Google掌握到的資料很有限。在沒有采集到資料的地方,定位就不準確了。 為了求證,到Google網站上檢視,在Google Mobile的Privacy Policy中找到這樣一段話:If you use location-based products and services, such as Google Maps for mobile, you may be sending us location information. This information may reveal your actual location, such as GPS data, or it may not, such as when you submit a partial address to look at a map of the area
. 在help中又找到一段話:Google takes geo-contextual information [from anonymous GPS-readings, etc] and associates this information with the cell at that location to develop a database of cell locations. 看來我們的猜想是成立的。其實還可以通過做實驗來證明:找一臺支援GPS的手機,到一個定位有非常大誤差的地方,在Google Map中enable GPS。過一段時間後,例如幾天,因為Google處理資料可能有延遲,在關閉GPS的狀態下看My Location,如果定位變得準確了就是Google使用了使用者手機GPS採集的資料。不過我沒有GPS手機,無法做這個實驗。 在網上查詢資料的過程中發現,其實Cell-id定位並不是一項新技術,不過它與Google Map的海量高清晰度地圖結合起來,給業界帶來了震撼。在Treo智慧手機上,2006年就有國內的愛好者開發了
手機定位軟體
,根據cell-id查詢到當前位置,不過位置資訊是地名,而不是經緯度座標;Cell-Id對照地名資訊的資料庫是由使用者補充完善的。在網上搜索一下,也可以找到好幾個開放的cell-id座標資料庫,例如OpenCellID,只不過幾乎都沒有中國大陸的資料。Flickr為了配合ZoneTag(用手機拍照時記錄下cell-id,從而可以知道照片拍攝的位置),還提供了Cell Location API