从Google Map中删除/隐藏美国各州的多边形?

时间:2015-05-20 17:06:25

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

我在某些美国国家/地区的Google地图中创建了多边形叠加层。它们在初始化地图时从xml文件加载。一旦用户进行搜索,我一直试图找出一种删除或隐藏多边形形状的方法。这是我正在进行的工作的链接,下面是我用于在地图初始化期间加载多边形的代码。

Google Map with Polygon shapes of USA States

function initialize() {

    map = new google.maps.Map(document.getElementById("map"), {
        center: new google.maps.LatLng(38, -97.5),
        zoom: 5,
        mapTypeId: 'terrain',
        mapTypeControl: false,
        panControl: false,
        streetViewControl: false,
        backgroundColor: '#eee2b2',
        zoomControl: true,
        zoomControlOptions: {
            style: google.maps.ZoomControlStyle.SMALL,
            position: google.maps.ControlPosition.RIGHT_BOTTOM
        },
    });

    map.setOptions({styles: vintagestyle});
    infobox = new InfoBox(boxoptions);
    map.overlayMapTypes.insertAt(
    0, new CoordMapType(new google.maps.Size(400, 400)));

    jQuery.get("js/account_locator/current_states.xml", {}, function(data) {
        jQuery(data).find("state").each(function() {
            var colour = '#835c0e';
            var points = this.getElementsByTagName("point");
            var pts = [];
            for (var i = 0; i < points.length; i++) {
                pts[i] = new google.maps.LatLng(parseFloat(points[i].getAttribute("lat")), parseFloat(points[i].getAttribute("lng")));
                }
            var poly = new google.maps.Polygon({
                paths: pts,
                strokeColor: '#eee2b2',
                strokeOpacity: 0.7,
                strokeWeight: 1,
                fillColor: colour,
                fillOpacity: 0.2,
                clickable: false
            });
            polys.push(poly);
            poly.setMap(map);
        });
    });

}

google.maps.event.addDomListener(window, 'load', initialize);

我已经在网上完成了很多搜索但却无法正常工作。隐藏多边形的标准方法似乎是

poly.setMap(null);

但无论我在哪里放置代码,这根本不起作用。不确定它是否与我如何加载多边形(初始化期间),有多少多边形,或者它是否与代码的构造方式有关。我根本不是一个JavaScript专家,所以任何帮助都将非常感激。我花了一个星期的时间试图解决这个问题并且无法解决问题。

1 个答案:

答案 0 :(得分:1)

您在哪里定义polys

polys应该是一个数组。

var polys = new Array();

然后你将每个poly推送到polys数组,这很好。如果要隐藏每个Polygon,请遍历polys数组并删除每个Polygon:

for (var i=0; i<polys.length; i++) {

    polys[i].setMap(null);
}