我正在尝试为地图工具执行简单的地理编码功能。我得到地理编码很好,但我希望将位置对象作为地理编码函数的返回值传回。
这样的事情:
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/虽然地图不会因任何原因而被绘制。
答案 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);
}