【问题标题】:Polygons Overlap When Drawing on Google Maps在谷歌地图上绘图时多边形重叠
【发布时间】:2014-04-02 18:36:12
【问题描述】:

我有两个函数可以在 Google 地图中绘制多边形。但是,当您绘制第一个多边形,然后选择按钮来绘制第二个多边形时,它们都会被绘制。它们开始重叠。在这里查看我的 JSFiddle:http://jsfiddle.net/ECssN/1

以下是我用来绘制多边形的内容(来自 Google Maps API 文档):

function polygon1() {
    var polyOptions = {
        strokeColor: '#000000',
        strokeOpacity: 1.0,
        strokeWeight: 3,
        fillColor: "#F390F9",
        editable: true,
        draggable: true
    };
    poly = new google.maps.Polygon(polyOptions);
    poly.setMap(map);
    google.maps.event.addListener(map, 'click', addPolygon1);
}

function addPolygon1(event) {
    var path = poly.getPath();
    path.push(event.latLng);

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

当用户点击按钮绘制第二个多边形时,如何取消选择第一个多边形,反之亦然?

jQuery .unbind.removeAttr 是实现此目的的好方法吗?不知道如何继续。

感谢您的帮助。

【问题讨论】:

  • 当我单击 JSFiddle 中的多边形按钮时,没有绘制多边形。顺便说一句,我在 Chrome 上。
  • @Lindsay 我也在使用 Chrome,它们似乎在我的最后工作正常。嗯,不确定。我认为我的代码没有任何错误。

标签: javascript google-maps


【解决方案1】:

您必须将句柄保存到事件侦听器(用于第一个多边形按钮),然后在开始绘制第二个多边形时将其清除。见example at jsfiddle

handle01 = google.maps.event.addListener(map, 'click', addPolygon1);
...

function polygon2() {
    google.maps.event.removeListener(handle01);
    var polyOptions = {
    ...

你可以对第二个多边形做同样的事情。

【讨论】:

    【解决方案2】:

    最好的方法是将每个多边形存储到一个数组中,或者在你的情况下存储一个全局变量(你似乎有poly)。在设置多边形之前检查它是否存在,如果存在,则在设置新的之前取消设置地图。

    function polygon1() {
        var polyOptions = {
            strokeColor: '#000000',
            strokeOpacity: 1.0,
            strokeWeight: 3,
            fillColor: "#F390F9",
            editable: true,
            draggable: true
        };
        if( poly )                                        // <-----
            poly.setMap(null);                            // <-----
        poly = new google.maps.Polygon(polyOptions);
        poly.setMap(map);
        google.maps.event.addListener(map, 'click', addPolygon1);
    }
    
    function addPolygon1(event) {
        var path = poly.getPath();
        path.push(event.latLng);
    
        var marker = new google.maps.Marker({
            position: event.latLng,
            title: '#' + path.getLength(),
        });
    }
    

    【讨论】:

    • 我是否需要使用标志来检查它是否存在?另外,setMap(null) 不会从地图中删除那个多边形吗?
    • 听起来您想保留所有绘制的多边形形状。您可以将它们全部推入一个数组并使用arr[arr.length-1].setMap(null) 将它们从地图(和 DOM)中删除,然后再添加另一个。但是当您循环遍历数组并再次执行.setMap(map) 时,它们仍然能够被快速实例化。
    • 哦,我误解了你的问题。我同意所选的答案。
    猜你喜欢
    • 2012-09-12
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 2012-05-31
    • 2013-04-15
    • 2020-06-28
    • 2012-07-01
    相关资源
    最近更新 更多