从函数返回GMap位置对象

时间:2011-06-21 18:51:42

标签: javascript geolocation google-maps-api-3

我正在尝试为地图工具执行简单的地理编码功能。我得到地理编码很好,但我希望将位置对象作为地理编码函数的返回值传回。

这样的事情:

function codeAddress(address) {
    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var location = results[0].geometry.location;
            console.dir(location);
            return location;
        } else {
            return false;
        }
    });
}

位置项的console.dir显示了预期的位置对象,因此正在调用该函数并成功返回数据。

此函数由另一个进程调用,然后构建标记。

if (coordinates = codeAddress(myaddress){
    // do stuff
}

但是,coordinates变量始终评估为未定义,因此永远不会满足“执行内容”的条件。

我知道我可能遗漏了一些关于坐标var定义的非常明显的东西,但我不确定它是什么。

感谢您的帮助。

基本代码:http://jsfiddle.net/2TXZ4/3/虽然地图不会因任何原因而被绘制。

2 个答案:

答案 0 :(得分:0)

if (coordinates = codeAddress(myaddress) - 这是一项任务,而非比较。

好的,这是一个疯狂的黑客(确实有效):

 <script type="text/javascript"> var geocoder; var loc; var l = false;  
 function  initialize() {

 geocoder = new google.maps.Geocoder();

 var mapDiv = document.getElementById('map_canvas');
     map = new google.maps.Map(mapDiv, {
      center: new google.maps.LatLng(-34.397, 150.644),
      zoom: 8,
       mapTypeId: google.maps.MapTypeId.ROADMAP
    });      }


function codeAddress(address) {
geocoder.geocode({
    'address': address
}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
        loc = results[0].geometry.location;             l = true;
        console.log(loc);           //alert (loc);
        //return loc;       doStuff(loc)
    } else {
        return false;
    }
}); }


 function doStuff(geo_marker){ if(l==false){
var thisaddress = document.getElementById("address").value;
var myResult = codeAddress(thisaddress); }else{

if (loc) {
    map.setCenter(loc);
    var marker = new google.maps.Marker({
        map: map,
        position: loc
    });
 l = false;  //important to use function more than once :))
} else {
    alert("Geocode was not successful");
}   }

};

google.maps.event.addDomListener(window, 'load', initialize); 
</script>



 <body>
 <div>
 <input id="address" type="textbox" value="Sydney, NSW">
 <input type="button" value="Geocode" onclick="window.doStuff()">
 </div>
 <div id="map_canvas" style="height:600px; width: 500px; position: absolute; 
  top: 80px">    </div> 

 </body>

我认为在一个函数中进行地理编码并在地图中添加标记更有意义,以避免在函数之间来回调用。

答案 1 :(得分:0)

geocode方法是异步的,因此您需要在为方法提供的回调中进行任何处理,或者您可以提供对codeAddress方法的回调,就像这个类似的问题/答案所描述的那样( How do I return a variable from Google Maps JavaScript geocoder callback?)。在下面的代码中,我将您在doStuff函数中执行的操作移动到geocode函数的回调中 - 它应该可以工作,但我无法使用您提供的jfiddle链接测试它(可能由于谷歌地图API密钥)。我希望这有帮助!

function codeAddress(address) {
    geocoder.geocode({
        'address': address
    }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var location = results[0].geometry.location;
            console.log(location);
            map.setCenter(location);
            var marker = new google.maps.Marker({
                map: map,
                position: location
            });
        } else {
            alert("Geocode was not successful for " + address);
        }
    });
}


window.doStuff = function() {
    var address = document.getElementById("address").value;
    codeAddress(address);
}