카카오지도 panTo 콜백관련 문의드립니다

안녕하세요.

map.panTo 완료후에 idle 콜백을 받을 수 있는걸로 알고 있는데요.
이동하려는 위치가 현재 센터위치랑 차이가 없으면 idle 이 불리지 않고 있는데, 이걸 알 수 있을까요?

panTo 가 불렸지만 사실상 움직임이 없을때 뭔가 액션을 취하고 싶은데 좋은 방법이 있을지 문의드려요.
지금은 과거의 지도 중심과 목적지 좌표사이 거리가 특정값 이하인지 판별을 하고 있는데 깔끔한 방법 같지가 않아서요…
타임아웃을 써서 하는 것도 깔끔하지 않은거 같구요.

중심좌표와 비교할 좌표의 오차를 구하고 허용 오차에 있다면 동일 좌표로 간주하고 별도 처리를 하는 방법이 있습니다.

혹시 말씀하신 허용오차로 구하는 방법을 자세히 알수 있을까요?

허용오차를 얼마로 설정해야 panTo 가 움직이지 않아서 idle 이 불리지 않는지 값을 정확히 알고 싶어요.
지도 레벨에 따라서 허용오차가 달라지는지도 궁금해요~

아래는 polyline객체를 이용한 거리계산과 좌표값 차이를 단순 비교하는 코드입니다.
중심 좌표와 이동할 좌표 간의 거리를 비교해서 일정 범위(허용 오차) 안에 있다면 동일 좌표로 간주하는 방식으로 처리하시면 됩니다.
좌표 값 자체는 지도 레벨과 관계없이 동일하므로, 허용 오차는 레벨에 따라 달라지지 않습니다.

//polyline으로 거리 계산
function areCoordinatesEqual(coord1, coord2) {
    const toleranceDistance = 1; //m단위

    //거리 계산을 위한 라인 생성
    const line = new kakao.maps.Polyline({
        path: [coord1, coord2],
    });

    const distance = line.getLength();

    return distance < toleranceDistance; // 두 좌표의 거리가 허용 오차 이내인지 확인
}
//계산으로 오차 비교
function areCoordinatesEqual(coord1, coord2, tolerance = 0.00001) {        
    const lonDiff = Math.abs(coord1.getLng() - coord2.getLng());
    const latDiff = Math.abs(coord1.getLat() - coord2.getLat());

    return lonDiff <= tolerance && latDiff <= tolerance;
}
1개의 좋아요

감사합니다!!