티스토리 뷰
CLLocation을 주소로 변경하기
iOS에는 CLGeocoder라는 클래스를 통해 주소를 좌표로, 좌표를 주소로 변경할 수 있는 기능을 제공하고 있다.
예를 들어 MKMapView에서 유저가 선택한 위치의 좌표(위도/경도)를 가지고 오는 작업은 쉽게 검색해볼 수도 있고 구현해 볼 수도 있지만, 그 좌표에 해당하는 주소를 가져오려고 어떻게 해야 할지 막막해진다.
이 때 사용하는 것이 바로 CLGeocoder이다.
먼저 간단한 코드를 보도록 하자.
func convertToAddressWith(: CLLocation) {
let geoCoder = CLGeocoder()
geoCoder.reverseGeocodeLocation(coordinate) { (placemarks, error) -> Void in
if error != nil {
NSLog("\(error)")
return
}
guard let placemark = placemarks?.first,
let addrList = placemark.addressDictionary?["FormattedAddressLines"] as? [String] else {
return
}
let address = addrList.joined(: " ")
print(address)
}
}
이 포스트가 작성된 기준(2016.9.26)으로 swift 3.0을 사용할 수 있기 때문에 코드는 swift 3.0 기준으로 작성하였다.
CLGeocoder에는 기본적으로 reverseGeocodeLocation(CLLocation) 이라는 메소드가 제공된다. 이 메소드가 바로 좌표 값을 주소로 변경해주는 기능을 수행하는데, 애플 지도 DB에 있는 값을 바탕으로 주소를 표시해준다.
placemark에는 addressDictionary라는 딕셔너리가 존재하고 그 외에도 String으로 구성되어 있는 국가, 도, 시, 구, 상세주소 등 세분화 된 주소를 별도로 가져올 수 있다.
위에서 사용한 addressDictionary의 FormattedAddressLines는 말그대로 정형화 된 주소를 나타낸다.
'Programming > Swift' 카테고리의 다른 글
[Swift] Navigation bar 숨김 시 swipe back 불가 (4) | 2016.10.08 |
---|---|
[Swift] NSLocalizedString에 변수 사용 (0) | 2016.10.04 |
[Swift] Status bar 글씨 색상 변경 (0) | 2016.09.05 |
[Swift] optional 이란? (0) | 2016.09.01 |
[Swift] enum의 case로 for 문 돌리기 (0) | 2016.08.26 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday