设置InfoWindows用于标记,并在循环中进行地理编码

时间:2013-01-02 08:45:39

标签: google-maps infowindow

以下代码正常运作。但它没有使用初始化的标准函数,这就是为什么我无法使用在线示例为地图上的每个地址制作自定义信息窗口。

如何定义它以使其正常工作?

var address = <?php echo json_encode($adr); ?>; //define address array here
var map = new google.maps.Map(document.getElementById('map'), {
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    zoom: 10
});    
var geocoder = new google.maps.Geocoder();
var image = 'http://www.site.com/images/hi.png';
var nbAddresses = address.length;
for (var i=0;i<nbAddresses;i++){
    geocoder.geocode({
        'address': address[i]
    }, 
    function(results, status) {
        if(status == google.maps.GeocoderStatus.OK) {
            new google.maps.Marker({
                position: results[0].geometry.location,
                map: map,
                icon: image,
                title:"Hello"
            });
            map.setCenter(results[0].geometry.location);
        }
    });
}    

1 个答案:

答案 0 :(得分:2)

以下是应该完成工作的Javascript

WORKING DEMO

<强>脚本:

geocoder.geocode({
        'address': add
    }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            mark = new google.maps.Marker({
                position: results[0].geometry.location,
                map: map
            });
            map.setCenter(results[0].geometry.location);
            setInfoWindow();
        }
    });

    function setInfoWindow() {
        google.maps.event.addListener(mark, 'click', function(event) {
            var iwindow = new google.maps.InfoWindow();
            iwindow.setContent(event.latLng.lat() + "," + event.latLng.lng());
            iwindow.open(map, this);

        });
    }

<强>更新 使用循环来演示如何在地理编码成功后为制作者分配标题值 -

FIDDLE

这里的关键是用于获取地址的循环变量在子函数的范围内是不可用的,因此您需要创建一个全局变量并将其递增以从标题的数组中获取新值。