1

我正在尝试使用此递归函数来查找 2088 个不同地址的 LatLng 并以大约 180 个结果重播我。虽然所有地址在谷歌地图网站上都是有效的。

function test(i)
         {
            if(i >= jsArray.length){return;}
               var geocoder = new GClientGeocoder(); 
             geocoder.getLatLng(jsArray[i], function (current) { 
                     return function(point) { 
                                     if (!point) {

                                    data.push("null");
                                    //nulls.push(myindex);
                                  } else {

                                    data.push(point);

                                    //alert("done");
                                  }

                                test(i+1,jsArray);
                            } 

                        }(i));


                 } 


                test(0);

我已经开发了这个递归函数,但它需要大约 30 分钟才能得到好的结果,

 function test2(i)
             {
                 geocoder.getLocations(jsArray[i], function (current) { 
                 return function(response) { 
                                 if (!response || response.Status.code != 200) {
                                //alert(address + " not found");
                                 //test(i,jsArray);
                                // data.push("null");
                                //nulls.push(myindex);
                                test2(i);

                              } else {
                                 var len = response.Placemark[0];

                                    point2 = new GLatLng(
                                      len.Point.coordinates[1],
                                      len.Point.coordinates[0]
                                    );  
                                data[i] = point2;
                              }
                        }
                        }(i));
             } 



            for(i =0 ; i<=jsArray.length; i++)
            {
                if(i==jsArray.length){
                      alert(data.length);
                    ///  $("#maintable").show(100) ;                         
                    ///  $("#loading").hide(100) ;

                }else{
                    test2(i);
                }

            }

我仍然需要专家来帮助我:) :D

4

2 回答 2

1

地理编码器是异步的(这使得在循环中使用它有问题)并且受到配额和速率限制。它不适用于在地图上显示大量已知地址,而是用于用户输入的数据。

您确实应该离线地理编码您的点,保存结果坐标并使用这些坐标在地图上显示标记。

如果你在循环中使用它,你不应该使用 getLatLng 方法,你应该使用getLocations 方法,它包含一个状态代码,让你知道它为什么失败(G_GEO_TOO_MANY_QUERIES = 620,这意味着你可以限制你的请求并可能获得有用的结果)

于 2012-11-14T14:04:57.713 回答
0

// jsArray 是地址数组。该数组的长度为 2087 个元素,所有地址均来自谷歌地图。

function MYFunction(i)
         {
             geocoder.getLocations(jsArray[i], function (current) { 
             return function(response) { 
                             if (!response || response.Status.code != 200) {

                              test2(i); // recursive calling 

                          } else {
                             var len = response.Placemark[0];

                                point2 = new GLatLng(
                                  len.Point.coordinates[1],
                                  len.Point.coordinates[0]
                                );  
                            data[i] = point2;
                          }
                    }
                    }(i));
         }  /// end of y Function

//// 循环每个地址并将其传递给 MyFunction 函数并启动递归函数。

        for(i =0 ; i<=jsArray.length; i++)
        {
                 MYFunction(i);

        }
于 2012-11-17T21:00:01.710 回答