根据缩放级别添加或删除多边形

时间:2015-06-16 18:35:33

标签: javascript google-maps

我正在尝试根据Google地图中的缩放级别添加和删除多边形。这是我用来检测缩放变化以添加或删除多边形的方法。

gpa <- txt[grep("GPA",txt)]
gpa <- strsplit(gpa, " ")
gpa <- matrix(
  as.numeric(
    t(
      as.data.frame(gpa)
      )[1:2, 2:3]
    ),ncol = 2)

问题是只添加了一个多边形,并且只删除了一个多边形。总共有3个多边形。如果删除google.maps.event.addListener(map, 'zoom_changed', function () { if (map.getZoom() <= 13) { polygons.setMap(null); } else { polygons.setMap(map); } }); 事件侦听器,则所有多边形都会显示正常,但我无法根据缩放更改删除它们。

放大一次以查看多边形。缩小两次以删除多边形。

JSFiddle可以在这里看到:http://jsfiddle.net/pc7tux02/5/

2 个答案:

答案 0 :(得分:1)

您只显示并隐藏代码中的最后一个多边形。 该解决方案基于多边形阵列和用于显示或隐藏所有多边形的角色。有关完整功能的版本,请参阅此jsfiddle

这些是主要部分提取

var polygons = [] ;
var poly;
............

for (var j = 0; j < coords.length; j++) {
        var pt = new google.maps.LatLng(coords[j][1], coords[j][0]);
        bounds.extend(pt);
        path.push(pt);
    }
    poly = new google.maps.Polygon({
    path: path,
    strokeColor: "#FF0000",
    strokeOpacity: 5,
    strokeWeight: 5,
    fillColor: "#FF0000",
    fillOpacity: 0.5
});
polygons.push(poly);
path = [];

}

.........

 google.maps.event.addListener(map, 'zoom_changed', function () {
    if (map.getZoom() <= 13) {
        for (var k = 0; k < polygons.length; k++){
           polygons[k].setMap(null);
        }
    } else {
          for (var k = 0; k < polygons.length; k++){
           polygons[k].setMap(map);
        }     
    }
});

答案 1 :(得分:1)

问题是您的polygons仅存储应用中的最后一个多边形。相反,将它变成一个数组,当你想要更新它时,使用.foreach循环遍历数组。

演示:http://jsfiddle.net/9vLcbm04/