iOS獲取當前地理位置文字

2021-07-10 07:06:20 字數 4653 閱讀 2497

以下內容摘抄自網路,著作權屬於原作者

發現之前的地圖獲取當前地理位置資訊在deprecated in ios 5.0。已經被蘋果棄之不用了。推薦

使用clgeocoder來替代。發現非常簡單,比之前寫的方法簡單了不少。

地圖的前提是你匯入了mapkit這個庫

#import
先宣告乙個全域性的cllocationmanager物件。

cllocationmanager *_currentloaction;
之後開啟定位功能。

_currentloaction = [[cllocationmanager alloc] init];

_currentloaction.delegate = self;

[_currentloaction startupdatinglocation];

定位結束之後更新當前的位址經緯度等資訊。

#pragma mark - location 

- (void)locationmanager:(cllocationmanager *)manager didfailwitherror:(nserror *)error

- (void)locationmanager:(cllocationmanager *)manager didupdatetolocation:(cllocation *)newlocation fromlocation:(cllocation *)oldlocation ];

}

我稍微解釋一下

_geocoder 這個是我先要宣告的clgeocoder。使用之前要alloc,才能使用。

我剛開始犯了乙個低階錯誤,沒有在viewdidload方法中_geocoder = [[clgeocoder alloc] init];導致一直nil無法出現block的方法。非常簡單吧哈哈。

獲取當前所在地的地理位置資訊需要使用乙個新的類,mkreversegeocoder。這個類在mapkit.framework中。我們把框架加進來,並將標頭檔案匯入就可以用了。

敲了一會**,結果發現這個類ios5.0就不用了。真是的。為了照顧相容性,我們先研究mkreversegeocoder,等下再來研究這個新類,恩,名字叫做clgeocoder,恩,沒拼錯。在corelocation裡面。

先說mkreversegeocoder的用法。(忍不住出來吐個槽,一般看見被劃掉的紅線,一邊敲回車,還真是說不出來的違和啊。)

。。。。。。。。。。。。。。。

表示測試完成了,ios的網路總是假死,一假死,各種需要使用網路的的功能,就不怎好用了。桑心。

mkreversegeocoder的初始化,很簡單。

mkreversegeocoder *geocoder = [[mkreversegeocoder alloc] initwithcoordinate:currentcoordinate2d];

geocoder.delegate = self;

[geocoder start];

呼叫以上**後呢,會自動呼叫反向位址編碼的api。我們這邊使用**來接收。至於**方法麼,我們要實現兩個。

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

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

第乙個方法是獲取反向編碼的。第二個是當反向編碼失敗時,處理錯誤使用的。

我們主要討論第乙個方法。

placemark(mkplacemark類的物件)其實是geocoder(mkreversegeocoder類的物件)的乙個屬性。從geocoder裡面取placemark這個和直接取placemark這個其實區別不大。而我們需要的資訊主要就在這個裡面了。

// 這個字典存放基礎資料

@property (nonatomic, readonly) nsdictionary *addressdictionary;

讓我們試試看,能從這個字典裡面倒出來些什麼東西。

以下是我用這個addressdictionary屬性倒出來的字典。我們分析看看。

注意:上面的這個字典是可以直接轉化為聯絡人的字典的,通過這個abcreatestringwithaddressdictionary屬性。

以下是placemark的其他屬性。大家可以隨意取用。

// address dictionary properties

@property (nonatomic, readonly) nsstring *thoroughfare; // street address, eg. 1 infinite loop

@property (nonatomic, readonly) nsstring *subthoroughfare; // eg. 1

@property (nonatomic, readonly) nsstring *locality; // city, eg. cupertino

@property (nonatomic, readonly) nsstring *sublocality; // neighborhood, common name, eg. mission district

@property (nonatomic, readonly) nsstring *administrativearea; // state, eg. ca

@property (nonatomic, readonly) nsstring *subadministrativearea; // county, eg. santa clara

@property (nonatomic, readonly) nsstring *postalcode; // zip code, eg. 95014

@property (nonatomic, readonly) nsstring *isocountrycode; // eg. us

@property (nonatomic, readonly) nsstring *country; // eg. united states

@property (nonatomic, readonly) nsstring *inlandwater; // eg. lake tahoe

@property (nonatomic, readonly) nsstring *ocean; // eg. pacific ocean

@property (nonatomic, readonly) nsarray *areasofinterest; // eg. golden gate park

注意:我在使用的過程中發現,如果網路假死,則有可能較長時間無法獲得逆向的結果。這一點可能需要大家注意。

哎呀呀呀,差點忘了,ios5下不推薦使用我上面講的一大堆。我們需要用這個clgeocoder類。

使用方法也很簡單。參照如下步驟:

首先建立乙個clgeocoder物件,然後呼叫他的

- (void)reversegeocodelocation:(cllocation *)location completionhandler:(clgeocodecompletionhandler)completionhandler;
方法。按照需要的引數型別傳參。有的筒子會問這個clgeocodecompletionhandler東西怎麼寫?這個其實是ios4之後就被官方大力推薦使用的block,不會用的同學快去看文件吧。

clgeocodecompletionhandler的定義就是這樣的。

typedef

void(^clgeocodecompletionhandler)(nsarray *placemarks, nserror *error);

我們只要寫好乙個block物件傳進去就好了。

以下是使用clgeocoder的參考**。不用**了是不是很開心呢?

clgeocoder* geocoder = [[clgeocoder alloc] init];

[geocoder reversegeocodelocation:newlocation completionhandler:^(nsarray* placemarks, nserror* error)];

//根據經緯度 查詢位址

- (void)getaddress:(nsstring *)alongitude withlatitude:(nsstring *)alatitude withblock:(void(^)(id result))callback

- (nsstring *)addparameterstorequest:(nsmutabledictionary*)parameters else

}nsstring *paramsstring = [paramstringsarray componentsjoinedbystring:@"&"];

return paramsstring;

}

IOS獲取當前地理位置文字

以下內容摘抄自網路,著作權屬於原作者 獲取當前所在地的地理位置資訊需要使用乙個新的類,mkreversegeocoder。這個類在mapkit.framework中。我們把框架加進來,並將標頭檔案匯入就可以用了。敲了一會 結果發現這個類ios5.0就不用了。真是的。為了照顧相容性,我們先研究mkre...

網頁JS獲取當前地理位置

網頁js獲取當前地理位置 省市區 眼看2014又要過去了,翻翻今年的文章好像沒有寫幾篇,忙真的或許已經不能成為藉口了,在忙時間還是有的,就像海綿裡的水擠擠總會有滴。真真的原因是沒有學習過什麼新的技術,工作過程中遇到的問題也不是非常難並且自己認為是沒有什麼可以記錄分享的,大部分都是溫習以前的技術,現在...

獲取當前網路和地理位置

最近在專案上遇到乙個需求,就是需要獲取到當前的網路和地理位置,這樣能夠使使用者的當前位置更加準確,省下更多的資料流量。其實這個需求並不是很難,主要是理清思路,一開始我做的時候就因為沒理好邏輯就做,後來出了乙個小bug,我索性就重新做了一遍,完美的解決了需求。首先邏輯可以分成兩種 1.先判斷網路,再來...