0

アドレスでGoogleマップから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 に答える