其實使用iphone的定位系統開發軟體是很簡單的一件事,下面我們就來認識一下iphone的定位系統的使用。
1.getting the user』s current location
獲取使用者當前位置。
獲取位置的方式有三種:gps, cell tower triangulation(蜂窩站點), 和
wi-fi positioning service (wps).其中gps是最精確的定位方式,但是在第一代iphone上沒有。gps是通過讀取很多衛星微波訊號來確定當前位置的。蜂窩站點通過 iphone周圍的站點計算出來的,在蜂窩站點密集的地方使用這種技術可以達到乙個準確的值,比如在城市但在蜂窩站點不密集的地方效果就沒那麼好了。最後乙個wps使用的是連線到wi-fi網路的ip位址來確定位置,這將會有較大的誤差。這三種方式都會消耗大量的電。怎麼才能即實現定位功能又省電呢?下面的方法就可以解決:當使用core location時,可以選擇精確度,謹慎的選擇你所需要的準確度,可以幫助你省很多電。core location使用的技術隱藏在應用程式中。我們無需選擇使用gps、蜂窩站點技術還是wps,我們只要告訴它我們需要的準確度它會自己決定選什麼技術來滿足我們的需求。
2.the location manager
core location的介面是很容易使用的。主要用到的類是cllocationmanager,就是通常說的location manager。為了使用core location我們需要建立location manager的實體:
cllocationmanager *locationmanager = [[cllocationmanager alloc] init];
這樣我們就建立了 location manager的實體,但是我們還沒有開始定位。我們需要指派乙個**給location manager。當定位資訊改變時location manager將呼叫**方法。定位的過程會花一段時間平均幾秒鐘。**方法必須遵循cllocationmanagerdelegate協議。
3.setting the desired accuracy
設定**後,你還要設定需要的準確度。就像我們剛剛說的精確度越高越耗電。如果你只是要是應用程式確定是哪個國家或是哪個州那麼就不要設定很高的精確度。記住一點有時候你並不能得到你需要的精確度。
下面說乙個設定**和設定精確度的例子:
locationmanager.delegate = self;
locationmanager.desiredaccuracy = kcllocationaccuracybest;
精確度使用的是乙個double型別的常量。單位是公尺,所以如果你設定desiredaccuracy=10那麼精確度就是10公尺,這就告訴 location manager盡可能達到10公尺的精確度。還可以設定為其他常量:kcllocationaccuracybest,
you can also use kcllocationaccuracynearesttenmeters, kcllocationaccuracy
hundredmeters, kcllocationaccuracykilometer, and kcllocationaccuracythree
kilometers.
4.setting the distance filter
預設情況是這樣的,每當位置改變時location manager就呼叫一次**。通過設定distance filter可以實現當位置改變超出一定範圍時location manager才呼叫相應的**方法。這樣可以達到省電的目的。
例如:locationmanager.distancefilter = 1000.0f;
如果設定預設值:
locationmanager.distancefilter = kcldistancefilternone;
5.starting the location manager
開始定位
當你轉備好為定位消耗電池時我們可以呼叫
[locationmanager startupdatinglocation];
來告訴 location manager開始定位
6.using the location manager wisely
如果你只需要確定當前位置而不需要進一步定位,當location manager查詢到當前位置時需要通知**停止定位。
停止方法: [locationmanager stopupdatinglocation];
7.the location manager delegate
location manager必須遵守cllocationmanagerdelegate協議,cllocationmanagerdelegate協議定義了兩個方法,並且這兩個方法都是可選的。其中乙個方法是當確定當前位置或是位置資訊改變時呼叫。另乙個方法是當遇到錯誤資訊時呼叫
8.getting location updates
當location manager想通知它的**當前位置時,它會呼叫
locationmanager:didupdatetolocation:fromlocation: 方法。
這個方法有3個引數第乙個引數location manager。第二個引數是乙個cllocation物件用來確定當前位置,第三個是cllocation 物件用來確定最近一次更新是的位置。該方法呼叫時,先前的location物件會被置空。
6.getting latitude and longitude using cllocation
經緯度
位置資訊是通過使用cllocation類的例項從location manager那裡得到的。這個類有5各屬性。latitude和longitude被封裝在coordinate屬性中。
獲取方式如下:
cllocationdegrees latitude = thelocation.coordinate.latitude;
cllocationdegrees longitude = thelocation.coordinate.longitude;
cllocation物件還可以告訴你精確度。
horizontalaccuracy屬性描述調整的中心點。horizontalaccuracy值越大越不精確。
cllocation 還有乙個叫altitude的屬性用來表示海拔
cllocationdistance altitude = thelocation.altitude;
每乙個cllocation物件都有乙個叫verticalaccuracy的屬性來判斷精確度。海拔數值可能會有verticalaccuracy大小的誤差,當verticalaccuracy為負值時,那是core location在通知你不能獲取海拔高度。
cllocation的另乙個屬性timestamp用來告訴location manager是什麼時候定位的。cllocation還有乙個例項方法來告訴你的兩個cllocation物件之間的距離。這個方法叫:getdistancefrom:
它是這樣工作的:
cllocationdistance distance = [fromlocation getdistancefrom:tolocation];
返回兩個時間段內的距離,有時候它是不考慮海拔的,所以要自己計算距離。
7.error notifications
如果core location不能指定你當前的位置,它將呼叫。cllocation的第二個**方法:locationmanager:didfailwitherror:,最常見的是使用者取消使用定位資訊。
iPhone 定位到當前位置
在地圖上顯示自己當前所在的位置。userloactiontestviewcontroller.m userloactiontest created by mir on 11 8 14.import userloactiontestviewcontroller.h implementation use...
iphone定位 基本知識
iphone定位 基本知識 找到乙個關於iphone定位的的資料,收藏一下 其實使用iphone的定位系統開發軟體是很簡單的一件事,下面我們就來認識一下iphone的定位系統的使用。1.getting the user s current location 獲取使用者當前位置。獲取位置的方式有三種 ...
iphone定位 基本知識
找到乙個關於iphone定位的的資料,收藏一下 其實使用iphone的定位系統開發軟體是很簡單的一件事,下面我們就來認識一下iphone的定位系統的使用。1.getting the user s current location 獲取使用者當前位置。獲取位置的方式有三種 gps,cell tower...