Domanda

Sto riscontrando un piccolo problema con le mappe dell'API di Google, mi chiedevo se qualcuno potesse aiutarmi.Sto cercando di aprire le finestre delle informazioni con del codice HTML contenente un HREF.Ora potrei usare la "X" per chiudere la finestra, tuttavia preferirei un secondo metodo di un timer Javascript per chiudere le finestre di informazioni come mostrato di seguito.

setTimeout('infowindow.close(map,marker)','2000');

Il browser tuttavia segnala che la finestra informativa non esiste una volta trascorsi i 2 secondi.Per risolvere il problema ho tentato di aggiungere oggetti infowindow e oggetti marker a un array in ambito globale, tuttavia ciò non ha risolto il problema.

Ho riportato il codice al suo stato originale. Sarei grato per qualsiasi consiglio sul problema.

<!DOCTYPE html> 
    <html> 
    <head> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"/> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
    <title></title> 
    <link href="http://code.google.com/apis/maps/documentation/javascript/examples/standard.css" rel="stylesheet" type="text/css" /> 
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
    <script type="text/javascript"> 

    var geocoder;
    var map;
    var markers = [];
    var info = [];
    var i = 0;

    function initialize()
    {
       geocoder = new google.maps.Geocoder();
       var latlng = new google.maps.LatLng(40.768505, -111.853244);
       var myOptions =
       {
          zoom: 8,
          center: latlng,
          mapTypeId: google.maps.MapTypeId.ROADMAP
       }
       map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
       addPostCode('bb9 5pl','HTML');
       addPostCode('bb9 7de','HTML');
       addPostCode('bb12 7nq','HTML');
       addPostCode('bb4 6be','HTML');
    }

    function addPostCode(zip, html)
    {
       geocoder.geocode(
       {
          'address': zip
       }, 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,
                name: zip
             });

            var infowindow = new google.maps.InfoWindow({
            content: html
            });

            google.maps.event.addListener(marker, 'mouseover', function() 
            { 
              infowindow.open(map,marker); 
              setTimeout('infowindow.close(map,marker)','2000'); 
            });


            i++;
          }
          else
          {
             alert("Geocode was not successful for the following reason: " + status);
          }
       });
    }

    function checkZip(zip)
    {
       var distance = Number.MAX_VALUE;
       var index = 0;
       geocoder.geocode(
       {
          'address': zip
       }, function (results, status)
       {
          if (status == google.maps.GeocoderStatus.OK)
          {
             for (ix = 0; ix < markers.length; ix++)
             {
                var tmp = getDistance(results[0].geometry.location, markers[ix].position);
                if (tmp < distance)
                {
                   distance = tmp;
                   index = ix;
                }
             }
             alert('nearest zipcode is :' + markers[index].name + ' Distance:' + distance) 
          }
       });
    }

    function getDistance(latlng1, latlng2)
    {
       var R = 6371; // Radius of the earth in km 
       var dLat = (latlng2.lat() - latlng1.lat()) * Math.PI / 180; // Javascript functions in radians 
       var dLon = (latlng2.lng() - latlng1.lng()) * Math.PI / 180;
       var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(latlng1.lat() * Math.PI / 180) 
               * Math.cos(latlng2.lat() * Math.PI / 180) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
       var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
       var d = R * c; // Distance in km 
       d = d * 0.621371192;
       return d;
    }

    </script> 
    </head> 
    <body onload="initialize()"> 
      <div> 
        <input id="address" type="textbox" value=""> 
        <input type="button" value="Geocode" onclick="checkZip(getElementById('address').value)"> 
      </div> 
    <div id="map_canvas" style="height:500px; width: 600px;"></div> 
    </body> 
    </html> 
È stato utile?

Soluzione

infowindow nella chiamata setTimeout non rientra nell'ambito quando si attiva.Modificare la chiamata come segue per correggere l'utilizzo Chiusure:

setTimeout(function(){infowindow.close();}, '2000');
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top