我知道"MAX_DIMENSIONS_EXCEEDED“错误显示当您的请求包含超过25个起源,或超过25个目的地。但我只想知道这个限制只适用于免费的api客户,还是对所有人都适用?
我正在使用下面的google服务
var service =新的google.maps.DistanceMatrixService();
发布于 2018-08-28 16:55:26
如果您目前有免费的计划,您将得到最多25个起源或25个目的地的每个请求。如果你超出了免费计划津贴,你必须额外支付。所以这个限制是你是否付钱。
保费计划,您得到最多25个起源和25个目的地,每个请求,只有在最新的价格变化之前有溢价计划的用户可用。从你所说的来看,你不可能得到那笔钱。
请参阅这里的更多内容:https://developers.google.com/maps/premium/usage-limits
发布于 2022-03-14 17:39:31
呵呵:)
我在创建一个“中型”MapsAPI项目时偶然发现了这个问题。
尽管我们已经在Google上启用并配置了计费,但我还是显示了这个状态代码。
你被允许超过马克斯。每个请求有25个目的地和来源(如Do2正确描述的)。
但是如果你有150家商店或者更多呢?
我的想法是将请求分割成块并调用API服务器端。
因此,我将API调用排除在PHP文件中,并使用AJAX (app.js <-> magic.php)传递数据。
请看我的解决办法:
/* CLIENTSIDE app.js */
const getDistanceMatrix = (service, parameters) =>
new Promise((resolve, reject) => {
let paramString = JSON.stringify(parameters);
//console.log(paramString);
$.ajax({
type: "Post",
url: "/develope/kk-store-locator/magic.php",
data: {
daten: paramString,
},
success: function (response) {
//Wenn Query success
response = JSON.parse(response);
console.log(response);
const distances = [];
const results = response.rows[0].elements;
for (let j = 0; j < results.length; j++) {
const element = results[j];
var addressText = response.destination_addresses[j];
//const distanceText = element.distance.text;
//const distanceVal = element.distance.value;
const distanceObject = {
storeid: stores[j],
distanceText: addressText,
};
distances.push(distanceObject);
}
resolve(distances);
},
error: function (response) {
// Wenn Query failed = Promise revoked
responserr = JSON.parse(response);
console.log(responserr);
reject(response);
},
});
});
const distancesList = await getDistanceMatrix(service, {
origins: [origin],
destinations: destinations,
travelMode: "DRIVING",
unitSystem: google.maps.UnitSystem.METRIC,
});
// HIER Zurückgeben
distancesList.sort((first, second) => {
return first.distanceVal - second.distanceVal;
});
return distancesList;
}
SERVERSIDE (magic.php):
<?php
data = json_decode($_POST["daten"]);
$origin = $data->origins[0];
$destinations = $data->destinations;
//Variablendeklaration Request-String
$chunk_size = 24; //25 Stores
$dest_counter = sizeof($destinations); //StoreLength gesamt
$dest_chunkz = ceil($dest_counter / $chunk_size); //Aufrunden für Requestanzahl
$strings = [];
//Build String max.25 Destinations
$iter = 0;
for ($i = 0; $i < $dest_chunkz; $i++) {
for ($iter; $iter < $dest_counter; $iter++) {
$strings[$i] .= $destinations[$iter]->lat . "," . $destinations[$iter]->lng . "|";
$items = substr_count($strings[$i], '|');
if ($items == 25) { //Runtime-Limit (max. 25)
break;
}
}
}
//Call to Google Distanz-API
foreach ($strings as $string) {
$string = substr($string, 0, -1);
$latNlong_origin = $origin->lat . "," . $origin->lng;
$distance_data = file_get_contents('https://maps.googleapis.com/maps/api/distancematrix/json?&origins=' . urlencode($latNlong_origin) . '&destinations=' . urlencode($string) . '&key=' . $apiKey . '');
$distance_arr = json_decode($distance_data);
array_push($distance_copy, $distance_arr);
if ($distance_arr->status == 'OK') {
$destination_addresses = $distance_arr->destination_addresses;
$origin_addresses = $distance_arr->origin_addresses;
} else {
echo "<p>The request was Invalid</p>";
echo $distance_arr->status;
exit();
}
if ($origin_addresses == "" or $destination_addresses == "") {
echo "<p>Destination or origin address not found</p>";
exit();
}
}
=> remove duplicates, and return <=我希望这能让“解决办法”的想法更接近一点--注意,您总是需要启用计费才能与所有的Google APIs一起工作。
祝你今天愉快:)
https://stackoverflow.com/questions/52033446
复制相似问题