안녕하세요.
지도에 여러개를 표시하다보니, 동일한 지역에 복수개의 마커를 표시되는 경우가 있습니다.
이렇게 동일한 지점에 여러개 마커가 표시되면 하나밖에 보이질않습니다.
프로그램에서 주소별로 별도처리를 않하고, Marker중복을 확인할수있는 방법이 있는지의 여부에 대한 질문입니다.
부탁드립니다.
안녕하세요.
지도에 여러개를 표시하다보니, 동일한 지역에 복수개의 마커를 표시되는 경우가 있습니다.
이렇게 동일한 지점에 여러개 마커가 표시되면 하나밖에 보이질않습니다.
프로그램에서 주소별로 별도처리를 않하고, Marker중복을 확인할수있는 방법이 있는지의 여부에 대한 질문입니다.
부탁드립니다.
안녕하세요,
음 단순하게 생각하면…
marker 의 position 을 훑으면서 동일한 값이 있는 지 찾는 방법…
밖에 생각이 나진 않습니다만…
혹 다른 방법이 있다면 개발자분이 추가로 알려주실 것 같습니다.
http://apis.map.daum.net/web/documentation/#Marker
참고로 우선 순위는 marker 의 zIndex 로 조정할 수 있습니다.
이런 경우는 기본 제공되는 API로는 해결하기 힘듭니다.
지금과는 다른 UI로 푸는 방법이 있겠는데요.
MarkerClusterer를 사용한다. 클릭하면 해당 클러스터에 묶인 마커들의 정보들을 보여준다.
예제: http://apis.map.daum.net/web/sample/addClustererClickEvent/
활용 예시: http://place.map.daum.net/heritage
마커는 하나만 두고 클릭하면 동일 위치의 다른 주소 데이터 묶음을 받으면 그 데이터 내용을 토대로 리스트를 확인할 수 있는 창을띄워서 보여준다.
가장 기본적인 방식을 제시해 드렸지만
그 외에 다양한 UI로 풀 수 있습니다.
UI에 대한 질문이 아니고, 동일한 좌표에 이미 마커를 표시한 상태에서 해당 좌표에 이미 마커가 표시되어있는지 확인할수 있는 function이 있는지에 대한 문의입니다.
이미 표시가 되어있다면 마커의 title이나 infowindow를 수정하면 되는데,
이러한것을 하기 위한 특정 위치(좌표)에 이미 마커가 표시되어있는지의 여뷰 확인하는 기능여부 질문입니다.
마커는 marker.setMap(map)으로 지도에 올리셨을테니
var isOnMap = !!marker.getMap();
으로 해당 마커가 지도위에 있는지를 확인할 수 있습니다.
흐음…해당 좌표에 이미 있는지를 확인하려면
원하는 좌표값과
마커를 관리하는 배열을 반복문으로 돌면서
좌표가 서로 같은지 비교하시면 됩니다.
LatLng.equals() 라는 함수가 좌표간 비교를 할 수 있으며
http://apis.map.daum.net/web/documentation/#LatLng_equals
마커의 getPosition()을 통해 좌표를 가져올 수 있습니다.
http://apis.map.daum.net/web/documentation/#Marker_getPosition
만약 원하는 좌표와 exact 매칭이 되지 않는 경우,
좌표를 중심으로 패딩을 주어 영역을 지정하여 근사치로 비교하는 방법도 해 볼 수 있습니다.
원하는 좌표에 일정한 패딩을 주어 LatLngBounds 객체를 만들고
http://apis.map.daum.net/web/documentation/#LatLngBounds
마커의 position을 아래 함수에 넣어서 확인하는 거죠.
http://apis.map.daum.net/web/documentation/#LatLngBounds_contain
로직으로 LatLng arrary에 저장시켜서 중복을 체크했습니다.points[kk].equals(position)…
이미 Add가 된 Marker의 타이틀과 infoWindow를 수정할수가 있나요?
가능하다면 몇번째 arrary에 있는 같은 좌표의 LatLng를 가지고 해당 마커를 어떻게 수정해야 하나요?
방법은 해당 Marker를 삭제하고 새롭게 Title, infoWindow를 다르게 해서 Add하는 방법밖에 없나요?
가능합니다. 문서에 나와 있습니다.
http://apis.map.daum.net/web/documentation/#Marker_setTitle
http://apis.map.daum.net/web/documentation/#InfoWindow_setContent
이것 또한 문서에 나와있어요.
http://apis.map.daum.net/web/documentation/#Marker_setPosition
이건 무엇을 어떻게 구현을 하고 어떻게 확장할 것이냐에 따라 다릅니다. 정석은 없습니다. 필요한 기능을 샘플에서 확인하시고 코드가 있으니 보시면서 응용하시면 됩니다.
보통 뷰 객체의 타이틀이나 컨텐츠에 tagging을 달거나 인덱싱을 하여 쓰면 순간은 편하지만 기능을 확장하다보면 어렵습니다.
케이스 바이 케이스긴 합니다만, 자바스크립트로 [인덱스(키) : 객체] 매핑 테이블을 만드시고 이벤트 핸들링할 때 참조하시는게 나을 수 있습니다.