heey everybody, i need to make a google map with the markers of our customers however i'm not good at programming still at school and not really getting much programming :( however my problem is that i'm able to get a few markers on the map however not all of them and it always is a different amount that will show. i'm working adress based not with lat and longtitude.
here is my script
<!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>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Google Maps JavaScript API Example</title>
<script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAjU0EJWnWPMv7oQ-jjS7dYxTPZYElJSBeBUeMSX5xXgq6lLjHthSAk20WnZ_iuuzhMt60X_ukms-AUg"
type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
//load Google Map
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
var geocoder = new GClientGeocoder();
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
//create randomnumber to prevent caching and retrieve xml file
//data.xml vervangen door weg naar .xml bestand
GDownloadUrl("data.xml", function(data, responseCode) {
var xml = GXml.parse(data);
//store markers in markers array
var markers = xml.documentElement.getElementsByTagName("marker");
//while loop ipv for loop
开发者_运维百科 var i = 0
do
{
var address = markers[i].getAttribute("address");
var html = markers[i].getAttribute("html");
showAddress(map,geocoder,address,html);
timer();
}
while (i <= 18);
function timer()
{
i++
setTimeout("timer()",1000);
}
//Create marker and set up event window
function createMarker(point,html){
var marker = new GMarker(point);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(html);
});
return marker;
}
//showAddress
function showAddress(map,geocoder,address,html) {
geocoder.getLatLng(
address,
function(point) {
if (!point) {
alert(address + " niet gevonden");
} else {
map.setCenter(point, 12);
var marker = createMarker(point,html+'<br/><br/>'+address);
map.addOverlay(marker);
}
}
);
}
}
); //close GDownloadUrl
} //close GBrowserIsCompatible
} //close load
//]]>
</script>
</head>
<body onload="load()" onunload="GUnload()">
<div id="map" style="width: 1000px; height: 700px"></div>
</body>
</html>
This is likely due to the Google API throttling the number of queries you can make. If you ask it for locations of addresses too quickly then it will deny you after the first few requests.
I see you've tried to get around this with your timer()
function, but the way you've written it won't actually delay the while
loop (Javascript will set the timer then happily continue to the next iteration of the loop). What you need to do is bring the calls to the API inside the code that gets called by setTimeout
, like this:
function placeMarker(i) {
var address = markers[i].getAttribute("address"),
html = markers[i].getAttribute("html");
showAddress(map,geocoder,address,html);
if (++i <= 18) {
setTimeout(
function() {
placeMarker(i);
},
1000
);
}
}
placeMarker(0);
精彩评论