将谷歌地图多边形/标记推送到阵列不推送任何数据

时间:2014-09-02 19:28:08

标签: javascript google-maps wkt

我正在使用Google Maps API v3创建工具。我需要覆盖一些多边形和标记,并清除它们。

我试图按照类似于this的示例 - 将多边形/标记推入数组,然后从数组中删除它们,从而删除它们。

然而,当我将多边形或标记推入我的数组时,结果数组值始终是“未定义的”,尽管我的多边形和标记在地图上正确显示。

注意:我正在使用wicket从我的数据库中读取WKT到谷歌地图。

下面的函数有问题 - 将一个id发送到functions.php,返回该ID的WKT,并将其映射 - 并且应该被推送到数组中,但不是。

我尝试将多边形/标记设置为变量,然后将其推送到数组,但这也无效。

var layersArr = [];

function getGeo(id){
    $.ajax({
        url: 'functions.php',
        type: 'POST',
        data: {
            request: 'getGeo',
            id: id
        },
        success: function(data){
            wkt.read(data);

            switch(wkt.type){
                case 'polygon':
                case 'multipolygon':
                    layersArr.push(new google.maps.Polygon(wkt.toObject()).setMap(map));
                    break;
                case 'point':
                    layersArr.push(new google.maps.Marker(wkt.toObject()).setMap(map));
                    break;
                default:
                    alert('Unrecognized wkt type');
                    return;
                    break;
            }
        },
        error: function(jqXHR, text, error){
            ajaxError(jqXHR, text, error);
        }
    });
}

1 个答案:

答案 0 :(得分:2)

这是因为setMap()根据Google Maps API v3没有返回值。

而不是:

layersArr.push(new google.maps.Polygon(wkt.toObject()).setMap(map));

你需要这样做:

var poly = new google.maps.Polygon(wkt.toObject());
layersArr.push(poly);
poly.setMap(map);