iOS 앱 개발을 진행하다 보면 위치정보를 활용해야 하는 상황이 종종 발생합니다. 그러나 서로 다른 좌표 체계를 활용하는 경우 불편함을 겪는 경우가 많습니다. 이럴 때 카카오 API를 활용하면, 다양한 좌표 체계를 손쉽게 변환할 수 있습니다. 이번 포스팅에서는 중부원점(EPSG:2097) 좌표를 위도·경도(WGS84)로 변환하는 방법에 대해 설명하겠습니다.
1. Kakao API 키 발급받기
먼저, Kakao API를 사용하기 위해서는 API 키가 필요합니다. 아래 링크를 통해 API 키를 발급받을 수 있습니다.
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
API 키 발급 후, 해당 키를 이용하여 API 요청을 보내면 됩니다.
2. Kakao API 호출하기
Kakao API의 좌표변환 REST API를 사용할 것입니다. 자세한 설명은 카카오 공식 문서인 좌표계 변환하기에서 확인해 주시면 감사하겠습니다.
그럼 바로 코드를 살펴보도록 하겠습니다.
let apiUrl = "https://dapi.kakao.com/v2/local/geo/transcoord.json"
let headers = [
"Authorization": "KakaoAK {REST API KEY}", // 발급받은 카카오 API key를 {REST API KEY} 에 기입
"Content-Type": "application/x-www-form-urlencoded"
]
/// 좌표변환함수
/// - Parameters:
/// - longitude: 중부원점(x)좌표
/// - latitude: 중부원점(Y)좌표
func convertCoordinate(longitude: Double, latitude: Double) {
let parameters = [
"x": String(longitude),
"y": String(latitude),
"input_coord": "TM", // 중부원점
"output_coord": "WGS84" // 위도경도
]
var urlComponents = URLComponents(string: apiUrl)!
// API 요청 파라미터를 URL 쿼리스트링 형태로 변환하여 URLComponents 객체에 설정
urlComponents.queryItems = parameters.map { key, value in URLQueryItem(name: key, value: value) }
var request = URLRequest(url: urlComponents.url!)
request.allHTTPHeaderFields = headers
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else {
print(error?.localizedDescription ?? "No data")
return
}
// HTTP 상태 코드가 200이 아닌 경우 오류 메시지를 출력합니다.
if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(response!)")
}
// API 응답 데이터를 JSON 객체로 파싱합니다.
do {
let json = try JSONSerialization.jsonObject(with: data, options: []) as! [String: Any]
let documents = json["documents"] as! [[String: Any]]
let latitude = documents[0]["y"] as! Double // 위도
let longitude = documents[0]["x"] as! Double // 경도
print("위도: \(latitude), 경도: \(longitude)")
} catch let error as NSError {
print(error)
}
}
task.resume()
}
'convertCoordinate' 함수에 중부원점 좌표값을 인자로 넘겨주면 해당 좌표가 위도와 경도로 변환된 결과를 출력합니다. 이상으로 포스팅을 마치겠습니다.
'Swift' 카테고리의 다른 글
[Swift] iOS에서 Google AdMob 사용하는 방법 (0) | 2023.06.13 |
---|---|
[Swift]UITextView 한글 글자수 제한 (0) | 2023.06.05 |
[Swift]SQLite3사용 예제 (feat.FMDB) (0) | 2023.02.10 |
[Swift] 네이버 오픈 API 지역 검색 (0) | 2023.02.10 |
[Swift] 콤팩트맵(compactMap),플랫맵(flatMap) (0) | 2023.01.04 |