아이폰 위치정보와 지하철 역과 거리 구하기

서울시에서 제공하는 지하철역과의 거리 구하는 URL 은 좌표가 WTM 방식이다.
하지만 대부분의 스마트폰의 좌표는 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 배열에 넣어 두었다. 위와 같이 하니까 빠른 시간내에 현재 위치에서 가까운 역을 가져올 수 있게 되었다.

댓글

이 블로그의 인기 게시물

한글 2010 에서 Ctrl + F10 누르면 특수문자 안뜰 때

아이폰에서 RFID 사용하는 방법

VCC 와 GND 는 무엇일까?