2011-11-23 3 views
0

마커가 뭉친 Google지도가 있습니다.지도에서 특정 마커를 제거 하시겠습니까?

지도에 마커를 하나씩 추가하고 필요한 경우 개별 마커를 사용하여 개별 마커를 하나씩 삭제해야합니다. 다음

현재 I 마커 글로벌 어레이와 관련된 일부 끔찍한 자세한 코드가, 아이디는, 각 마커에 대한 메타 데이터 및 어레이 내에서 마커의 위치를보고하는 불편한 방법으로 추가 :

var markersArray = []; 
    function getPositionById(markerId, arr) { 
     for (var i = 0; i < arr.length; i++) { 
      if (arr[i].metadata.id === markerId) { 
        return i; 
      } 
     } 
     return null; 
    } 
    function removeMarker(markerId) { 
     var marker_position = getPositionById(markerId, markersArray); 
     if (marker_position !== null) { 
      markersArray[marker_position].setMap(null); 
      markersArray.splice(marker_position,1); 
     } 
    } 
    function setMarker(position, markerId) { 
     removeMarker(markerId); 
     var temp_marker = new google.maps.Marker({ 
      position: position 
     }); 
     temp_marker.setMap(map); 
     temp_marker.metadata = { id: markerId }; 
     markersArray.push(temp_marker); 
    } 

누구나 조금 더 우아한 방법을 제안 할 수 있습니까?

답변

1

Map에서 마커를 제거하려면 setMap (null)을 사용해야한다는 것은 해당 마커에 대한 참조가 필요하다는 것을 의미합니다.

질문에 표시되는 방식이 생각보다 끔찍하지 않지만 배열을 사용하는 대신지도를 사용하는 것이 좋습니다.지도를 사용하는 것이 가장 좋은 용어인지는 확실하지 않습니다. 그럼에도 불구하고지도를 사용하면 getPositionById() 함수에서 벗어날 수 있습니다. 물론 모든 markerIds가 고유하다고 가정합니다.

코드는 다음과 같습니다.

var markers = {}; 

function removeMarker(markerId) { 
    if(markers[markerId]){ 
     markers[markerId].setMap(null); 
     delete markers[markerId]; 
    } 
} 
function setMarker(position, markerId) { 
    removeMarker(markerId); 
    var temp_marker = new google.maps.Marker({ 
     position: position 
    }); 
    temp_marker.setMap(map); 
    temp_marker.metadata = { id: markerId }; 
    markers[markerId] = temp_marker; 
} 
+0

감사합니다. – Richard

관련 문제