티스토리 뷰

CLLocation을 주소로 변경하기

iOS에는 CLGeocoder라는 클래스를 통해 주소를 좌표로, 좌표를 주소로 변경할 수 있는 기능을 제공하고 있다.


예를 들어 MKMapView에서 유저가 선택한 위치의 좌표(위도/경도)를 가지고 오는 작업은 쉽게 검색해볼 수도 있고 구현해 볼 수도 있지만, 그 좌표에 해당하는 주소를 가져오려고 어떻게 해야 할지 막막해진다.


이 때 사용하는 것이 바로 CLGeocoder이다.
먼저 간단한 코드를 보도록 하자.

func convertToAddressWith(coordinate: 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(separator: " ")
print(address)
}
}

이 포스트가 작성된 기준(2016.9.26)으로 swift 3.0을 사용할 수 있기 때문에 코드는 swift 3.0 기준으로 작성하였다.


CLGeocoder에는 기본적으로 reverseGeocodeLocation(CLLocation) 이라는 메소드가 제공된다. 이 메소드가 바로 좌표 값을 주소로 변경해주는 기능을 수행하는데, 애플 지도 DB에 있는 값을 바탕으로 주소를 표시해준다.



placemark에는 addressDictionary라는 딕셔너리가 존재하고 그 외에도 String으로 구성되어 있는 국가, 도, 시, 구, 상세주소 등 세분화 된 주소를 별도로 가져올 수 있다.


위에서 사용한 addressDictionary의 FormattedAddressLines는 말그대로 정형화 된 주소를 나타낸다.


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday