-2

距離を取得するために数千のAPI呼び出しを実行する必要がありますが、クエリの制限に達し続けています。1秒ごとに呼び出しを行うようにスクリプトを設定した後でも、最初の120〜170回の呼び出し後の応答としてQUERY_LIMITが返されます。その後、彼らは速く積み重なっていきます。したがって、しばらくすると、実際の応答が得られるまでに数秒または数分かかります。

スクリプトは、1秒ごとに運転距離を取得するための呼び出しを実行します。ZERO_RESULTが返されると、最後に歩行距離の呼び出しが追加されます。それがZERO_RESULTで応答する場合は、座標によって半径距離を計算するだけです。クエリ制限に達した場合、同じ値の別の呼び出しを最後までアドバタイズします。

これは私のコードです:

function getDistance( lat1, lon1, lat2, lon2, relId, mode, nr, total ) {
  setTimeout( function(){
      var directionsService = new google.maps.DirectionsService();
      if( mode == 'driving' ) travelmode = google.maps.TravelMode.DRIVING;
      else { travelmode = google.maps.TravelMode.WALKING }
      var request = {
        origin: new google.maps.LatLng( lat1, lon1 ),
        destination: new google.maps.LatLng( lat2, lon2 ),
        travelMode: travelmode
      };
      directionsService.route(request, function(result, status) {
        if (status == google.maps.DirectionsStatus.OK) {
            distance = parseInt( result.routes[0].legs[0].distance.value )/1000;
            $.ajaxLoadSync( 'getDistance', SITE_ROOT+'admin/modules/settings/calculateDistance.php', 'lat1='+lat1+'&long1='+lon1+'&lat2='+lat2+'&long2='+lon2+'&relId='+relId+'&distance='+distance );
        } else if( status == google.maps.DirectionsStatus.ZERO_RESULTS && mode == 'driving' ){
            var walkingCount = 0;
            var limitCount = 0;
            if( $('#limit_hit').html() != '' ) limitCount = parseInt($('#limit_hit').html());
            if( $('#walking_dist').html() != '' ) walkingCount = parseInt($('#walking_dist').html());
            var offset = walkingCount + limitCount;
            $('#walking_dist').html( walkingCount + 1 );
            setTimeout(function() { getDistance( lat1, lon1, lat2, lon2, relId, 'walking', nr, total ) }, total*1000+offset*1000 );
        } else if( status == google.maps.DirectionsStatus.ZERO_RESULTS && mode == 'walking' ){
            var noResult = 0;
            if( $('#no_res').html() != '' ) noResult = parseInt($('#no_res').html());
            $('#no_res').html( noResult + 1 );
            $.ajaxLoadSync( 'getDistance', SITE_ROOT+'admin/modules/settings/calculateDistance.php', 'lat1='+lat1+'&long1='+lon1+'&lat2='+lat2+'&long2='+lon2+'&relId='+relId+'&distance=-1' );
        } else if( status == google.maps.DirectionsStatus.OVER_QUERY_LIMIT ){
            var walkingCount = 0;
            var limitCount = 0;
            if( $('#limit_hit').html() != '' ) limitCount = parseInt($('#limit_hit').html());
            if( $('#walking_dist').html() != '' ) walkingCount = parseInt($('#walking_dist').html());
            var offset = walkingCount + limitCount;
            $('#limit_hit').html( limitCount + 1 );
            setTimeout(function() { getDistance( lat1, lon1, lat2, lon2, relId, mode, nr, total ) }, total*1000+offset*1000 );
        }
      });
  }, nr*1000 );
}

私はどんな助けやヒントにも感謝します。

4

2 に答える 2

2

距離を取得するには、数千回の API 呼び出しを実行する必要があります

さて、あなたの問題があります。

Google Directions API の使用には、1 日あたり 2,500 件のルート リクエストのクエリ制限が適用されます

それ以上のものが必要な場合は、Google Maps API for Businessを調べることをお勧めします。これにより、1 日あたりのリクエスト数が大幅に増加します。

これらの使用制限のいずれかに達している可能性もあります。. それを解決する方法についていくつかの提案があります。

于 2013-02-27T17:57:38.953 に答える
0

多くの運転距離の結果を探している場合は、DistanceMatrixを調べてください。

ただし、何千ものリクエストを対象としたサービスはありません。設計を再考する必要がある場合があります (またはビジネス ライセンスを調査します)。

于 2013-02-27T18:29:47.100 に答える