javascript - 批量地理编码

标签 javascript ajax google-maps callback

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

最佳答案

修改函数 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);

关于javascript - 批量地理编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12679321/

相关文章:

JavaScript 同步自定义提示

javascript - 无法使用 History.js 实现历史记录

javascript - 从 javascript 将 Click 事件放置在 html 中的 anchor 标记上?

javascript - 欧洲和南美用户的浏览器将渲染的 JS 中的坐标分隔符从句点更改为逗号

javascript - 无法读取 null 的属性 'offsetTop'

javascript - 使用 jQuery 动态创建克隆编号表单

javascript - Ajax + JSF 第一次点击后点击2次

jquery - 使用 AJAX jQuery 和 SOAP 调用 WebService

android - 使用 Android 谷歌地图获取 map 边界

javascript - Google map - 当信息窗口关闭或其他单选按钮过滤器为 "ticked"时缩小