1

この再帰関数を試して、2088 の異なる住所の LatLng を見つけ、約 180 の結果だけを再生します。ただし、すべての住所は Google マップのウェブサイトで有効です。

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要素で、すべてのアドレスはGoogleマップから取得されます。

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 に答える