안드로이드 왕초보 구글맵 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클래스는 그냥 자바 환경에서 테스트해보기 위해 넣었어요.
댓글 입력