所謂地理編碼,指的是通過地名獲取位置資訊,例如經緯度、詳細位址等。
所謂反地理編碼,指的是通過經緯度、海拔等資訊獲取地理位置資訊。
在ios上使用地理編碼和反地理編碼,如果是手動輸入經緯度,是不需要獲取使用者授權的,但是一般是獲取使用者的經緯度,然後再通過地理編碼實現精確定位,因此需要授權,本文因為是單獨講解地理編碼的相關知識,因此採用手動輸人經緯度,不再贅述授權的**。
①匯入框架:
#import
②新建clgeocoder物件:
@property (strong, nonatomic) clgeocoder *gcoder;
clgeocoder *coder = [[clgeocoder alloc] init];
self.gcoder = coder;
【地理編碼】
③呼叫物件的geocodeaddressstring:completionhandler方法,傳入乙個字串地名,返回的物件為地標陣列。
一般情況下,地標陣列中只有乙個元素,通過firstobject或者lastobject得到乙個地標。
每個地標都有許多個屬性,列印乙個地標,可以發現其中的屬性過於複雜,其中比較有用的屬性還是通過地標類clplacemark的標頭檔案,比較重要的列舉如下:
location:位置資訊,可以得到經緯度、海拔等,上節有介紹。
city:城市名
name:完整地名
addressdictionary:這是乙個字典,資料如下
其中的formatteraddresslines是格式化的位址,圓括號表示的陣列,其中的元素是字串。
下面的**把經緯度和格式化的位址獲取並輸出,self開頭的那些成員屬性是textfield,用於顯示。
nsstring *addressstr = self.addressview.text;
if(addressstr == nil || addressstr.length == 0)
[self.gcoder geocodeaddressstring:addressstr completionhandler:^(nsarray *placemarks, nserror *error)
self.detailview.text = strm;
if (error)
}];
【反地理編碼】
④呼叫reversegeocodelocation方法,傳入乙個cllocation即可,得到了仍然是地標,和前面一樣處理,需要注意的是,cllocation如果要輸入值,要在初始化時設定,因為經緯度、海拔等都是唯讀屬性,因此應當在初始化時賦值,下面的**通過獲取textfield獲取經緯度,然後反地理編碼得到位置資訊:
cllocationdegrees latitude = [self.latiview.text doublevalue];
cllocationdegrees longtitude = [self.longtiview.text doublevalue];
cllocation *location = [[cllocation alloc] initwithlatitude:latitude longitude:longtitude];
[self.gcoder reversegeocodelocation:location completionhandler:^(nsarray *placemarks, nserror *error)
self.detailview.text = strm;
}if (error)
}];
(七十七)地理編碼與反地理編碼
所謂地理編碼。指的是通過地名獲取位置資訊。比如經緯度 具體位址等。所謂反地理編碼,指的是通過經緯度 海拔等資訊獲取地理位置資訊。在ios上使用地理編碼和反地理編碼,假設是手動輸入經緯度,是不須要獲取使用者授權的,可是通常是獲取使用者的經緯度,然後再通過地理編碼實現精確定位,因此須要授權。本文由於是單...
關於地理編碼與反地理編碼
clgeocoder 地理編碼器,其中geo是地理的英文單詞geography的簡寫。1.使用clgeocoder可以完成 地理編碼 和 反地理編碼 地理編碼 根據給定的地名,獲得具體的位置資訊 比如經緯度 位址的全稱等 反地理編碼 根據給定的經緯度,獲得具體的位置資訊 1 地理編碼方法 void ...
ios地理編碼 反地理編碼
1.地理編碼 給定乙個名字 北京 獲得給定名字對應的位置 經緯度 2反地理編碼 給定義個位置 經緯度 獲得這個位置對應的詳細資訊 國家 省 街道 樓 import viewcontroller.h import inte ce viewcontroller end implementation vi...