0

みなさん、私は顧客のマーカーを使ってグーグルマップを作成する必要がありますが、私はまだ学校でプログラミングが苦手で、あまりプログラミングを取得していません:(しかし私の問題は、いくつかのマーカーを取得できることですただし、マップはすべてではなく、表示される量は常に異なります。私は緯度と経度に基づいていないアドレスで作業しています。

これが私のスクリプトです

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

1 に答える 1

1

これは、GoogleAPIが実行できるクエリの数を制限していることが原因である可能性があります。住所の場所をすぐに尋ねると、最初の数回の要求の後で拒否されます。

関数でこれを回避しようとしtimer()たようですが、記述した方法で実際にループが遅延することはありませんwhile(Javascriptがタイマーを設定し、ループの次の反復に進んでいきます)。あなたがする必要があるのは、次のsetTimeoutように、によって呼び出されるコード内のAPIへの呼び出しをもたらすことです:

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);
于 2011-09-21T10:01:19.493 に答える