Javascript 谷歌地图绘制——通过拖动绘制直线或多边形
当前,可以通过单击在地图上绘制多边形或多段线,从而创建节点。然而,如果您想跟随河流或海岸线等特征,这可能既单调又不准确 有人知道一种方法可以通过单击拖动鼠标,或者单击开始,然后拖动路径,然后单击停止来绘制路径吗 我已经看过DrawingManager和MouseeEvent,但我还没有看到任何有希望的东西 有没有一种方法可以根据事件(如单击和鼠标移动)连接图形 这将允许更准确、更快速的功能。可能的工作流程:Javascript 谷歌地图绘制——通过拖动绘制直线或多边形,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,当前,可以通过单击在地图上绘制多边形或多段线,从而创建节点。然而,如果您想跟随河流或海岸线等特征,这可能既单调又不准确 有人知道一种方法可以通过单击拖动鼠标,或者单击开始,然后拖动路径,然后单击停止来绘制路径吗 我已经看过DrawingManager和MouseeEvent,但我还没有看到任何有希望的东西 有没有一种方法可以根据事件(如单击和鼠标移动)连接图形 这将允许更准确、更快速的功能。可能的工作流程: onmousedown在地图上将地图的draggable-选项设置为false,创建一个
onmousedown
在地图上将地图的draggable
-选项设置为false
,创建一个Polyline
-实例,并将Polyline
的clickable
-选项设置为false
mousemove
-事件,每次它发生时,将返回的LatLng
推到多段线的路径上
onmouseup
删除映射的mousemove
-侦听器,并将映射的draggable
-选项设置回true
。您的多段线
已完成多边形
,请立即创建多边形
-实例,将多边形
的路径设置为多段线
的路径,然后删除多段线
:
建议只使用鼠标右键进行绘制,否则地图将永远无法绘制
演示:
代码片段:(来自链接的JSFIDLE)
函数初始化(){
变量映射选项={
缩放:14,
中心:新google.maps.LatLng(52.5498783,13.4252090999961),
mapTypeId:google.maps.mapTypeId.ROADMAP
};
map=new google.maps.map(document.getElementById('map_canvas'),
地图选项);
google.maps.event.addDomListener(map.getDiv(),'mousedown',函数(e){
//只需使用鼠标右键即可
如果(e.按钮!=2)返回;
//多边形
poly=新的google.maps.Polyline({
地图:地图,
可点击:false
});
//移动侦听器
var move=google.maps.event.addListener(映射'mousemove',函数(e){
poly.getPath().push(如latLng);
});
//鼠标侦听器
google.maps.event.addListenerOnce(映射,'mouseup',函数(e){
google.maps.event.removeListener(move);
if(document.getElementById('overlay')。值=='Polygon'){
var path=poly.getPath();
poly.setMap(空);
poly=新的google.maps.Polygon({
地图:地图,
路径:路径
});
}
});
});
}
google.maps.event.addDomListener(窗口“加载”,初始化)代码>
html,
身体{
身高:100%;
保证金:0
}
#地图画布{
身高:90%;
}
使用鼠标右键绘制覆盖图
多段线
多边形
@“Molle博士”,您为什么从来没有提供过真正的解决方案?这背后有什么哲学吗?在这种情况下,我会给出一个具体的IRL例子,而不是配方。我不认为他的解决方案是坏的。它能让我把事情想清楚。不过,有一个问题是,在绘图库中,有一个注释:“请注意,在地图上绘图时,google.maps.Map事件(如click和mousemove)被禁用。”我是否只使用浏览器事件侦听器?我需要使用谷歌地图的监听器来获取坐标,对吗?是的,你需要地图监听器。你不需要绘图库来实现它。@davidkonrad:你怎么了?这个解决方案有什么不真实的地方?因此,它既不是代码交付服务,也不是留下无保留评论的平台。这是一个编程社区。@Dr.Molle,在这种情况下,您很幸运地回答了一个能够理解的OP。因此,这不仅仅是为了帮助那些已经拥有巨大编程技能的人。这就是帮助人们,你必须在他们自己的层面上帮助他们,这样他们才能变得更好,甚至可能更上一层楼。所以,这并不是通过复制粘贴手册或泛型来帮助人们,即使那些拥有最多代表性的人的代表来自引用手册。但我喜欢你的答案,有时候我只是觉得你可以做得比引用链接、融合或类似链接更好。我来这里是为了帮助人们成为一个更好的程序员