Tho*_*mas 24 javascript events google-maps
我制作了一个使用绘图管理器的地图应用程序(并实现了可选择的形状).该程序的工作原理如下:在单击按钮后完成绘制多边形的路径时,将映射到多边形上.
在此过程之后编辑多边形时,我希望再次调用映射函数.但是我不能让这部分工作:
我尝试使用以下代码,但我总是收到错误,因为添加此侦听器时尚未选择任何形状.我能做什么?
google.maps.event.addListener(selectedShape, 'set_at', function() {
console.log("test");
});
google.maps.event.addListener(selectedShape, 'insert_at', function() {
console.log("test");
});
Run Code Online (Sandbox Code Playgroud)
重要的代码:
function showDrawingManager(){
var managerOptions = {
drawingControl: true,
drawingControlOptions: {
position: google.maps.ControlPosition.TOP_CENTER,
drawingModes: [google.maps.drawing.OverlayType.MARKER, google.maps.drawing.OverlayType.POLYLINE, google.maps.drawing.OverlayType.POLYGON]
},
markerOptions: {
editable: true,
icon: '/largeTDGreenIcons/blank.png'
},
polygonOptions: {
fillColor: "#1E90FF",
strokeColor: "#1E90FF",
},
polylineOptions: {
strokeColor: "#FF273A"
}
}
var drawingManager = new google.maps.drawing.DrawingManager(managerOptions);
drawingManager.setMap(map);
return drawingManager;
}
function clearSelection() {
if (selectedShape) {
console.log("clearSelection");
selectedShape.setEditable(false);
selectedShape = null;
numberOfShapes--;
}
}
function setSelection(shape) {
console.log("setSelection");
clearSelection();
selectedShape = shape;
shape.setEditable(true);
numberOfShapes++;
//getInformation(shape);
}
function initialize(){
//....
var drawingManager = showDrawingManager();
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);
}
});
Run Code Online (Sandbox Code Playgroud)
Tho*_*mas 27
我通过调用.getPath()并将侦听器放在每次单击一个形状时调用的侦听器中来解决它.我认为Google API文档不太清楚如何使用set_at,因此它对其他人也有用.
// 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() {
google.maps.event.addListener(newShape.getPath(), 'set_at', function() {
console.log("test");
});
google.maps.event.addListener(newShape.getPath(), 'insert_at', function() {
console.log("test");
});
setSelection(newShape);
});
Run Code Online (Sandbox Code Playgroud)
Raz*_*med 18
google.maps.event.addListener(yourPolygon.getPath(), 'insert_at', function(index, obj) {
//polygon object: yourPolygon
});
google.maps.event.addListener(yourPolygon.getPath(), 'set_at', function(index, obj) {
//polygon object: yourPolygon
});
Run Code Online (Sandbox Code Playgroud)
上面的代码对我有用.凡set_at当我们从一个突出显示的点(边)修改多边形区域被触发,insert_at当我们拖动点说,就是强调边缘之间被触发.
我在polygoncomplete事件中以及从数据库加载多边形后使用它们.它对他们来说很好.
chr*_*arx 10
为了避免set_at和拖动中提到的问题,我添加了以下内容,它在拖动绘图时禁用set_at的事件广播.我创建了一个扩展polygon类的类,并添加了这个方法:
ExtDrawingPolygon.prototype.enableCoordinatesChangedEvent = function(){
var me = this,
superClass = me.superClass,
isBeingDragged = false,
triggerCoordinatesChanged = function(){
//broadcast normalized event
google.maps.event.trigger(superClass, 'coordinates_changed');
};
// If the overlay is being dragged, set_at gets called repeatedly,
// so either we can debounce that or ignore while dragging,
// ignoring is more efficient.
google.maps.event.addListener(superClass, 'dragstart', function(){
isBeingDragged = true;
});
// If the overlay is dragged
google.maps.event.addListener(superClass, 'dragend', function(){
triggerCoordinatesChanged();
isBeingDragged = false;
});
// Or vertices are added to any of the possible paths, or deleted
var paths = superClass.getPaths();
paths.forEach(function(path, i){
google.maps.event.addListener(path, "insert_at", function(){
triggerCoordinatesChanged();
});
google.maps.event.addListener(path, "set_at", function(){
if(!isBeingDragged){
triggerCoordinatesChanged();
}
});
google.maps.event.addListener(path, "remove_at", function(){
triggerCoordinatesChanged();
});
});
};
Run Code Online (Sandbox Code Playgroud)
它为多边形本身添加了一个"coordinates_changed"事件,因此其他代码可以只监听一个漂亮的单一简化事件.
| 归档时间: |
|
| 查看次数: |
33142 次 |
| 最近记录: |