2016-03-15 79 views
2

我在下面的代码中显示标记,我点击地图上的标记。它的工作完美,事情是我想添加新标记时删除以前的地图标记。我应该在哪里做出改变才能完美运作。在Google地图中添加新标记之前移除上一个标记

 google.maps.event.addListener(map, "click", function (e) { 

        latLng = e.latLng; 

        console.log(e.latLng.lat()); 
        console.log(e.latLng.lng()); 

        image = clientURL + "/common/images/markers/red.png"; 
        console.log("Marker"); 
        marker = new google.maps.Marker({ 
         position: latLng, 
         map: map, 
         icon: image 
        }); 


       }); 

我refered,这不是我的情况下工作的许多环节To remove previous markers before adding new Markers

+0

marker.setMap(空)前。 –

+0

您未使用Google Maps API v2。这不再有效;任何对V2 API的请求都真正由V3 API处理。所以我重申了这个问题,并从标题中删除了对V2的错误引用。 – duncan

+0

这是一种基本的知识,即在函数范围内创建对象时,每次调用该函数时都会创建一个新对象,而不会影响以前的对象。在侦听器之外声明标记而不指定它的位置,然后在侦听器中使用marker.setPosition(e.latLng)。 –

回答

2

你在你的问题链接的答案类似,你需要保持全球参考最后一个标记添加到地图(以前的标记被删除)。

var map; 
var previousMarker; // global variable to store previous marker 
function initMap() { 
    map = new google.maps.Map(document.getElementById('map'), { 
    center: { 
     lat: -34.397, 
     lng: 150.644 
    }, 
    zoom: 8 
    }); 
    map.addListener('click', function(e) { 
     // if the previousMarker exists, remove it 
     if (previousMarker) 
     previousMarker.setMap(null); 

     latLng = e.latLng; 

     console.log(e.latLng.lat()); 
     console.log(e.latLng.lng()); 

     //image = clientURL + "/common/images/markers/red.png"; 
     console.log("Marker"); 
     previousMarker = new google.maps.Marker({ 
     position: latLng, 
     map: map 
     }); 
    } 

); 
} 
+0

我尝试建议,但它打错误 - >未捕获TypeError:previousMarker.setMap不是一个函数 –

+0

@KarthikeyanPandian看到我更新的答案,这段代码功能齐全,试试看 - 我唯一不得不做的出于测试目的,删除标记的替换图像。 – bwegs

6

添加代码,如果它存在,并且有一个.setMap方法从地图中删除标记(假定已有标记可用在当前范围内或是全球性的):

if (marker && marker.setMap) { 
    marker.setMap(null); 
} 

完整功能:

google.maps.event.addListener(map, "click", function (e) { 

    latLng = e.latLng; 

    console.log(e.latLng.lat()); 
    console.log(e.latLng.lng()); 

    image = clientURL + "/common/images/markers/red.png"; 
    console.log("Marker"); 
    // if marker exists and has a .setMap method, hide it 
    if (marker && marker.setMap) { 
    marker.setMap(null); 
    } 
    marker = new google.maps.Marker({ 
    position: latLng, 
    map: map, 
    icon: image 
    }); 
}); 
+1

+1用于检查标记是否为空以及标记是否设置了非空映射。否则它将无法工作。这是使其工作的途径之一。干杯! –

1

在HTML代码,并添加谷歌地图API密钥

<div id="map_div" style="width:100%;height:85px;"></div> 

在创建新的JavaScript代码

var add_marker = null,map = null; //Declare vaiable 

// map load 
map = new google.maps.Map(document.getElementById('map_div'),{ 
     zoom:10, 
     position: new google.maps.LatLng(11.342423,77.728165), 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
}); 

// first time map load set marker static 
add_marker = new google.maps.Marker({ 
     map:map, 
     position:new google.maps.LatLng(11.342423,77.728165), 
     zoom:10 
}); 

map.addListener("click",function(e){ 
    if(add_marker != null) {   //already set marker to clear 
     add_marker.setMap(null); 
     add_marker = null; 
    } 

    // Dynamic to set marker based on click event 
    add_marker = new google.maps.Marker({ 
      map:map, 
      position:new google.maps.LatLng(e.latLng.lat(),e.latLng.lng()), 
      zoom:10 
    }); 
}); 
相关问题