0

我正在开发一个脚本来通过地址从谷歌地图中获取 latlng。

如果我 alert(jsonarr.lat); 在函数内部放一个,map_address()我会得到正确的值,但是如果我将结果分配给这样的变量:

var coord = map_address('address');

alert(coord.lat);   

我得到错误coord is undefined

function map_address(addr)
    {

        var input_address = addr;
        var geocoder = new google.maps.Geocoder();
        geocoder.geocode( { address: input_address }, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                var lat = results[0].geometry.location.lat();
                var lng = results[0].geometry.location.lng();


                      jsonarr={'lat':lat,'lng':lng}
                      alert(jsonarr.lat);
                      return jsonarr;           
            } else {
                alert("Nessuna coordinata trovata da questo indirizzo!");
            }
        });
    }
4

3 回答 3

1

geocoder.geocode(..);函数是异步的,因为它在内部包装了另一个函数,稍后将在地理编码操作完成时调用该函数。

因为这个map_address(...)总会回来undefined

于 2012-11-22T17:10:59.370 回答
1

试试这样:

function map_address(addr, callback) {

    var input_address = addr;
    var geocoder = new google.maps.Geocoder();
    geocoder.geocode( { address: input_address }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var lat = results[0].geometry.location.lat();
            var lng = results[0].geometry.location.lng();


                               jsonarr={'lat':lat,'lng':lng}
                               alert(jsonarr.lat);
                               callback(jsonarr) ;


                            }
        else {
            alert("Nessuna coordinata trovata da questo indirizzo!");
            }
        });
}
map_address("hogehoge", function(result){
  alert(result)
});
于 2012-11-22T17:13:11.823 回答
0

谢谢大家的回答,我把我所有的代码都放在了回调中,一切正常,这是最终的代码。

   function map_address(addr,callback)
        {

            var input_address = addr;
            var geocoder = new google.maps.Geocoder();
            geocoder.geocode( { address: input_address }, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) 
                {
                    var lat = results[0].geometry.location.lat();
                    var lng = results[0].geometry.location.lng();

                    jsonarr={'lat':lat,'lng':lng}                       
                    return callback(jsonarr);                        
                }
                else {
                    alert("No coord find");
                }
            });
        }


$(document).ready(function(){ 
   $(window).load(function(){ 

map_address('address string',function(coord){


  var center=new google.maps.LatLng(coord.lat,coord.lng);



  var settings = {
          zoom: 16,
          center: center,
          mapTypeControl: false,
          mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
          navigationControl: true,
          navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},
          mapTypeId: google.maps.MapTypeId.ROADMAP
      }; 

  var map=new google.maps.Map(document.getElementById("map"), settings);

var marker = new google.maps.Marker({
position: new google.maps.LatLng(coord.lat,coord.lng),
map: map
});


});
});

});
于 2012-11-23T09:04:23.583 回答