Bueno, el caos se puede ejemplificar con este código:
Código javascript
:
Ver original<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Ejemplo de geocodificacion</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script src="http://maps.google.com/maps?file=api&v=2.x&key=MiGooglekey"
type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
var map;
var geocoder = null;
var addressMarker;
var regs = [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
// Aquí van otros 350 ID
];
var lats = [
18.67708969116211,
18.51841926574707,
21.15048980712890,
21.15048980712890,
21.15048980712890,
21.16732025146484,
18.67708969116211,
18.51841926574707,
21.15048980712890,
21.15048980712890,
21.15048980712890,
21.16732025146484,
18.67708969116211,
18.51841926574707,
21.15048980712890,
21.15048980712890,
21.15048980712890,
21.16732025146484,
18.67708969116211,
18.51841926574707,
// Aqui van otras 350 latitudes más.
];
var lngs = [
-88.39904785156250,
-88.32911682128906,
-86.86348724365233,
-86.86348724365233,
-86.86348724365233,
-86.83305358886720,
-88.39904785156250,
-88.32911682128906,
-86.86348724365233,
-86.86348724365233,
-86.86348724365233,
-86.83305358886720,
-88.39904785156250,
-88.32911682128906,
-86.86348724365233,
-86.86348724365233,
-86.86348724365233,
-86.83305358886720,
-88.39904785156250,
-88.32911682128906,
-86.86348724365233,
// Aqui van otras 350 longitudes más.
];
var numGeocoded = 0;
var punto;
var marker = null;
function geocodeAll() {
if (numGeocoded < lats.length) {
punto = new GPoint(lats[numGeocoded],lngs[numGeocoded]);
geocoder.getLocations(punto, addressResolved);
}
else{document.getElementById("terminado").value ="1";}
}
function addressResolved(response) {
var delay = 0;
if (response.Status.code == 620) {
// Demasiado rápido. Intenta de nuevo pero con una pausa
delay = 500;
} else {
if (response.Status.code == 200) {
// Obtenida: Se utiliza la direccion
var dir = response.Placemark[0].address;
if (dir){
document.getElementById("geocode").value += regs[numGeocoded] + "\t" + dir + "\n";}
else{document.getElementById("geocode").value += regs[numGeocoded] + "\t" + "Posicion no encontrada" + "\n";}
numGeocoded += 1;
}
// Mover puntero a las siguientes coordenadas; si es una posicion falsa, lo saltea.
}
window.setTimeout(geocodeAll, delay);
}
function load() {
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(-34.608175166943,-58.368855956794), 16);
map.setMapType(G_NORMAL_MAP);
geocoder = new GClientGeocoder();
geocoder.setCache(null);
document.getElementById("geocode").value ="";
document.getElementById("terminado").value ="0";
window.setTimeout(geocodeAll, 50);
}
}
function addtag(point, dir)
{
marker = new GMarker(point,{draggable:false, bouncy:false,clickable:true});
GEvent.addListener(marker, "click", function(){
marker.bindInfoWindow(dir);});
return marker;
}
//]]>
</script>
</head>
<body onload="load()" onunload="GUnload()">
<div id="map" style="WIDTH: 150px; HEIGHT: 100px"></div>
<TEXTAREA id="geocode" style="WIDTH: 152px; HEIGHT: 118px" name="geocod" rows="7" cols="16">
</TEXTAREA>
<BR>
<INPUT id="terminado" type="hidden" name="termino">
</body>
</html>
En este ejemplo, en un momento dado (aproximadamente unos 10 segundos después) aparece la dichosa ventanita. Después de continuar, vuelve a aparecer en lapsos de tiempo similares, y eventualmente el control desde el codigo VB.net falla porque algún elemento no puede leer una instancia de un objeto durante un ciclo de detenido.