iOS 定位 基礎

2021-06-09 13:34:51 字數 2699 閱讀 2733

原文 :

ios中的core location提供了定位功能,能定位裝置的當前座標,同時能得到裝置移動資訊。因為對定位裝置的輪詢是很耗電的,所以最好只在非常必要的前提下啟動。

其中,最重要的類是cllocationmanager,定位管理。

其定位有3種方式:

1,gps,最精確的定位方式,貌似iphone1是不支援的。

2,蜂窩基站三角定位,這種定位在訊號基站比較秘籍的城市比較準確。

3,wifi,這種方式貌似是通過網路運營商的資料庫得到的資料,在3種定位種最不精確

使用方式:

1,引入corelocation的包,一般的預設模板裡是沒有的,所以需要手動匯入。

2,通過啟動cllocationmanager來啟動定位服務,因為定位資訊是需要輪詢的,而且對於程式來說是需要一定時間才會得到的,所以翠玉lcationmanager的操作大多都給委託來完成。

載入locationmanager的**:

[plain]view plain

copy

cllocationmanager *locationmanager = [[cllocationmanager alloc] init];//建立位置管理器  

locationmanager.delegate=self;  

locationmanager.desiredaccuracy=kcllocationaccuracybest;  

locationmanager.distancefilter=1000.0f;  

//啟動位置更新  

[locationmanager startupdatinglocation];  

desiredaccuracy為設定定位的精度,可以設為最優,裝置會自動用最精確的方式去定位。

distancefilter是距離過濾器,為了減少對定位裝置的輪詢次數,位置的改變不會每次都去通知委託,而是在移動了足夠的距離時才通知委託程式,它的單位是公尺,這裡設定為至少移動1000再通知委託處理更新。

startupdatinglocation就是啟動定位管理了,一般來說,在不需要更新定位時最好關閉它,用stopupdatinglocation,可以節省電量。

對於委託cllocationmanagerdelegate,最常用的方法是:

- (void)locationmanager:(cllocationmanager *)manager   

didupdatetolocation:(cllocation *)newlocation   

fromlocation:(cllocation *)oldlocation;

這個方法即定位改變時委託會執行的方法。

可以得到新位置,舊位置,cllocation裡面有經度緯度的座標值,

同時cllocation還有個屬性horizontalaccuracy,用來得到水平上的精確度,它的大小就是定位精度的半徑,單位為公尺。

如果值為-1,則說明此定位不可信。

另外委託還有乙個常用方法是

- (void)locationmanager:(cllocationmanager *)manager   

didfailwitherror:(nserror *)error ;

當定位出現錯誤時就會呼叫這個方法。

位址翻譯問題 :

corelocation中得到的定位資訊都是以經度和緯度等表示的地理資訊,很多時候我們需要把它反向編碼成普通人能讀懂的地理位置描述如:x國xx市***區***街道xx號,這就需要用到mapkit中的乙個地理位置反向編碼工具:mkreversegeocoder,

用法:1,首先要實現協議mkreversegeocoderdelegate,因為將座標資訊發到伺服器再反回來需要一定的時間,所以為了防止阻塞,發出資訊後並不知到什麼時候會返回資訊,資訊返回時會通知委託方法。這裡實現這個類主要時為了實現2個方法如下:

[plain]view plain

copy

- (void)reversegeocoder:(mkreversegeocoder *)geocoder didfailwitherror:(nserror *)error  

- (void)reversegeocoder:(mkreversegeocoder *)geocoder didfindplacemark:(mkplacemark *)placemark  

didfailwitherror這個方法是來處理返回錯誤資訊的,didfindplacemark則是地理資訊返回了,地理資訊包含在placemark裡面,此物件中包含國家,城市,區塊,街道等成員變數。

2,然後可以init乙個反向編碼器,然後發出請求了:

[plain]view plain

copy

mkreversegeocoder *reversegeocoder =[[mkreversegeocoder alloc] initwithcoordinate:coordinate];  

nslog(@"%g",coordinate.latitude);  

nslog(@"%g",coordinate.longitude);  

reversegeocoder.delegate = self;  

[reversegeocoder start];  

mkreversegeocoder除了start方法,還有cancel方法來取消請求。

iOS系統定位基礎使用

這次來坑一下系統定位。總是去之前的專案粘 也不太爽,不如來部落格來粘嘍 首先我一般習慣在.h檔案中寫上 和屬性 兩個類,乙個 乙個全域性的物件,方便之後的使用 import 定位類 import import inte ce viewcontroller uiviewcontroller prope...

IOS 定位服務

ios中的core location提供了定位功能,能定位裝置的當前座標,同時能得到裝置移動資訊。因為對定位裝置的輪詢是很耗電的,所以最好只在非常必要的前提下啟動。其中,最重要的類是cllocationmanager,定位管理。其定位有3種方式 1,gps,最精確的定位方式,貌似iphone1是不支...

iOS 定位服務

過年後第一次來上班,那麼我們來說說ios上的定位服務 首先說定位共分三種方法,第一利用wifi,第二是移動蜂窩網路,第三是利用gps 然後是ipod touch上是不具備gps模組的,所以不能利用gps進行定位 最後想說的是,因為老闆不相信iphone可以利用gps,所以下面的例子可以在關閉wifi...