【发布时间】:2016-02-17 10:32:29
【问题描述】:
我已阅读有关此主题的所有帖子,并从 (How to delete all the shape after draw) 和 here 获得灵感
我创建了这个CodePen to demonstrate the issue. Please open your developer console to have a better insight.。
var runMaps = function() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
map = new google.maps.Map(document.getElementById('map'), {
center: {
lat: position.coords.latitude,
lng: position.coords.longitude
},
zoom: 18
});
var all_overlays = [];
var selectedShape;
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.MARKER,
google.maps.drawing.OverlayType.CIRCLE,
google.maps.drawing.OverlayType.POLYGON,
google.maps.drawing.OverlayType.RECTANGLE
]
},
markerOptions: {
icon: 'images/beachflag.png'
},
circleOptions: {
fillColor: '#ffff00',
fillOpacity: 0.2,
strokeWeight: 3,
clickable: false,
editable: true,
zIndex: 1
},
polygonOptions: {
clickable: true,
draggable: true,
editable: true,
fillColor: '#ffff00',
fillOpacity: 1,
},
rectangleOptions: {
clickable: true,
draggable: true,
editable: true,
fillColor: '#ffff00',
fillOpacity: 0.5,
}
});
function clearSelection() {
if (selectedShape) {
selectedShape.setEditable(false);
selectedShape = null;
}
}
function setSelection(shape) {
clearSelection();
selectedShape = shape;
shape.setEditable(true);
google.maps.event.addListener(selectedShape.getPath(), 'insert_at', getPolygonCoords(shape));
google.maps.event.addListener(selectedShape.getPath(), 'set_at', getPolygonCoords(shape));
}
function deleteSelectedShape() {
if (selectedShape) {
selectedShape.setMap(null);
}
}
function deleteAllShape() {
for (var i = 0; i < all_overlays.length; i++) {
all_overlays[i].overlay.setMap(null);
}
all_overlays = [];
}
function CenterControl(controlDiv, map) {
// Set CSS for the control border.
var controlUI = document.createElement('div');
controlUI.style.backgroundColor = '#fff';
controlUI.style.border = '2px solid #fff';
controlUI.style.borderRadius = '3px';
controlUI.style.boxShadow = '0 2px 6px rgba(0,0,0,.3)';
controlUI.style.cursor = 'pointer';
controlUI.style.marginBottom = '22px';
controlUI.style.textAlign = 'center';
controlUI.title = 'Select to delete the shape';
controlDiv.appendChild(controlUI);
// Set CSS for the control interior.
var controlText = document.createElement('div');
controlText.style.color = 'rgb(25,25,25)';
controlText.style.fontFamily = 'Roboto,Arial,sans-serif';
controlText.style.fontSize = '16px';
controlText.style.lineHeight = '38px';
controlText.style.paddingLeft = '5px';
controlText.style.paddingRight = '5px';
controlText.innerHTML = 'Delete Selected Area';
controlUI.appendChild(controlText);
// Setup the click event listeners: simply set the map to Chicago.
controlUI.addEventListener('click', function() {
deleteSelectedShape();
});
}
drawingManager.setMap(map);
var getPolygonCoords = function(newShape) {
console.log("We are one");
var len = newShape.getPath().getLength();
for (var i = 0; i < len; i++) {
console.log(newShape.getPath().getAt(i).toUrlValue(6));
}
};
google.maps.event.addListener(drawingManager, 'overlaycomplete', function(event) {
all_overlays.push(event);
if (event.type !== google.maps.drawing.OverlayType.MARKER) {
drawingManager.setDrawingMode(null);
//Write code to select the newly selected object.
var newShape = event.overlay;
newShape.type = event.type;
google.maps.event.addListener(newShape, 'click', function() {
setSelection(newShape);
});
setSelection(newShape);
}
});
var centerControlDiv = document.createElement('div');
var centerControl = new CenterControl(centerControlDiv, map);
centerControlDiv.index = 1;
map.controls[google.maps.ControlPosition.BOTTOM_CENTER].push(centerControlDiv);
});
}
};
问题
绘制 多边形 后,当我尝试使用边缘上的点对其进行编辑时,我收到一条错误消息,提示无法读取未定义的属性应用。
问题是什么?我该如何解决?对于示例codepen given,它工作得非常好,那为什么不适合我呢?
为了演示这个问题,我在上面给出了一个 codepen。
我需要将坐标列表保存在即将到来的后端,但 UI 已损坏。
感谢您的帮助。
【问题讨论】:
-
请提供一个Minimal, Complete, Tested and Readable example 来证明该问题。如果地理定位失败,则不会发生任何有用的事情,可能不需要地理定位来重现您的问题。
-
我已经给了它...在一个codepen中。我已经编辑了这个问题。请看一看。
-
地理定位也被删除 我知道代码是最少的,但我不能删除任何其他功能。我需要它来处理它。更简单的例子是示例 codepen,我从中获得了灵感。
-
非常感谢@geocodezip 我解决了。使用this
标签: google-maps-api-3 geofencing