【问题标题】:Google Maps Draw -- draw line or polygon by draggingGoogle Maps Draw - 通过拖动绘制线条或多边形
【发布时间】:2013-10-23 17:01:24
【问题描述】:

目前,您可以通过单击在地图上绘制多边形或折线,这会创建一个节点。但是,如果您想跟踪河流或海岸线等要素,这可能既乏味又不准确。

有谁知道可以通过单击拖动鼠标或单击开始,然后拖动路径,然后单击停止来绘制路径的方法?

我查看了 DrawingManager 和 MouseEvent,但还没有看到任何有希望的东西。

有没有办法根据click和mouseMove等事件来连接绘图?

这将允许更准确和快速的功能。

【问题讨论】:

标签: javascript google-maps google-maps-api-3


【解决方案1】:

可能的工作流程:

  1. 地图上onmousedown设置地图的draggable-option为false,创建Polyline-Instance并将Polylineclickable-option设置为@987654328 @

  2. 观察地图的mousemove-事件,每次发生时将返回的LatLng推送到Polyline的路径中

  3. onmouseup 删除映射的mousemove-listener 并将映射的draggable-选项设置回true。你的Polyline已经完成了

  4. 当你不想创建Polygon时,现在创建一个Polygon-实例,将Polygon的路径设置为Polyline的路径并删除Polyline


<edit>: 建议仅使用按下鼠标右键进行绘制,否则地图将永远无法拖动。

演示:http://jsfiddle.net/doktormolle/YsQdh/

code sn-p:(来自链接的 jsfiddle)

function initialize() {
  var mapOptions = {
    zoom: 14,
    center: new google.maps.LatLng(52.5498783, 13.425209099999961),
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  map = new google.maps.Map(document.getElementById('map_canvas'),
    mapOptions);
  google.maps.event.addDomListener(map.getDiv(), 'mousedown', function(e) {
    //do it with the right mouse-button only
    if (e.button != 2) return;
    //the polygon
    poly = new google.maps.Polyline({
      map: map,
      clickable: false
    });
    //move-listener
    var move = google.maps.event.addListener(map, 'mousemove', function(e) {
      poly.getPath().push(e.latLng);
    });
    //mouseup-listener
    google.maps.event.addListenerOnce(map, 'mouseup', function(e) {
      google.maps.event.removeListener(move);
      if (document.getElementById('overlay').value == 'Polygon') {
        var path = poly.getPath();
        poly.setMap(null);
        poly = new google.maps.Polygon({
          map: map,
          path: path
        });
      }
    });

  });
}

google.maps.event.addDomListener(window, 'load', initialize);
html,
body {
  height: 100%;
  margin: 0
}
#map_canvas {
  height: 90%;
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
Use the right mouse-button to draw an overlay
<br/>
<select id="overlay">
  <option value="Polyline">Polyline</option>
  <option value="Polygon">Polygon</option>
</select>
<div id="map_canvas"></div>

【讨论】:

  • @"Dr.Molle",您为什么不提供真正的解决方案?这背后有某种哲学吗?在这种情况下,我会给出一个具体的 IRL 示例,而不是食谱。
  • 我不认为他的解决方案不好。它让我思考问题。但是,一个问题是在绘图库中,有一个注释:“请注意,在地图上绘图时,google.maps.Map 事件,例如 click 和 mousemove 被禁用。”我只使用浏览器事件侦听器吗?我需要使用 Google 地图的侦听器来获取坐标,对吧?
  • 是的,您需要 Maps-Listeners。你不需要绘图库来实现它。
  • @davidkonrad:你怎么了?这个解决方案有什么不真实的? SO 既不是代码交付服务,也不是留下不合格 cmets 的平台。这是一个编程社区。​​span>
  • @Dr.Molle,在这种情况下,你很幸运能回答一个实际上能够理解的 OP。 SO 不仅仅是帮助那些已经拥有强大编程技能的人。 SO 是关于帮助人们,你必须在他们自己的水平上帮助人们,这样他们才能变得更好——也许还能更上一层楼。所以不是通过复制粘贴手册或泛型来帮助人们,即使那些拥有最多代表的人的代表来自引用手册。但我喜欢你的回答,有时我只是认为你可以做得比参考链接、融合表或类似的更好。我来这里是为了帮助人们成为更好的程序员
猜你喜欢
  • 2011-03-24
  • 1970-01-01
  • 2011-03-08
  • 2012-06-08
  • 2023-02-04
  • 1970-01-01
  • 2020-12-14
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多