ReverseGeocoding
이다.ForwardGeocoding
이라고 부르기도 한다.
func reverseGeocoding(location: CLLocation){
let geocoder = CLGeocoder()
geocoder.reverseGeocodeLocation(location, preferredLocale: Locale(identifier: "ko_kr")) { placemarks, error in
if let first = placemarks?.first{
self.addressLabel.text = first.name
}
}
}
[CLPlacemark]?
에는 보통 한 개의 주소가 저장되지만, 만약 한 좌표에 여러개의 주소가 존재하는 경우 여러 원소가 포함된 배열로 리턴된다.prefferedLocale
: 한국인 ko_kr
를 입력해준다.first.name
: name 속성에는 보통 해당 좌표와 가까운 주변 지역 중에서 대표적인 지명이 저장되어있다. 하지만 항상 저장되어있는 것은 아니기때문에, 이 값에 의지하면 안된다.func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if let currentLocation = locations.last{
latitudeLabel.text = "\(currentLocation.coordinate.latitude)"
longtitudeLabel.text = "\(currentLocation.coordinate.longitude)"
reverseGeocoding(location: currentLocation)
}
}
//first는 CLPlaceMark의 first 원소를 저장한 객체
print("Country", first.country)
print("Postal Code", first.postalCode) // 나름 정확하게 나옴
print("Admin Area", first.administrativeArea, first.subAdministrativeArea)//시나 도 단위 저장. 서브에는 부가 정보가 저장되는데, 보통은 nil
print("Locality", first.locality, first.subLocality)//도시 레벨 정보 저장. locality: 시. subLocality: 동 저장
print("Street", first.thoroughfare, first.subThoroughfare)//보통은 큰 도로가 아니면 nil이므로 사용할 일 X. 도로명 아님!