-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:
Esta será la segunda ocasión en la que me echais un cable, así que nuevamente muchas gracias por vuestro tiempo. 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; }