2012-10-01 56 views
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> 

回答

2

修改功能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); 
+0

谢谢,这是一个开始!我已经通过了列表,但它停在8/10。我会将最新的代码发布到最初的问题。 – FunkyMonk91