谷歌地图绘制多边形并删除先前的多边形。

4
我试图在用户选择多边形绘制按钮以绘制新多边形时删除现有的多边形。 它与 drawingManager.setMap(null); 有关,但我无法使其在我的代码中工作。我尝试了很多方法,但是无法解决它。
信息: 页面加载时,绘图模式默认设置为多边形:drawingMode: google.maps.drawing.OverlayType.POLYGON 用户可以绘制一个多边形来标记一个区域。当多边形完成时,DrawingMode 设置为 null:drawingManager.setDrawingMode(null); 并将坐标放入输入字段以便稍后通过表单将它们保存到数据库中。
请问有人能帮帮我吗?以下是我的代码:
var map;
var drawingManager;    

function initialize() {
var myLatlng = new google.maps.LatLng(51.51686166794058, 3.5945892333984375);
var mapOptions = {
    zoom: 9,
    center: myLatlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
}

//Getting map DOM element
var mapElement = document.getElementById('map_canvas');

map = new google.maps.Map(map_canvas, mapOptions);

drawingManager = new google.maps.drawing.DrawingManager({
    drawingMode: google.maps.drawing.OverlayType.POLYGON,
    drawingControl: true,
    drawingControlOptions: {
        position: google.maps.ControlPosition.TOP_CENTER,
        drawingModes: [google.maps.drawing.OverlayType.POLYGON]
    },
    polygonOptions: {
        editable: true,
        draggable: true
    }
});

drawingManager.setMap(map);

// Add a listener for creating new shape event.
google.maps.event.addListener(drawingManager, "overlaycomplete", function(event) {
    var newShape = event.overlay;
    newShape.type = event.type;
    if(drawingManager.getDrawingMode()) {
        drawingManager.setDrawingMode(null);
    }

});

// Add a listener for the "drag" event.
google.maps.event.addListener(drawingManager, "overlaycomplete", function(event){
    overlayDragListener(event.overlay);
    $('#vertices').val(event.overlay.getPath().getArray());
});
}    

function overlayDragListener(overlay) {
google.maps.event.addListener(overlay.getPath(), 'set_at', function(event){
    $('#vertices').val(overlay.getPath().getArray());
});
google.maps.event.addListener(overlay.getPath(), 'insert_at', function(event){
    $('#vertices').val(overlay.getPath().getArray());
});
}

google.maps.event.addDomListener(window, 'load', initialize);
1个回答

11

两件事情:

  1. 添加一个全局数组(或变量)以允许访问形状
  2. 添加一个drawingmode_changed事件处理程序,当绘图模式被改回非空时,删除任何现有的多边形。
var shapes = [];

google.maps.event.addListener(drawingManager, "drawingmode_changed", function() {
    if (drawingManager.getDrawingMode() != null) {
      for (var i=0; i < shapes.length; i++) {
        shapes[i].setMap(null);
      }
      shapes = [];
    }
});

演示代码

可运行的代码片段:

var map;
var drawingManager;
var shapes = [];

function initialize() {
  var myLatlng = new google.maps.LatLng(51.51686166794058, 3.5945892333984375);
  var mapOptions = {
    zoom: 9,
    center: myLatlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }

  //Getting map DOM element
  var mapElement = document.getElementById('map_canvas');

  map = new google.maps.Map(map_canvas, mapOptions);

  drawingManager = new google.maps.drawing.DrawingManager({
    drawingMode: google.maps.drawing.OverlayType.POLYGON,
    drawingControl: true,
    drawingControlOptions: {
      position: google.maps.ControlPosition.TOP_CENTER,
      drawingModes: [google.maps.drawing.OverlayType.POLYGON]
    },
    polygonOptions: {
      editable: true,
      draggable: true
    }
  });

  drawingManager.setMap(map);

  // Add a listener for creating new shape event.
  google.maps.event.addListener(drawingManager, "overlaycomplete", function(event) {
    var newShape = event.overlay;
    newShape.type = event.type;
    shapes.push(newShape);
    if (drawingManager.getDrawingMode()) {
      drawingManager.setDrawingMode(null);
    }

  });

  // add a listener for the drawing mode change event, delete any existing polygons
  google.maps.event.addListener(drawingManager, "drawingmode_changed", function() {
    if (drawingManager.getDrawingMode() != null) {
      for (var i = 0; i < shapes.length; i++) {
        shapes[i].setMap(null);
      }
      shapes = [];
    }
  });


  // Add a listener for the "drag" event.
  google.maps.event.addListener(drawingManager, "overlaycomplete", function(event) {
    overlayDragListener(event.overlay);
    $('#vertices').val(event.overlay.getPath().getArray());
  });
}

function overlayDragListener(overlay) {
  google.maps.event.addListener(overlay.getPath(), 'set_at', function(event) {
    $('#vertices').val(overlay.getPath().getArray());
  });
  google.maps.event.addListener(overlay.getPath(), 'insert_at', function(event) {
    $('#vertices').val(overlay.getPath().getArray());
  });
}

google.maps.event.addDomListener(window, 'load', initialize);
html,
body,
#map_canvas {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=drawing&key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
<div id="map_canvas" style="border: 2px solid #3872ac;"></div>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接