我的谷歌地图中有两个选项。
- >一个是多边形,另一个是绘制线。
现在我正在尝试在我的页面中执行撤消功能。当我点击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)
}
答案 0 :(得分:3)
基本上@geocodezip说...
保留对添加的形状的引用:
var overlays = [];
然后,您可以在event.overlay
事件中推送最新的叠加层对象overlaycomplete
:
google.maps.event.addListener(drawingManager, 'overlaycomplete', function(event) {
overlays.push(event.overlay); // store reference to added overlay
});
最后,点击“撤消”按钮,通过setMap(null)
隐藏叠加层:
// undo last overlay action
function removeLine() {
var lastOverlay = overlays.pop();
if (lastOverlay) lastOverlay.setMap(null);
}
请注意,这并不会删除该对象,只是将其隐藏在地图上。如果要完全删除叠加层,则应将其设置为null。
你可以再次显示它们 - 如果你想添加一个重做按钮(在这种情况下,你不会像我那样pop
它们。有关如何实现此目的的示例,请参阅https://developers.google.com/maps/documentation/javascript/examples/polyline-remove。
答案 1 :(得分:1)
我的上述答案解释了如何完全删除最新的叠加层。
但是要删除最近绘制的折线的线段,您可以在overlaycomplete
事件对象中存储对形状对象的引用:
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
}
}