Google地图绘制 - 通过拖动绘制线条或多边形

时间:2013-10-23 17:01:25

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

目前,您可以通过单击创建节点来在地图上绘制多边形或折线。但是,如果您想要遵循河流或海岸线等功能,这可能既乏味又无懈可击。

有没有人知道如何通过点击拖动鼠标,或点击开始,然后拖动路径,然后点击停止来绘制路径?

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

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

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

1 个答案:

答案 0 :(得分:12)

可能的工作流程:

    地图上的
  1. onmousedown将地图的draggable - 选项设置为false,创建Polyline - 实例并设置clickable - Polylinefalse

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

  4. 的路径
  5. onmouseup删除地图的mousemove - 侦听器,并将地图的draggable - 选项设置回true。您的Polyline已完成

  6. 如果您不想创建Polygon,请立即创建Polygon - 实例,将Polygon的路径设置为Polyline的路径并删除Polyline


  7. <强> <edit> : 建议只使用按下的鼠标按钮进行绘制,否则地图永远不会被拖动。

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

    代码段(来自关联的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>