Estoy enviando los google.geocoder varias direcciones, pero los valores en los resultados [0] .geometry.location son todos iguales. Creo que he explicado la naturaleza asíncrona de la llamada mediante una llamada de vuelta. Cuando agrego alerta para ver los valores devueltos, las direcciones aprobadas en el geocoder.geocode ({ 'dirección': dir} ... son los correctos, el estado devuelto es bien, pero la latitud / longitud son los mismos para cada llamada. no soy muy versado en JavaScript, y soy nuevo en el entorno .NET, así que cualquier ayuda sería muy apreciada.
Este código ha funcionado perfectamente desde 4/1/2012 hasta algún tiempo cerca de diciembre o principios de 2013. ¿Ha cambiado algo con la API de Google? He mirado en la página web de Google, pero no puedo encontrar nada.
Aquí está mi llamada inicial:
<script type=text/javascript src=http://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false></script>
<script type=text/javascript>
var geocoder;
var map;
var directionsDisplay;
var directionsRenderer;
var startPoint;
var endPoint;
function initialize()
{
geocoder = new google.maps.Geocoder();
codeAddress();
var myOptions =
{
zoom: 12,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById(map_canvas), myOptions);
var trafficLayer = new google.maps.TrafficLayer();
trafficLayer.setMap(map);
setMarkers(map);
google.maps.event.addListener(map, 'click', function(event) {
dirMarker(event.latLng);
startPoint = event.latLng;
});
}
function codeAddress()
{
var address = document.getElementById(<%=hCVT.ClientID%>).value;
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
alert(Status: + status + res from CODE ADDRESS -- + results[0].geometry.location); //TO REMOVE
map.setCenter(results[0].geometry.location);
} else {
alert(Geocode of CVT was not successful for the following reason: + status);
}
});
}
La función para establecer los marcadores e información ventana de información (he quitado una parte del código que parecía irrelevante para la cuestión)
function setMarkers(map)
{
// Add markers to the map
var shape = {
coord: [1, 1, 1, 20, 18, 20, 18 , 1],
type: 'poly'
};
var places = new Array([,,,,]);
var xx = String;
xx = document.getElementById(<%=addys.ClientID%>).value;
var placeholder = xx.split(,);
var latlng;
var i = 0;
for(var y = 0; y < (placeholder.length / 5 - 1); i=i+5)
{
places[y, 0] = placeholder[i];
places[y, 1] = placeholder[i+1]; //Unit Status
places[y, 2] = placeholder[i+2]; // Long - not used
places[y, 3] = placeholder[i+3]; // Zindex
places[y, 4] = placeholder[i+4]; // HTML for information window
addr = places[y,0];
ustat = places[y,1];
zind = places[y,3];
iwdata = places[y,4];
getLatLong(addr, iwdata, ustat, zind, function(latlng, addr, iwdata, ustat, zind) {
var marker = new google.maps.Marker({
position: latlng,
map: map,
html: iwdata,
icon: pinImage,
shadow: pinShadow,
shape: shape,
title: addr,
zIndex: parseInt(places[y,3])
});
var infowindow = new google.maps.InfoWindow({
content: iwdata});
});
y = y + 1;
}
}
La función de donde creo que el problema radica sigue. Dado que hubo varias direcciones que se envían a Google, añadí construido en un tiempo de espera a fin de no superar las limitaciones. Una vez más, todo esto trabajó durante unos 8 meses y ha dejado de repente. Cuando varios marcadores utilizados para mostrar en el mapa, ahora hay un marcador que está escrito sobre la aparente porque el retorno LAT / LNG es la misma que la llamada inicial en la función codeAddress (). En un esfuerzo por encontrar una solución que he ido añadiendo alertas para mostrarme los valores de retorno. Yo estaba confundido con los valores de Bugzilla, ya que me llevarían a la Javascript a Google, que estaba completamente por encima de mi cabeza.
function getLatLong(addr, iwdata, ustat, zind, callback){
geocoder.geocode( { 'address': addr}, function(results, status){
if (status == google.maps.GeocoderStatus.OK){
callback(results[0].geometry.location, addr, iwdata, ustat, zind);
} else if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {
window.setTimeout(function() {self.getLatLong(addr, iwdata, ustat, zind, callback);
},500);
} else {
alert(Address Geocode failure: + addr + ==== + status + Y value: + zind + res --- + res);
}
});
}
Puede alguien ayudarme con esto?













