【问题标题】:Batch Geocoding批量地理编码
【发布时间】:2012-10-01 18:59:48
【问题描述】:

我需要对包含数千个纬度/经度坐标的列表进行反向地理编码。我可以为一组坐标做到这一点没问题,但是当涉及到很多时,它一次只能做 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>

【问题讨论】:

    标签: javascript ajax google-maps callback


    【解决方案1】:

    修改函数showmethemoney。通过使用setTimeoutjsfiddle。您可以将间隔从 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);
    

    【讨论】:

    • 谢谢,这是一个开始!我现在有它通过列表,但它在 8/10 停止。我会将更新的代码发布到最初的问题中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多