Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá amigos.
Após dois dias procurando a solução desse problema na web e fazendo vários testes, estou apelando ao fórum.
É o seguinte, estou utilizando a API do google maps para fazer a geocodificação da latitude e longitude de um lugar. Funciona assim, eu entro com o nome do bairro, estado, cidade ou país e envio para o google, lá é feito o cálculo e é retornada a latitude e longitude, após isto eu adiciono um marcador no lugar que foi informado.
Até aqui tudo bem, o problema está na sincronia que o meu código está funcionando, todo este processo de geocodificação está dentro de um laço de repetição for(), dentro deste laço existe um alert que mostra a latitude e longitude, depois deste laço existe um alert que avisa que o for terminou. O problema está aqui, o navegador deixa os comandos que estão dentro do for "pendentes" e continua a execução do código, só quando o google me retorna a informação, ai é que o navegador executa aquele alert que ficou pendente e mostra a latitude e longitude.
Eu preciso que o algoritmo aguarde o retorno do google, execute o que tem dentro do for e só depois de exibir todos os alerts de latitude e longitude, ai sim ele pode exibir o alert dizendo que o for terminou (como um algoritmo comum faz).
Segue o código HTML + JS
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="http://www.godf.org/js/lib/Fluster2.packed.js"></script>
<script type="text/javascript">
function initialize() {
var geocoder;
geocoder = new google.maps.Geocoder();
// Create a new map with some default settings
var myLatlng = new google.maps.LatLng(25,25);
var myOptions = {
zoom: 3,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
// Initialize Fluster and give it a existing map
var fluster = new Fluster2(map);
var cidades=new Array();
cidades[0]="Porto Alegre";cidades[1]="Santa Teresa - Rio de Janeiro";cidades[2]="Trindade-Go";cidades[3]="Brasil";cidades[4]="João Pessoa, Paraíba, Brasil";
for(i=0;i<cidades.length;i++){
var address = cidades[i];
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker({
map: map, position: results[0].geometry.location, title: 'bla bla Marker '
});
coordenadas = results[0].geometry.location.toString();
coordenadas = coordenadas.slice(1);
coordenadas = coordenadas.slice(0,-1);
coordenadas = coordenadas.split(', ');
latitude = Number(coordenadas[0]);
longitude = Number(coordenadas[1]);
alert(latitude+", "+longitude);
} else {
alert('Geocode was not successful for the following reason: ' + status);
}
});
}
alert("O for terminou, esse alert DEVERIA aparecer por ultimo");
}
</script>
</head>
<body onload="initialize()">
<div id="map_canvas" style="width: 600px; height: 400px"></div>
</body>
</html>
Bom pessoal meu problema é este, se alguém puder me ajudar eu agradeço MUITO, porque isso já está me dando muita dor de cabeça.
Abraços, e obrigado desde já. :natalbiggrin:
Carregando comentários...