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
}
}