Моя карта Google показывает не все оценки - PullRequest
0 голосов
/ 21 сентября 2011

Привет всем, мне нужно сделать карту Google с маркерами наших клиентов, но я не очень хорошо программирую, еще учусь в школе и не особо разбираюсь в программировании :( Однако моя проблема в том, что я могу получитьНа карте мало маркеров, но не все, и это всегда будет другое количество. Я работаю с адресом, не с широтой и долготой.

вот мой сценарий

    <!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>

1 Ответ

1 голос
/ 21 сентября 2011

Вероятно, это связано с тем, что API Google регулирует количество запросов, которые вы можете сделать.Если вы спросите его о расположении адресов слишком быстро, он будет отказывать вам после первых нескольких запросов.

Я вижу, что вы пытались обойти это с помощью функции timer(), но так, как вынаписано, что на самом деле это не задержит цикл while (Javascript установит таймер, а затем успешно перейдет к следующей итерации цикла).Что вам нужно сделать, это перевести вызовы API в код, который вызывается setTimeout, например:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...