2010-11-24 7 views
5

マーカーの配列を作成しました。私はこれらのマーカーの配列を使用して、「クリック」を聞き、マーカーをGoogle Mapに配置し、「すべてのマーカーを消去する」、「すべてのマーカーを再表示」、および「すべてのマーカーを削除する」機能を作成します。Googleマップで一度に1つのマーカーを削除するには

問題は、一度に1つのマーカーを消去または削除できるようにするにはどうすればよいですか?なぜなら、私が偶然、私が欲しくない場所に作図してしまった場合、それをクリア/削除したいと思うので、私はそれをすることができなかったからです。私はその特定のマーカーを削除/クリアした場合、私が以前にプロットされているマーカーの残りの部分は、同様に削除/クリアされます...

マイコード:

//Initialize the map 
function initialize() { 
    var myLatlng = new google.maps.LatLng(2,110); 
    var myOptions = { 
     zoom: 3, 
     center: myLatlng, 
     mapTypeId: google.maps.MapTypeId.HYBRID 
    }; 

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

    infowindow = new google.maps.InfoWindow({ 
     content: "loading..." 
    }); 
} 

function changeForm(the_form) { 
    window.location = the_form; 
} 


//Listen for click 
function marker() { 
    google.maps.event.addListener(map, 'click', function(event) { 
     addMarker(event.latLng); 
    }); 
} 

// Place markers in by click 
function addMarker(location) { 
    marker = new google.maps.Marker({ 
     position: location, 
     map: map, 
     title:"Specified Location", 
     icon: 'images/greenPoint.png' 
    }); 
    markersArray.push(marker); 
} 

// Deletes all markers in the array by removing references to them 
function deleteOverlays() { 
    if (markersArray) { 
     for (i in markersArray) { 
      markersArray[i].setMap(null); 
     } 
     markersArray.length = 0; 
    } 
} 

// Removes the overlays from the map, but keeps them in the array 
function clearOverlays() { 
    if (markersArray) { 
     for (i in markersArray) { 
      markersArray[i].setMap(null); 
     } 
    } 
} 

// Shows any overlays currently in the array 
function showOverlays() { 
    if (markersArray) { 
     for (i in markersArray) { 
      markersArray[i].setMap(map); 
     } 
    } 
} 

答えて

4

あなたを作成していますマーカーをlistmarkersArrayにすべてプッシュするのではなく、Lat/Lng(またはより良いイベント、ある種のID)に基づいてそれらを格納し、各マーカーにイベントハンドラーを設定して、マーカーのリストから自身を削除することができますクリックしたときに表示されます。あなたはgoogle.maps.Markerオブジェクトに任意の情報を格納することができた場合

は私はわからないんだけど、あなたは常にIDとそのメンバーとしてgoogle.maps.Markerオブジェクトを持っている独自のオブジェクトを作成することができます。

function myMarker(id, location) { 
    this.id = id; 
    this.marker = new google.maps.Marker({...}); 
} 

markersArray[id] = new myMarker(myId, myLocation)は、任意のIDに基づいてすべてのマーカーを保存することができます。次に、this.markerで説明したハンドラを割り当てて、markersArrayとマップからあなた自身を削除することができます。

あなたmarkersArrayはのラインに沿ってマーカーを保存しますので、それは、彼らの緯度/ Lngsに基づいてマーカーを保存することです行う別の方法:

markersArray[location.lat][location.lng] = new google.maps.Marker({...}); 

そして、あなたは、その後に自分のイベントハンドラを使用することができますクリックするとマーカーの緯度/経度を取得し、配列からそれ自体を削除してそのようにマップします。

詳細が必要な場合はお知らせください。

関連する問題