마커에 클릭 이벤트 문의

안녕하세요.

Sample 중 [마커에 클릭 이벤트 등록하기] 사용 중 궁금한 사항이 있어서 문의 드립니다.

Sample >> 오버레이 >> 마커에 클릭 이벤트 등록하기

소스는 그대로 사용하였고 아래와 같이 alert(); 을 사용하여 선택한 마커의 좌표를 확인하였는데…
좌표가 현재 마커가 설정되어 있는 것과 다르게 나와서 문의 드립니다.

A 마커
설정 마커 좌표 - 33.44975, 126.56967
alert 마커 좌표 - 33.449749999999995 : 126.56967

B마커
설정 마커 좌표 - 33.450579, 126.56956
alert 마커 좌표 - 33.450579 : 126.56956000000001

C마커
설정 마커 좌표 - 33.4506468, 126.5707
alert 마커 좌표 -33.4506468 : 126.5707

Sample 의 경우는 위도 경도가 좌표가 조금은 다르게 나오지만 비슷하게 확인되는데…
위도가 128 또는 129인 경우는 차이가 많이 나는 것을 확인하였습니다.
아래 좌표 설정 후 마커 클릭 이벤트 실행 시 차이 발생이 확인되어 사유가 있는지…
혹시 마커의 좌표와 클릭 이벤트 좌표를 동일하게 처리하려면 어떻게 해야 하는지 문의 드립니다.

new kakao.maps.LatLng(36.031604044438964, 129.02117952624755),
new kakao.maps.LatLng(36.32553935352242, 128.4814240873709),
new kakao.maps.LatLng(35.57668553352241, 128.5917591851286)

// 마커에 click 이벤트를 등록합니다
kakao.maps.event.addListener(marker, ‘click’, function() {

    // 클릭된 마커가 없고, click 마커가 클릭된 마커가 아니면
    // 마커의 이미지를 클릭 이미지로 변경합니다
    if (!selectedMarker || selectedMarker !== marker) {

        // 클릭된 마커 객체가 null이 아니면
        // 클릭된 마커의 이미지를 기본 이미지로 변경하고
        !!selectedMarker && selectedMarker.setImage(selectedMarker.normalImage);

        alert(marker.getPosition().getLng() + " : " + marker.getPosition().getLat());

        // 현재 클릭된 마커의 이미지는 클릭 이미지로 변경합니다
        marker.setImage(clickImage);
    }

    // 클릭된 마커를 현재 클릭된 마커 객체로 설정합니다
    selectedMarker = marker;
});

좌표의 오차는

  • 좌표계 변환 과정에서 발생하는 오차
  • 부동소수점 표현의 한계 때문에 발생하는 오차
  • 스크린 화면상 1px로 표현할 수 있는 제약 때문에 생기는 표현의 오차

위와 같이 불가항력적인 오차가 있을 수 있습니다.

마커와 동일한 좌표를 사용하길 원하신다면
인덱스-Marker 매핑 테이블을 따로 만드시거나

var marker = new kakao.maps.Marker({//...});
marker.idx = i;

와 같이 객체 확장을 통해서 인덱스를 등록하고
click 이벤트에서 좌표 배열의 i번째를 가져오는 var position = positions[this.idx]; 방법이 있습니다.