안드로이드 왕초보 구글맵 V2 현재위치 <-> 마커 거리계산 질문 좀 드리겠습니다.

조회수 3568회

진행상황은 지도상에 현재위치를 띄어주고, 이클립스에 위도/경도를 입력하여 마커를 띄우는 것 까지 완성한 상태입니다.

궁금한 것은 현재 자신의 위치에서부터 제일 가까운 마커가 찍힌 곳과의 거리를 계산하여 결과값을 화면에 띄어주고 싶습니다.

구글링을 해보니 distance to 를 사용하여 계산하는 방법과, Google Maps Directions API를 이용하는 방법이 있는 것 같더라구요.

제가 원하는 방향으로 갈려면 어떤 방법으로 해결해야 하는지 궁금합니다.

꼭 답변 부탁드리겠습니다!

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 구글지도의 길찾기 기능을 이용해서 차량/도보 같은 옵션으로 얼마나 걸리는지를 보여주려면 Google Maps directions api를 이용하셔야 할 것 같구요. 아니면 간단히 다음 코드의 CalculationByDistance메소드를 이용하면 구할 수 있습니다.

    import java.text.DecimalFormat;
    
    class CodeRunner{
        public static void main(String[] args){
            LatLng gangnamStation = new LatLng(37.4979462,127.025427);//강남역
            LatLng shinNonhyeon = new LatLng(37.5047282,127.023186);//신논현역
            System.out.println(CalculationByDistance( gangnamStation, shinNonhyeon));
    
        }
        public static double CalculationByDistance(LatLng StartP, LatLng EndP) {
            int Radius = 6371;// radius of earth in Km
            double lat1 = StartP.latitude;
            double lat2 = EndP.latitude;
            double lon1 = StartP.longitude;
            double lon2 = EndP.longitude;
            double dLat = Math.toRadians(lat2 - lat1);
            double dLon = Math.toRadians(lon2 - lon1);
            double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
                    + Math.cos(Math.toRadians(lat1))
                    * Math.cos(Math.toRadians(lat2)) * Math.sin(dLon / 2)
                    * Math.sin(dLon / 2);
            double c = 2 * Math.asin(Math.sqrt(a));
            double valueResult = Radius * c;
            double km = valueResult / 1;
            DecimalFormat newFormat = new DecimalFormat("####");
            int kmInDec = Integer.valueOf(newFormat.format(km));
            double meter = valueResult % 1000;
            int meterInDec = Integer.valueOf(newFormat.format(meter));
    
            return Radius * c;
        }
    }
    
    class LatLng{
        public double latitude;
        public double longitude;
    
        public LatLng(double lat, double lng){
            this.latitude = lat;
            this.longitude = lng;
        }
    }
    

    출처

    static으로 선언되어 있지만 편한대로 사용하시면 됩니다. 코드의 LatLng클래스는 그냥 자바 환경에서 테스트해보기 위해 넣었어요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)