Javascript 如何从谷歌地图中删除标记?

Javascript 如何从谷歌地图中删除标记?,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,请帮我删除地图上的标记后,点击它 我写了一个剧本。鼠标左键单击地图后,将创建标记。鼠标右键单击标记后,应删除该标记 但是,它仅适用于一个标记。对于2、3或4个标记,脚本不起作用。请帮我解决这个问题 js: 我可以在您的代码中看到几个问题: 不清楚为什么要调用renderMarkers()。这样,您将在地图上重新添加新标记,而不会删除以前的标记 在renderMarkers()函数中,当生成标记时,在generateMarker()函数中缺少导致标记上缺少id的第三个参数,并且在右键单击处理程序中

请帮我删除地图上的标记后,点击它

我写了一个剧本。鼠标左键单击地图后,将创建标记。鼠标右键单击标记后,应删除该标记

但是,它仅适用于一个标记。对于2、3或4个标记,脚本不起作用。请帮我解决这个问题

js:


我可以在您的代码中看到几个问题:

  • 不清楚为什么要调用
    renderMarkers()。这样,您将在地图上重新添加新标记,而不会删除以前的标记

  • renderMarkers()
    函数中,当生成标记时,在
    generateMarker()
    函数中缺少导致标记上缺少id的第三个参数,并且在右键单击处理程序中有
    未定义的
    m['id']

  • 对象规范中不存在id属性。我相信在创建marker实例后分配id更安全,比如
    marker.id=id

  • 我修改了你的例子,它似乎工作正常。请看一下修改后的代码

    var映射;
    函数initMap(){
    map=new google.maps.map(document.getElementById('map'){
    缩放:4,
    中心:{纬度:-25.363,液化天然气:131.044}
    });
    渲染器();
    map.addListener('click',函数(e){
    var lat=e.latLng.lat();
    var lng=e.latLng.lng();
    var id='id_'+Date.now()+lat.toFixed(2)+lng.toFixed(2);
    发电商(lat、lng、id);
    });  
    }
    函数getMarkersFromLocalStorage(){
    返回localStorage.markers?JSON.parse(localStorage.markers):{};
    };
    功能添加标记存储(lat、lng、id){
    var markers=getMarkersFromLocalStorage();
    标记[id]={
    拉特:拉特,
    液化天然气:液化天然气
    };
    localStorage.markers=JSON.stringify(标记);
    };
    函数removeMarkerFromLocalStorage(id){
    log('removeMarkerFromLocalStorage');
    var markers=getMarkersFromLocalStorage();
    删除标记[id];
    localStorage.markers=JSON.stringify(标记);
    };
    函数renderMarkers(){
    var markers=getMarkersFromLocalStorage();
    用于(道具标记){
    发电机标记器(标记器[prop].lat,标记器[prop].lng,prop);
    };
    };
    函数生成器标记器(lat、lng、id){
    var marker=new google.maps.marker({
    位置:{lat:lat,lng:lng},
    地图:地图
    }); 
    marker.id=id;
    addMarkerToLocalStorage(lat、lng、id);
    marker.addListener('右键单击',函数(e){
    var m=这个;
    log(e,m['id']);
    从本地存储中移除标记(m['id']);
    此.setMap(null);
    });   
    };
    
    #地图{
    身高:100%;
    }
    html,正文{
    身高:100%;
    保证金:0;
    填充:0;
    }
    
    
    var map;
    
    function initMap() {
      map = new google.maps.Map(document.getElementById('map'), {
        zoom: 4,
        center: {lat: -25.363, lng: 131.044}
      });
    
      renderMarkers();
    
      map.addListener('click', function(e) {
        var lat = e.latLng.lat();
        var lng = e.latLng.lng();    
        var id = 'id_' + Date.now() + lat.toFixed(2) + lng.toFixed(2);
        generateMarker(lat, lng, id);    
      });  
    }
    
    function getMarkersFromLocalStorage() {
      return localStorage.markers ? JSON.parse(localStorage.markers) : {};
    };
    
    function addMarkerToLocalStorage(lat, lng, id) {
      var markers = getMarkersFromLocalStorage();
      markers[id] = {
        lat: lat, 
        lng: lng
      };
      localStorage.markers = JSON.stringify(markers);
    };
    
    function removeMarkerFromLocalStorage(id) {
      console.log('removeMarkerFromLocalStorage');
      var markers = getMarkersFromLocalStorage();
      delete markers[id];
      localStorage.markers = JSON.stringify(markers);
    };
    
    function renderMarkers() {
      var markers = getMarkersFromLocalStorage();  
    
      for(prop in markers) {
        generateMarker(markers[prop].lat, markers[prop].lng);
      };
    };
    
    function generateMarker(lat, lng, id) {  
      var marker = new google.maps.Marker({
        position: {lat: lat, lng: lng},
        map: map,
        id: id
      }); 
      addMarkerToLocalStorage(lat, lng, id);
    
      marker.addListener('rightclick', function(e) {
        var m = marker;
        console.log(e, m['id']);    
        removeMarkerFromLocalStorage(m['id']);
        this.setMap(null);
        renderMarkers(); 
      });   
    
    };