0

一旦瓷砖加载到地图上,我可以在 5 秒后清除多边形,但是当我尝试再次构建多边形时,多边形是由原始数据生成的。我想使用新的数据集。

我究竟做错了什么?

抱歉问了这么多问题。我在学习 API 时获得了很多乐趣。

先感谢您。

    var map;

    function initialize() { 
        var kansas_city = new google.maps.LatLng(39.316858,-94.963194);
        var mapOptions = {
        zoom: 13,
        center: kansas_city,
        mapTypeId: google.maps.MapTypeId.TERRAIN
        };
        map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);

        google.maps.event.addListener(map, 'tilesloaded', function() {
            setTimeout(function() { removeSectors() }, 3000);
            setTimeout(function() { updateMap() }, 4000);
            });     
    }

    function removeSectors() {
        if ( allPolygons ) {
            for ( i = 0; i < allPolygons.length; i++ ) {
                allPolygons[i].setMap(null);
            }
        allPolygons.length = 0;
        }
    }

    var data;
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'json_template.json', true);
    xhr.onload = function() {
        data = JSON.parse(xhr.responseText)
        sector_callback(data);
    };
    xhr.send();

    function updateMap() {
        var data;
        var xhr = new XMLHttpRequest();
        xhr.open('GET', 'json_template1.json', true);
        xhr.onload = function() {
            data = JSON.parse(xhr.responseText)
            sector_callback(data);
        };
        xhr.send();
    }

    function createClickablePoly(poly, html) {
    google.maps.event.addListener(poly, 'click', function(evt) {
        infowindow.setContent(html);
        infowindow.setPosition(evt.latLng);
        infowindow.open(map);
        });
    }
    var infowindow = new google.maps.InfoWindow({});        

    function sector_callback() {
        var bounds = new google.maps.LatLngBounds();        
        for (var i = 0, len = data.features.length; i < len; i++) {
            var coords = data.features[i].geometry.coordinates[0];
            siteNames = data.features[i].properties.Name; // added for site names
            var path = [];
        for ( var j = 0, len2 = coords.length; j < len2; j++ ){ // pull out each     set of coords and create a map object
            var pt = new google.maps.LatLng(coords[j][1], coords[j][0])
            bounds.extend(pt);
            path.push(pt);

        }

        var polygons = new google.maps.Polygon({
        path: path,
            strokeColor: "#000000",
            strokeOpacity: 0.8,
            strokeWeight: 1,
            fillColor: "#000000",
            fillOpacity: 0.35,
        map: map
        });
        createClickablePoly(polygons, siteNames);
        //console.debug(siteNames);

        google.maps.event.addListener(polygons, 'mouseover', function() {
        var currentPolygon = this;

        currentPolygon.setOptions({ 
            fillOpacity: 0.45,
            fillColor: "#FF0000"
            })
        });

        google.maps.event.addListener(polygons, 'mouseout', function() {
        var currentPolygon = this;
        currentPolygon.setOptions({ 
            fillOpacity: 0.35,
            fillColor: "#000000"
            })
        });

        allPolygons.push(polygons);
        }


    }
    var allPolygons = [];
4

1 回答 1

1

将 tilesloaded 事件移动到初始化函数中。正如它所坐的那样,您将添加与多边形一样多的侦听器,并且它们都将尝试清除/更新地图。

于 2012-11-02T18:33:29.723 回答