目前智慧手機的使用已經越來越普遍,手機定位也是手機上的一個核心基礎功能。舉一個常見的應用如叫車,司機需要知道你在哪裡,同時打車軟體也需要基於司機和乘客的位置規劃一條路線,讓司機更高效的行駛到使用者這裡。這就是典型的定位服務的應用。當然,除去這種應用,使用者位置本身的展示,也是地圖產品中不可缺少的。那麼app是如何得知當前裝置所處的位置的呢?
通常智慧手機有以下兩種定位方式:
一,呼叫系統級定位能力:
無論哪個系統(IOS、安卓、WP)都提供了一套系統級定位能力,這樣的定位能力,對應著是一套系統級API,這個API一般來說,總是會有如下幾個
精度的選項:
高精度:能搜到GPS衛星,則使用GPS定位,否則,則使用WIFI定位,如果WIFI和GPS都無法定位成功,只能根據基站來給出定位結果了。
平衡功耗:禁用GPS(因為它非常耗電),優先使用WIFI,如果WIFI不可用,則用基站來進行定位。
低功耗(被動定位):根據不同系統的規定,實現方式也不同,但大體上都是共享其他app的定位結果,即其他app以高精度、平衡功耗的方式得到位置,那麼這個位置也一併推送給當前使用“低功耗定位”的app,也就是該app不消耗額外的能耗,就完成了定位。
當然,這種系統級定位能力是有著軟肋的,軟肋在於以下兩點:①在基站、WIFI定位能力上,系統定位能力取決於系統自己在這方面投入資料收集推算的能力,這個是參差不齊的。舉個簡單的例子,百度和高德在中國採集了成百上千個公共場所的室內定位資訊,使之能達到米級的室內定位,蘋果做了嗎?谷歌做了嗎?微軟做了嗎?他們怎麼和國內的服務商拼效果?
二、呼叫第三方定位SDK
對於可以公開讀取基站、WIFI資訊的Android手機系統,國內的百度、高德等地圖廠商自行實現了定位SDK,該定位SDK的作用就是通過系統介面讀取到原始定位資訊,然後藉助於各家自行部署維護的資料庫,查詢到當前掃描到的基站、WIFI的位置,最終計算出更準確的定位結果,通過SDK的介面,返回給開發者。這麼做的好處,在於能夠讓app的定位能力脫離對手機系統的依賴。
舉個例子,一個app他如果只是呼叫系統定位介面,那麼在行貨手機,由於手機廠商已經把定位的網路伺服器重定向為國內定位服務商,所以肯定可以定位,但是在水貨手機上因為系統底層是直接連google伺服器的,就會無法定位。但使用者就是上帝,出現了這個事情在使用者看來,就是不能接受的,為了保證app在所有手機上都可以定位,開發者就會不得不使用第三方的獨立定位SDK。