Javascript google.maps.LatLng对象的空数组
首先,我尝试使用Javascript google.maps.LatLng对象的空数组,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,首先,我尝试使用google.maps.visualization.HeatmapLayer创建热图 我尝试调用函数codeAddressn次,每次调用它时,它都应该在全局数组locationsList中创建一个新的google.maps.LatLng对象,但当我尝试在函数getPoints上返回locationsList时,它是空的。 知道为什么吗 var locationsList = []; var counter = 0; function getPoints(latitude
google.maps.visualization.HeatmapLayer
创建热图
我尝试调用函数codeAddress
n次,每次调用它时,它都应该在全局数组locationsList
中创建一个新的google.maps.LatLng
对象,但当我尝试在函数getPoints
上返回locationsList
时,它是空的。
知道为什么吗
var locationsList = [];
var counter = 0;
function getPoints(latitude, longitude) {
codeAddress(" APIAI, SP, Brasil",2271.96);
codeAddress(" Avaré, SP, Brasil",8.77);
codeAddress(" Barueri, SP, Brasil",263.1);
codeAddress(" Caçapava, SP, Brasil",2130.24);
codeAddress(" Cajati, SP, Brasil",157.26);
codeAddress(" Campinas, SP, Brasil",83.28);
codeAddress(" CARAGUATATUBA, SP, Brasil",325.08);
console.log("All codeaddress ended "+locationsList.length); // prints 0 (array disappears?)
return locationsList;
}
function codeAddress(endereco, peso) {
geocoder.geocode( { 'address': endereco}, function(results, status) {
if (status == 'OK') {
var thislat = results[0].geometry.location.lat();
var thislong = results[0].geometry.location.lng();
locationsList[this.contador] = {location: new google.maps.LatLng(thislat,thislong), weight: peso};
console.log(locationsList.length);
contador++;
} else {
alert('Geocode was not successful for the following reason: ' + status);
}
});
}
根据,地理编码请求是异步的:
访问地理编码服务是异步的,因为Google Maps API需要调用外部服务器。因此,您需要传递一个回调方法,以便在请求完成时执行
您可以阅读有关异步代码如何工作的更多信息
关于本守则:
function getPoints(latitude, longitude) {
codeAddress(" APIAI, SP, Brasil",2271.96);
codeAddress(" Avaré, SP, Brasil",8.77);
codeAddress(" Barueri, SP, Brasil",263.1);
codeAddress(" Caçapava, SP, Brasil",2130.24);
codeAddress(" Cajati, SP, Brasil",157.26);
codeAddress(" Campinas, SP, Brasil",83.28);
codeAddress(" CARAGUATATUBA, SP, Brasil",325.08);
console.log("All codeaddress ended "+locationsList.length); // prints 0 (array disappears?)
return this.locationsList;
}
JavaScript不会等待每个地理编码请求完成,然后再执行对codeAddress
的下一个调用。因此,getPoints
函数中的所有代码都会立即执行,因此当代码到达时,返回这个.locationsList
,地理编码请求仍在后台进行,并且locationsList
数组仍然为空
更新
此外,正如@Preston在评论中提到的:
JavaScriptAPI中的地理编码服务具有防止同时发送太多请求的功能。如果有太多未延迟的顺序codeAddress()调用,您可能会遇到超过查询限制的错误。如果遇到这种情况,可能需要在代码中加入一些延迟逻辑
此外,为了补充这个答案,Javascript API中的地理编码服务具有一个防止同时发送太多请求的功能。如果有太多未显示的顺序
codeAddress()
调用,您可能会遇到OVER\u QUERY\u LIMIT
错误。如果遇到这种情况,您可能需要在代码中加入一些延迟逻辑。谢谢@Preston!我把它添加到我的答案中。