Javascript 从谷歌地图drawingManager V3中删除多边形
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/11632402/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Removing polygon from google maps drawingManager V3
提问by Steve Smith
I have a user editable google map where users can draw an overlay polygon onto the map using the drawing manager. This works fine and the console logs the lat lngs I need. However, I need to add a button that will clear the map of the polygon so they can draw again if a mistake was made. My implementation code is pasted below:
我有一个用户可编辑的谷歌地图,用户可以在其中使用绘图管理器在地图上绘制覆盖多边形。这工作正常,控制台会记录我需要的经纬度。但是,我需要添加一个按钮来清除多边形的地图,以便在出错时可以再次绘制。我的实现代码贴在下面:
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(<?php echo $latitude ?>, <?php echo $longitude ?>);
var myOptions = {
zoom: <?php echo $zoomlevel ?>,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
marker = new google.maps.Marker({
map:map,
draggable:true,
animation: google.maps.Animation.DROP,
position: latlng
})
pos = marker.position;
//alert(pos);
document.getElementById("gpsite-surgery-latitude").value = pos.lat();
document.getElementById("gpsite-surgery-longitude").value = pos.lng();
google.maps.event.addListener(marker, "dragend", function() {
var myLatLng = marker.latLng;
pos = marker.position;
//alert(pos);
document.getElementById("gpsite-surgery-latitude").value = pos.lat();
document.getElementById("gpsite-surgery-longitude").value = pos.lng();
})
google.maps.event.addListener(map, 'zoom_changed', function() {
document.getElementById("gpsite-surgery-zoomlevel").value = map.getZoom();
});
var drawingManager = new google.maps.drawing.DrawingManager({
drawingMode: google.maps.drawing.OverlayType.MARKER,
drawingControl: true,
drawingControlOptions: {
position: google.maps.ControlPosition.TOP_CENTER,
drawingModes: [google.maps.drawing.OverlayType.POLYGON]
},
polygonOptions: {
fillColor: '#ffff00',
fillOpacity: 0.4,
strokeWeight: 3,
clickable: true,
zIndex: 1,
editable: false
}
});
google.maps.event.addListener(drawingManager, 'polygoncomplete', function (polygon) {
var coordinates = (polygon.getPath().getArray());
console.log(coordinates);
});
drawingManager.setMap(map);
});
There is also a marker on the map, you can ignore this.
地图上还有一个标记,你可以忽略这个。
回答by Tina CG Hoehr
Examine this code, it sounds exactly like what you are talking about, a button to delete the shape
检查这段代码,听起来和你说的一模一样,一个删除形状的按钮
http://gmaps-samples-v3.googlecode.com/svn-history/r282/trunk/drawing/drawing-tools.html
http://gmaps-samples-v3.googlecode.com/svn-history/r282/trunk/drawing/drawing-tools.html
Edit:above link is broken but I was able to find that code here.
编辑:上面的链接已损坏,但我可以在此处找到该代码。
// globals
var drawingManager;
var selectedShape;
...
function clearSelection() {
if (selectedShape) {
selectedShape.setEditable(false);
selectedShape = null;
}
}
function setSelection(shape) {
clearSelection();
selectedShape = shape;
shape.setEditable(true);
selectColor(shape.get('fillColor') || shape.get('strokeColor'));
}
function deleteSelectedShape() {
if (selectedShape) {
selectedShape.setMap(null);
}
}
google.maps.event.addListener(drawingManager, 'overlaycomplete', function(e) {
if (e.type != google.maps.drawing.OverlayType.MARKER) {
// Switch back to non-drawing mode after drawing a shape.
drawingManager.setDrawingMode(null);
// Add an event listener that selects the newly-drawn shape when the user
// mouses down on it.
var newShape = e.overlay;
newShape.type = e.type;
google.maps.event.addListener(newShape, 'click', function() {
setSelection(newShape);
});
setSelection(newShape);
}
});
// Clear the current selection when the drawing mode is changed, or when the
// map is clicked.
google.maps.event.addListener(drawingManager, 'drawingmode_changed', clearSelection);
google.maps.event.addListener(map, 'click', clearSelection);
google.maps.event.addDomListener(document.getElementById('delete-button'), 'click', deleteSelectedShape);
buildColorPalette();
}
回答by geocodezip
You need a reference to the polygon in the global context. Then in the click handler function for the button call polygon.setMap(null) (where polygon is a global reference to the polygon, can't tell if it is global or not from the incomplete snippet you posted)
您需要在全局上下文中引用多边形。然后在按钮的单击处理函数中调用polygon.setMap(null)(其中polygon 是对多边形的全局引用,无法从您发布的不完整片段中判断它是否是全局的)
回答by tonejac
For a single polygon overlay I did this:
对于单个多边形叠加,我这样做了:
var _myPolygon; // global variable to store the polygon instance
google.maps.event.addListener(drawingManager, 'overlaycomplete', function(e) {
_myPolygon = e.overlay;
});
$('#delete-button').on('click', function() {
_myPolygon.setMap(null);
});