아이폰 위치정보와 지하철 역과 거리 구하기
서울시에서 제공하는 지하철역과의 거리 구하는 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 배열에 넣어 두었다. 위와 같이 하니까 빠른 시간내에 현재 위치에서 가까운 역을 가져올 수 있게 되었다.
댓글
댓글 쓰기