마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

구글맵 클릭 마커이벤트와 거리계산 코드

0 추천
구글맵에서 주변 주차장마커를 띄우후

그 마커를 클릭하면 현재위치에서 클릭한마커까지 거리계산하는것을 구현해내고싶은데

if ((addedMarker != null) && tracking == 1) {
            double radius = 3000;

            double distance = SphericalUtil.computeDistanceBetween(currentPosition, addedMarker.getPosition());
            if ((distance < radius) && (!previousPosition.equals(currentPosition))) {
                Toast.makeText(this, addedMarker.getTitle() + "까지" + (int) distance + "m 남음", Toast.LENGTH_LONG).show();
            }

코드중일부분인데 addedmarker부븐을 클릭한 마커로 바꾸면되다는데 도저히 찾아봐도 모르겟어서

물어볼곳도없고해서 올려봅니다...

지도상 마커를 추가하면 그곳까지 거리를 구하는 코드이고

이것을 제주변 주차장을 찾고 그곳의 마커를 클릭하면 계산하는것으로 바꾸고싶습니다
김진명 님이 2019년 4월 13일 질문

1개의 답변

0 추천
 
채택된 답변
주변 주차장 위치정보는 공공데이터 API에서 받아오시면 되고, onMarkerClickListener 연결해서 리스너 안에서 marker.getPosition()하시면 클릭한 마커의 좌표값이 받아와질것이고 그값을 addMarker에 넣어주시면 distance값이 나올듯 한데요.
익명사용자 님이 2019년 4월 13일 답변
mGoogleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener()
이렇게 리스너  추가하고 이안에서 클릭한 마커의 좌표값을 가져오시라는건가요??
네. 공공API나 placeAPI 사용하면 일정범위내에 원하는 장소에 대한 마커가 여러개 뜨잖아요? 마커클릭리스너를 쓰면 그 찍힌 마커들을 클릭했을때의 위치정보값이 받아와질거에요. 그럼 그값을
            double distance = SphericalUtil.computeDistanceBetween(현재위치, 클릭한 마커위치); 를 이용해 거리값을 구하는 거지요.
답변정말감사합니다!!
 double distance = SphericalUtil.computeDistanceBetween(currentPosition, addedMarker.getPosition());
여기서 currentPosition이 현재 위치이고 addedMarker부분에 클릭한 마커위치 값을 가져와야한다고 하시는건데 그부분을 마크클릭리스너를 어떻게 추가해서 얻어야할지 감이안잡힙니다ㅜㅠ
구현하시는 액티비티 클래스에 implemenet GoogleMap.OnMarkerClickListener 하시면 onMarkerClick(Marker marker) 메소드 오버라이딩하시고,
@Override
public boolean onMarkerClick(Marker marker) {
       double distance = SphericalUtil.computeDistanceBetween(currentPosition, marker.getPosition());
        return true;
}
이런식으로 하시면 되지않을까 싶습니다.
public void onLocationChanged(Location location) {

        previousPosition = currentPosition;
        currentPosition
                = new LatLng(location.getLatitude(), location.getLongitude());

        Log.d(TAG, "onLocationChanged : ");

        String markerTitle = getCurrentAddress(currentPosition);
        String markerSnippet = "위도:" + String.valueOf(location.getLatitude())
                + " 경도:" + String.valueOf(location.getLongitude());

        setCurrentLocation(location, markerTitle, markerSnippet);

        mCurrentLocation = location;

        if (previousPosition == null) previousPosition = currentPosition;

        if ((addedMarker != null) && tracking == 1) {
            double radius = 3000;
            double a = 50;


            double distance = SphericalUtil.computeDistanceBetween(currentPosition, addedMarker.getPosition());
            if ((distance < radius) && (!previousPosition.equals(currentPosition))) {
                Toast.makeText(this, addedMarker.getTitle() + "까지" + (int) distance + "m 남음", Toast.LENGTH_LONG).show();
            }
            if(distance <= a){
                Toast.makeText(this,"목적지 도착",Toast.LENGTH_LONG).show();
            }
        }
    }
저 소스가 들어가잇는 locationchanged 전체소스인데 거리계산하는 부분만빼내서 마커클릭리스너에 넣으면 될까요??
일단 마커 클릭하는 순간의 거리값만을 확인해보려면 저 코드만으로도 받을순 있을듯해요. 조건식들은 저도 다른 변수값들이 뭘의미하는지 잘모르니 알수가없어서 Null 예외처리들은 당연한것이니 제외하구요ㅎㅎ; 네비처럼 실시간으로 현재좌표가 변할때마다 거리계산을 다시 해야하는부분들은 좀더 생각을 해야 할듯해요.
네 맞아요...실시간 현재위치부터 클릭한마커까지구하는거라 찾아내기힘드네요 답변 정말감사합니다
...