У меня небольшая проблема с картами API Google, мне было интересно, может кто-нибудь помочь. Я пытаюсь заставить информационные окна открываться с помощью некоторого HTML-кода, содержащего HREF. Теперь я мог бы использовать «X», чтобы закрыть окно, но id предпочел бы второй метод таймера Javascript, чтобы закрыть информационные окна, как показано ниже ..
SetTimeout ( 'infowindow.close (карта, маркер)', '2000');
Однако браузер сообщает, что информационное окно не существует по истечении 2 секунд. Чтобы решить эту проблему, я попытался добавить объект infowindow и маркерные объекты в массив в глобальной области видимости, однако это не помогло решить проблему.
Я вернул код в исходное состояние, был бы признателен за любые советы по этому вопросу.
<!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>