Google Maps APIを使用して、20の場所のリストとそこに到達する時間を表示しています。私はgoogle.maps.DirectionsServiceを使用しています。このAPIには、1秒あたりの制限数が10通に設定されています。すべての電話を同時に呼び出すことができます(Testedと完全に動作します)。私が10以上の場所を持っているとき、私は呼び出しブロックを使って呼び出しています。 16の拠点を持つ例えば:私は、私は3秒を待って、私は10あたりの制限を尊重していますので、理論的には、このアプローチは動作するようになって他人のために6Google Maps API - 1秒あたりのクエリリミット超過
を呼び出して、最初の10点の位置を求めます秒。 しかし、動作しません。 OVER_QUERY_LIMITというエラーが表示され、残りの6か所を呼び出すときにが表示され、時には4つが失敗し、3つが失敗することがあります。待機時間を5秒に増やすと、時にはうまくいくこともありますが、時にはその1つが失敗することもあります。
質問:この制限は毎秒10クエリではありませんか?はいの場合、私は何が間違っていますか?どのように私はそれを修正することができますか?
//------------------ Code ----------------
getDistanceByBlocks(destinations: IDestination[]){
let limit = 8;
if(destinations.length <= limit){
destinations.forEach(destination => {
this.getDistance(destination);
});
}else{
let selection = destinations.slice(0, limit)
let rest = destinations.slice(limit)
selection.forEach(destination => {
this.getDistance(destination);
});
setTimeout(() => {
this.getDistanceByBlocks(rest)
},3000);
}
}
getDistance(destination: IDestination) {
if (this.dataService.getCurrentLocation()) {
let mapSettings = this.userSettings.getMapSettingsSync();
this.mapService.getRoutes(destination, mapSettings);
}
}
//------------------ MapService----------------
getRoutes(destination: IDestination, mapSettings:IMapSettings): void {
let directionsService = new google.maps.DirectionsService;
this.currentLocation = this.dataService.getCurrentLocation();
directionsService.route(
{
origin: { lat: this.currentLocation.latitude,
lng: this.currentLocation.longitude },
destination: { lat: destination.latitude, lng: destination.longitude },
provideRouteAlternatives: mapSettings.provideRouteAlternatives,
avoidHighways: mapSettings.avoidHighways,
avoidTolls: mapSettings.avoidTolls,
drivingOptions: {
departureTime: new Date(Date.now()),
trafficModel: mapSettings.trafficModel
},
travelMode: google.maps.DirectionsTravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.IMPERIAL
},
(response, status) => {
if (status == google.maps.DirectionsStatus.OK) {
let routes: IRouteInfo[] = response.routes
.map(route => {
let routeInfo: IRouteInfo = {
summary: route.summary,
distance: route.legs[0].distance.text,
timeValue: route.legs[0].duration.text,
};
return routeInfo;
});
destination.routes = routes;
this.events.publish(AppSettings.UPDATE_DESTINATIONS)
} else if (status == google.maps.DirectionsStatus.OVER_QUERY_LIMIT){
console.warn(status);
} else {
console.warn(status);
}
});
}
クロームネットワーク]タブでは、我々はそれぞれの呼び出しとどのように多くのエラー、私が経験しています間の待ち時間を見ることができることに注意することが重要です。私が興味をそそられるのは、失敗した電話が見えないということです。クロムは私にそれを見せません。だから私はgoogle.mapsサービスはJavaScriptでそれを処理していると思う、それはサーバーへの呼び出しを行っていないが、実際に私は手掛かりを持っていない。
コードでGoogleマップJavascript API v3キーを使用していますか? – geocodezip
リクエストの間に追加の遅延がありますか?それはすぐに8リクエストを発射し、残りの3秒後に発砲するように見えます。どこから1秒あたり10回のクエリのクエリレートを取得しましたか? – geocodezip
こんにちはgeocodezip、この方法でG Maps APIキーを使用しています。 "" html – AMore