Google地图地图的打印地址

时间:2017-11-16 13:53:48

标签: javascript google-maps

我需要在这里重新安排代码,但我无法弄明白。我试图将地理编码的街道地址放在弹出窗口中。我知道它与函数之外的变量访问有关,但我现在只是移动代码而无处可去。

请参阅代码中的两个注释行。

map = new google.maps.Map(document.getElementById('map'), {
    zoom: 10,
    center: new google.maps.LatLng(37.725685, -122.156830),
    mapTypeId: google.maps.MapTypeId.ROADMAP
});
var places = <%= @locations.to_json.html_safe %>
var infowindow = new google.maps.InfoWindow();
var marker, i;

for (i = 0; i < places.length; i++) {
    marker = new google.maps.Marker({
        position: new google.maps.LatLng(places[i].lat, places[i].lng),
        map: map
    });


    var lat = (places[i].lat);
    var lng = (places[i].lng);

    var geocoder = new google.maps.Geocoder();

    geocoder.geocode({
        'location': new google.maps.LatLng(places[i].lat, places[i].lng)
    }, function (results, status) {
        if (status === 'OK') {

            // THIS CONSOLE LOG WORKS.  IT PRINTS THE ADDRESS AS EXPECTED
            console.log(results[0].formatted_address);

        }
    });

    google.maps.event.addListener(marker, 'click', (function (marker, i) {

        return function () {
            infowindow.setContent(places[i].location_name + " <br /> " +
                places[i].location_description + " <br /> " +

                //HERE the variable "results" throws a Reference error, not defined
                results[0].formatted_address);
            infowindow.open(map, marker);
        }
    })(marker, i));
}

1 个答案:

答案 0 :(得分:1)

results作为来自geocoder.geocode()函数的回调传递,但您在google.maps.event.addListener函数中引用它。

如果您坚持使用自己的结构,请将addListener来电置于if ( status === 'OK' ) {区块。

简短的回答是 - 你有一个范围问题,因为你试图在另一个函数中访问一个函数的参数。