将数组传递到Google地图地理编码器以在Infowindow中使用(多个地址)

时间:2014-02-19 17:53:51

标签: jquery arrays google-maps-api-3 google-geocoder

我正在尝试使用地理编码器功能在Google地图上创建地图标记。我正在对多个地址进行地理编码。我可以成功创建标记,但我还需要为每个标记创建一个信息窗口,显示有关该位置属性的各种不同信息。例如,我有一个以数组逗号分隔的价格信息。我已通过price [i]数组,但我无法检索每个价格并将其分配给正确的信息窗口。我得到的只是分配给每个标记的数组中的最后一个价格。我试图通过使用回调函数调用地理编码器来实现它,因为我无法直接将价格数组传递到地理编码器中 - 它返回未定义。有人可以帮忙吗?

地址数组看起来像[address1,address2,address3]

价格数组看起来像这样[500000,400000,300000]

var addresses   = address.split(','),
    prices      = price.split(',');

    var infowindow = new google.maps.InfoWindow();

    for (var i = 0; i < addresses.length; i++) {
        geocoder.geocode({'address': addresses[i]}, makeCallback(i));
    }

    function makeCallback(addressIndex) {

        var geocodeCallBack = function(results, status) {

            if (status != google.maps.GeocoderStatus.OK) {
                console.log("Geocode was not successful for the following reason: " + status);
            } else {
                var point = results[0].geometry.location;

                var i = addressIndex;
                var marker = new google.maps.Marker({
                    map: map,
                    title: "",
                    position: results[0].geometry.location
                });
                infowindow.setContent('<p>'+ prices[i] + '</p>');

                //Open the infowindow
                google.maps.event.addListener(marker, 'click', function() {
                    infowindow.open(map, this);
                });

                main.setMap(map, point, titles[i], bounds);
            }
        }

    return geocodeCallBack;
}

1 个答案:

答案 0 :(得分:2)

您为每个标记设置了相同infowindow的内容,因此无论点击哪个标记,它都显示相同的内容(分配了最后一个值)。

var infowindow = new google.maps.InfoWindow();行移至infowindow.setContent('<p>'+ prices[i] + '</p>');之前的右侧,并显示正确的值。

或者,要在所有标记之间共享一个InfoWindow(因此一次只能看到一个标记):

问题是,您在创建标记时设置infowindow的内容,而不是在点击它们时设置内容。将infowindow.setContent('<p>'+ prices[i] + '</p>');移至infowindow.open(map, this);之前的标记点击功能中。 在这种情况下,请将infowindow声明保留在原位。