如何在鼠标点击谷歌地图上绘制多边形

时间:2017-09-11 06:41:24

标签: jquery google-maps

我试图在用户点击谷歌地图时绘制多边形,而不是硬编码 无法创建它。这是我的代码

function initMap() {
       var  mapDiv = document.getElementById('map');
        var mapOptions= {
          center: new google.maps.LatLng( 23.09024, -90.417924),
          zoom: 7,
          mapTypeId:google.maps.MapTypeId.ROADMAP
        };
        var map=new google.maps.Map(mapDiv,mapOptions)
          google.maps.event.addListener(map, 'click', function( event ){

          var Latitude=event.latLng.lat();
          var Longitude=event.latLng.lng(); 

          var destinations=new google.maps.MVCArray();
          destinations.push(new google.maps.LatLng(Latitude,Longitude));
          console.log(destinations)
          var polygonOptions={path:destinations,strokeColor:"#ff0000",fillColor:"00ff00"};
          var polygon=new google.maps.Polygon(polygonOptions);
          polygon.setMap(map);
          });
      }

小提琴:https://jsfiddle.net/vL6qpn4w/4/

任何想法?

2 个答案:

答案 0 :(得分:1)

我已修改 @user7397787 answer 以允许可拖动标记。

var poly;
var map;

function initMap() {
    map = new google.maps.Map(document.getElementById('map'), {
        zoom: 7,
        center: { lat: 41.879, lng: -87.624 }  // Center the map on Chicago, USA.
    });

    poly = new google.maps.Polyline({
        strokeColor: '#00DB00',
        strokeOpacity: 1.0,
        strokeWeight: 3,
        fillColor: 'green',
        fillOpacity: 0.05
    });
    poly.setMap(map);

    map.addListener('click', addLatLng);
}


function addLatLng(event) {
    var path = poly.getPath();
    if (path.length == 2) {
        var polygonOptions = { path: path, strokeColor: "#00DB00", fillColor: "green" };
        var polygon = new google.maps.Polygon(polygonOptions);
        polygon.setMap(map);
    }

    path.push(event.latLng);
    var index = -1;

    function dragStartEvent(event) {
        const arr = path.getArray();
        index = arr.indexOf(event.latLng);

    }
    function dragEndEvent(event) {
        if (index > -1) {
            path.setAt(index, event.latLng);
        }
    }
    var marker = new google.maps.Marker({
        position: event.latLng,
        title: '#' + path.getLength(),
        map: map,
        draggable: true,
    });
    marker.addListener('dragstart', dragStartEvent);
    marker.addListener('dragend', dragEndEvent);
}
/* Always set the map height explicitly to define the size of the div
 * element that contains the map. */
#map {
  height: 100%;
}
/* Optional: Makes the sample page fill the window. */
html, body {
  height: 100%;
  margin: 0;
  padding: 0;
}
<div id="map"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initMap">
</script>

答案 1 :(得分:0)

获得解决方案:

<script>

      var poly;
      var map;

      function initMap() {
        map = new google.maps.Map(document.getElementById('map'), {
          zoom: 7,
          center: {lat: 41.879, lng: -87.624}  // Center the map on Chicago, USA.
        });

        poly = new google.maps.Polyline({
          strokeColor: '#00DB00',
          strokeOpacity: 1.0,
          strokeWeight: 3,
          fillColor: 'green',
          fillOpacity: 0.05
        });
        poly.setMap(map);

        map.addListener('click', addLatLng);
       }


      function addLatLng(event) {debugger
        var path = poly.getPath();
        if(path.length==4){
          var polygonOptions={path:path,strokeColor:"#00DB00",fillColor:"green"};
          var polygon=new google.maps.Polygon(polygonOptions);
          polygon.setMap(map);
          }

          path.push(event.latLng);
          var marker = new google.maps.Marker({
          position: event.latLng,
          title: '#' + path.getLength(),
          map: map
        });
      }
    </script>