1

何千もの緯度/経度座標のリストを逆ジオコーディングする必要があります。これは1セットの座標で問題なく実行できますが、多くの場合、一度に実行できるのは5つだけです。グーグルによって拒否されないように、これを1つのステップで実行し、ループの時間を計る方法を理解する必要があります。

コールバック関数を利用する必要があると他の場所で言われましたが、これを行う方法がわかりません。

ここにいくつかのデモコードがあります

<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <script type="text/javascript" src="js/jquery-1.7.2.min.js" ></script>
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>​​
    <script type="text/javascript">                 

        var geocoder = new google.maps.Geocoder();

        var c = [];
        c[0]="43.5878,-79.6777";
        c[1]="49.2828,-123.1414";
        c[2]="49.2895,-123.127";
        c[3]="49.2784,-123.1364";
        c[4]="49.0327,-122.2529";
        c[5]="49.2696,-123.0587";
        c[6]="49.269,-122.9954";
        c[7]="49.235,-122.882";
        c[8]="49.1908,-122.7508";
        c[9]="49.085,-122.4111";

        var a = [];

        function codeLatLng(input, i) {
            var latlngStr = input.split(",", 2);
            var lat = parseFloat(latlngStr[0]);
            var lng = parseFloat(latlngStr[1]);
            var latlng = new google.maps.LatLng(lat, lng);
            geocoder.geocode({
                'latLng' : latlng
            }, function(results, status) {  
                a[i] = results[0].formatted_address;    
                $("#test").append(a[i] + "<br />"); 
            });
        }           

        function showmethemoney(){              
            for (var i=0; i <= c.length - 1; i++) {                 
                $("#test").append(i + ") " + c[i] + "<br/>");   
                codeLatLng(c[i], i);                                    
            };  
        }
   </script>   
</head>
<body>        
    <div id="test"></div>

    <br />
    <button onclick="showmethemoney();">Show me the money!</button>
</body>

結果をそれらの座標と一致させる必要があります。

どんな助けでも大歓迎です!

ありがとう。

編集:

もう少し進んでください:

        var geocoder = new google.maps.Geocoder();

        var c = [];
        c[0]="43.5878,-79.6777";
        c[1]="49.2828,-123.1414";
        c[2]="49.2895,-123.127";
        c[3]="49.2784,-123.1364";
        c[4]="49.0327,-122.2529";
        c[5]="49.2696,-123.0587";
        c[6]="49.269,-122.9954";
        c[7]="49.235,-122.882";
        c[8]="49.1908,-122.7508";
        c[9]="49.085,-122.4111";

        var a = [];

        function codeLatLng(input, i) {
            var latlngStr = input.split(",", 2);
            var lat = parseFloat(latlngStr[0]);
            var lng = parseFloat(latlngStr[1]);
            var latlng = new google.maps.LatLng(lat, lng);
            geocoder.geocode({
                'latLng' : latlng
            }, function(results, status) {
                //$("#test").append(results[0].formatted_address + "<br />");       
                a[i] = results[0].formatted_address;    
                $("#test").append(a[i] + "<br />"); 
            });
        }           
        var i = 0;
        function showmethemoney(start, end) {

            for (i = start; i <= c.length - 1 && i < end; i++) {
                $("#test").append(i + ") " + c[i] + " - ");
                codeLatLng(c[i], i);
            }
            if( i >= c.length - 1){
                return;
            }
            setTimeout(function(){
                showmethemoney(i, i+1);
            }, 1500);
        }

   </script>   
</head>
<body>        
    <div id="test"></div>

    <br />
    <button onclick="showmethemoney(0, 1);">Show me the money!</button>
</body>
4

1 に答える 1

2

変更された機能showmethemoneysetTimeout jsfiddleを使用して。間隔は 10 から任意の数値に変更できます。

var i = 0;
    function showmethemoney(start, end ) {

        for (i = start; i <= c.length - 1 && i < end; i++) {
            $("#test").append(i + ") " + c[i] + "<br/>");
            codeLatLng(c[i], i);
        }
        if( i >= c.length - 1){
            return;
        }
        setTimeout(function(){
            showmethemoney(i, i+5);
        }, 10);
    }
    showmethemoney(i, i+5);
于 2012-10-01T19:08:18.537 に答える