Hola, os escribo por exponeros el siguiente problema y ver si me podeis indicar una posible solución:
-estoy desarrollando una aplicación en Google Maps (usaré el término Gmaps a partir de ahora). Uno de mis scripts fcrea_waypoint.js) reciben un vector de direcciones, y construyen un objeto Marker para cada una de las direcciones pasadas.
-Pero dado que el objeto Marker exige como parámetro obligatorio un objeto LatLong tengo que realizar una llamada a la función fGeocodifica.js. La cual recibe la dirección como Parámetro, la Geocodifica y la devuelve como objeto LatLong.
-El siguiente paso sería asignarle el objeto LatLong a las propiedades del Marker y "lanzarlo" al mapa. Pero el código no funciona; a mi parecer es esto debido a:
-Tengo dos alerts, el primero al final de la función crea_waypoint y que debería ser el último en ejecutarse y otro dentro de la función Geocodifica, que debería ejecutarse (o eso creía) al recibir la respuesta de la Geocodificación y siempre antes de finalizar la función crea_waypoint. Pues esto no ocurre así, y es el alert de la función Geocodifica el que me llega al final.
-Mi impresión (puede que equivocada) es que el código (supongo que por correr del lado servidor) va mas rápido que la respuesta del servidor de Google y la Geocodificación llega tarde, por lo que mi navegador no asigna una posición correcta al Marker, y no se ejecuta correctamente.
Mi pregunta es: Suponiendo que la fuente de el error sea la que yo pienso ¿como puedo decirle al código de javascript que se detenga y no haga nada hasta recibir respuesta de la función Geocodifica?. Claro que puedo estar equivocado y que el origen del error sea otro, en cuyo caso agradecería que si veis algo en lo que yo no haya caido me lo digais.
Os pongo ambas funciones
fcrea_waypoints.js
Código:
function crea_waypoints(vector){
var i=0;
var contentString;
var coord;
var infowindow;
var myLatlng;
var marker;
for (i=0;i<=vector.length-1;i++){
contentString='<div id="content">'+
'<div id="siteNotice"></div>'+
'<h3 id="firstHeading" class="firstHeading"><CENTER>BLAH, BLAH, BLAH </CENTER></h3>'+
'<div id="bodyContent">'+
'<HR>'+
'<p><CENTER>blah, blah, blah, blah, blah, blah...</CENTER></p>'+
'</div>'+
'</div>';
infowindow = new google.maps.InfoWindow({
content: contentString
});
myLatlng=Geocodifica(vector[i]);
marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: 'Sustituir donde proceda'
});
infowindow.open(map,marker);
alert("Debería salir al final");
}
}
fGeocodica.js
Código:
function Geocodifica(parametro){
alert("Geocodificamos");
var geocoder;
geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': parametro}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
parametro=results[0].geometry.location.lat()+", "+results[0].geometry.location.lng();
alert ("Dirección Geocodificada: "+parametro);
}
else{
alert ("Google no encuentra la dirección. Asegurate que esta ha sido bien introducida")
}
});
return parametro;
}
Esta será la segunda ocasión en la que me echais un cable, así que nuevamente muchas gracias por vuestro tiempo.