아이폰 위치정보와 지하철 역과 거리 구하기
서울시에서 제공하는 지하철역과의 거리 구하는 URL 은 좌표가 WTM 방식이다.
하지만 대부분의 스마트폰의 좌표는 WGS84 방식이다.
이를 변환하는 다음 개발자 URL 도 있기는 있지만 이러한 방식으로 구현해서 확인했더니 속도가 나오지 않아서 인터넷에 돌아다니는 소스를 참고 삼아 메소드를 만들었다.
하지만 대부분의 스마트폰의 좌표는 WGS84 방식이다.
이를 변환하는 다음 개발자 URL 도 있기는 있지만 이러한 방식으로 구현해서 확인했더니 속도가 나오지 않아서 인터넷에 돌아다니는 소스를 참고 삼아 메소드를 만들었다.
// wgs84 좌표 사이의 거리 측정 후 정렬하여 가까운 역 표시
func distanceBetweenCoordinate(lat1: Double, lon1: Double) -> [String] {
var distanceStaion:[String:Double] = Dictionary()//[:]
// 현재 위치와 subways 좌표와 계산하여 distance.append(code, distance) 넣으면 된다.
for subway in subways {
let lat2 = subway.latitude
let lon2 = subway.longitude
let theta = lon1 - lon2
var dist = sin(deg2rad(deg: lat1)) * sin(deg2rad(deg: lat2)) + cos(deg2rad(deg: lat1)) * cos(deg2rad(deg: lat2)) * cos(deg2rad(deg: theta))
dist = acos(dist)
dist = rad2deg(rad: dist)
dist = dist * 60 * 1.1515
// Kilo Meter
dist = dist * 1.609344
distanceStaion[subway.name] = dist
}
// 계산 끝났으므로 다시 하지 않도록 설정
_isDistanceCalculated = true
// 가까운 거리부터 정렬
let sortedDistance = distanceStaion.sorted { $0.1 < $1.1 }
// 5개만 추출
let returnDictionary = sortedDistance[0..<5]
//print(returnDictionary)
// 문자열(역명)만 추출하여 생성
return returnDictionary.map { "\($0.0)" }
}
서울시에서 제공하는 역 위치정보를 json 파일로 가져와서 미리 로딩하여 subways 배열에 넣어 두었다.
위와 같이 하니까
빠른 시간내에 현재 위치에서 가까운 역을 가져올 수 있게 되었다.
댓글
댓글 쓰기