1

我需要对数千个纬度/经度坐标的列表进行反向地理编码。我可以为一组坐标做到这一点没问题,但是当涉及到很多时,它一次只能做 5 个。我需要弄清楚如何一步一步地做到这一点,并为循环计时,这样它就不会被谷歌拒绝。

我在其他地方被告知我需要使用回调函数,但我不确定如何执行此操作。

这是一些演示代码

<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

修改功能showmethemoney。通过使用setTimeout 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 回答