Javascript 如何撤消google地图绘图中最后添加的行

Javascript 如何撤消google地图绘图中最后添加的行,javascript,jquery,google-maps,Javascript,Jquery,Google Maps,我在谷歌地图上有两个选项-->一个是多边形,另一个是绘制线。现在我正在尝试在我的页面中执行撤消功能。当我单击undo按钮时,应删除最近添加的线(可能在多边形选项或绘制线选项中)。是否可能 function initMap() { var map = new google.maps.Map(document.getElementById('map'), { center: {lat: -34.397, lng: 150.644}, zo

我在谷歌地图上有两个选项
-->一个是多边形,另一个是绘制线。
现在我正在尝试在我的页面中执行撤消功能。当我单击
undo
按钮时,应删除最近添加的线(可能在多边形选项或绘制线选项中)。
是否可能

 function initMap() {
          var map = new google.maps.Map(document.getElementById('map'), {
          center: {lat: -34.397, lng: 150.644},
          zoom: 8
          });

          var drawingManager = new google.maps.drawing.DrawingManager({
            drawingMode: google.maps.drawing.OverlayType.MARKER,
            drawingControl: true,
            drawingControlOptions: {
              position: google.maps.ControlPosition.TOP_CENTER,
              drawingModes: ['polygon', 'polyline']
            },

            circleOptions: {
              strokeColor: '#00DB00',
              fillColor: 'green',
              fillOpacity: 0.05,
              strokeWeight: 5,
              clickable: false,
              editable: true,
              zIndex: 1
            }

          });
          drawingManager.setMap(map);
           google.maps.event.addListener(drawingManager, 'overlaycomplete', function (event)
            {
              if (event.type === 'marker') console.log('Lat: ' + event.overlay.position.lat() + ', Long: ' + event.overlay.position.lng())
              else displayPolyLatLng(event.overlay.getPath().b); 
            });


          function displayPolyLatLng(pointArray)
          {debugger

              var result=" ";
              for (var i = 0; i < pointArray.length; i++) 
              {
                  result +='<b>Lat: ' + pointArray[i].lat() + ', Long: ' + pointArray[i].lng()+ '</b><br/>';
              }
              $('#info').html(result); 

              /*var lastEl = pointArray[pointArray.length-1];
              alert(lastEl)
              if(lastEl.length>1){
              undo_redo.push(lastEl.pop());
              } */    
          }
      }
      function removeLine(){
        polylines.remove(polylines.size() - 1)
      }
函数initMap(){
var map=new google.maps.map(document.getElementById('map'){
中心:{纬度:-34.397,液化天然气:150.644},
缩放:8
});
var drawingManager=new google.maps.drawing.drawingManager({
drawingMode:google.maps.drawing.OverlyType.MARKER,
drawingControl:对,
drawingControlOptions:{
位置:google.maps.ControlPosition.TOP_CENTER,
绘图模式:[“多边形”、“多段线”]
},
循环操作:{
strokeColor:“#00DB00”,
fillColor:'绿色',
不透明度:0.05,
冲程重量:5,
可点击:false,
是的,
zIndex:1
}
});
drawingManager.setMap(map);
google.maps.event.addListener(drawingManager,'OverlyComplete',函数(事件)
{
if(event.type==='marker')console.log('Lat:'+event.overlay.position.Lat()+',Long:'+event.overlay.position.lng())
else displayPolyAtlng(event.overlay.getPath().b);
});
函数DisplayPolyAtlng(点阵列)
{调试器
var结果=”;
对于(var i=0;i;
}
$('#info').html(结果);
/*var lastEl=pointArray[pointArray.length-1];
警报(拉斯泰尔)
如果(最后长度>1){
撤消重做推送(lastEl.pop());
} */    
}
}
函数removeLine(){
polylines.remove(polylines.size()-1)
}

小提琴:

基本上是@geocodezip说的

保留对已添加形状的引用:

var overlays = [];
然后,您可以在
overlycomplete
事件中推送最新的覆盖对象
事件。覆盖

google.maps.event.addListener(drawingManager, 'overlaycomplete', function(event) {
   overlays.push(event.overlay); // store reference to added overlay
});
最后,单击“撤消”按钮,通过
setMap(null)
隐藏覆盖:

请注意,这不会删除对象,只是将其隐藏在地图上不显示。如果要完全删除覆盖,还应将其设置为null

如果您想添加重做按钮,您可以再次显示它们(在这种情况下,您不会像我所做的那样
pop
它们)。有关如何实现此功能的示例,请参见


更新的演示:

我上面的回答解释了如何完全删除最近的覆盖

但是,要删除最近绘制的多段线线段,可以在
overlycomplete
事件对象中存储对形状对象的引用:

google.maps.event.addListener(drawingManager, 'overlaycomplete', function(event) {
   overlays.push(event); // store reference to added overlay
});
然后,使用该函数确定添加的对象是否为多段线,用
overlay.getpath()
抓取路径数组,最后调用其
pop()
函数删除最后一条线段:

// undo the last line segment of a polyline
function removeLineSegment() {

  var lastOverlay = overlays.length > 0 ? overlays[overlays.length - 1] : null;    

  if (lastOverlay && lastOverlay.type === "polyline") {
    var path = lastOverlay.overlay.getPath();
    path.pop(); // remove last line segment
  }
}

演示:

我认为这是不可能的。新的谷歌地图对用户不友好!!是的,这是可能的。您必须编写代码以保留对添加的最后一个形状的引用。@krish这是可能的,如果您感兴趣,请参阅下面的答案。谢谢。但是它完全删除了图形,可以逐行删除吗?@user7397787您可以这样做
// undo the last line segment of a polyline
function removeLineSegment() {

  var lastOverlay = overlays.length > 0 ? overlays[overlays.length - 1] : null;    

  if (lastOverlay && lastOverlay.type === "polyline") {
    var path = lastOverlay.overlay.getPath();
    path.pop(); // remove last line segment
  }
}