MAX_DIMENSIONS_EXCEEDED距离矩阵错误
MAX_DIMENSIONS_EXCEEDED distancematrix error
我知道当您的请求包含超过 25 个起点或超过 25 个目的地时显示 "MAX_DIMENSIONS_EXCEEDED" 错误。但我只想知道这个限制是只对 api 客户免费还是对所有人?
我正在使用以下 google 服务
var service = new google.maps.DistanceMatrixService();
如果您目前拥有免费计划,则每个请求最多可获得 25 个起点或 25 个目的地。如果您超出免费计划限额,则必须支付额外费用。所以这个限制就是你是否支付。
您每次请求最多可获得 25 个起点和 25 个目的地的高级计划仅适用于在最新价格更改之前拥有高级计划的用户。看你说的,溢价是拿不到的。
在此处查看更多内容:https://developers.google.com/maps/premium/usage-limits
嘿嘿:)
我在创建“medium-sized”地图API 项目时偶然发现了这个问题。
尽管我们在 Google 上启用并配置了计费,但我还是显示了此状态代码。
您最多可以通过。每个请求 25 个目的地和起点(就像 Do2 正确说的那样)。
但是如果你有 150 个商店或更多呢??
我的想法是将请求分成块并调用 API server-side。
所以我在 PHP 文件中排除了 API 调用,并使用 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
祝你有愉快的一天:)
我知道当您的请求包含超过 25 个起点或超过 25 个目的地时显示 "MAX_DIMENSIONS_EXCEEDED" 错误。但我只想知道这个限制是只对 api 客户免费还是对所有人?
我正在使用以下 google 服务
var service = new google.maps.DistanceMatrixService();
如果您目前拥有免费计划,则每个请求最多可获得 25 个起点或 25 个目的地。如果您超出免费计划限额,则必须支付额外费用。所以这个限制就是你是否支付。
您每次请求最多可获得 25 个起点和 25 个目的地的高级计划仅适用于在最新价格更改之前拥有高级计划的用户。看你说的,溢价是拿不到的。
在此处查看更多内容:https://developers.google.com/maps/premium/usage-limits
嘿嘿:)
我在创建“medium-sized”地图API 项目时偶然发现了这个问题。
尽管我们在 Google 上启用并配置了计费,但我还是显示了此状态代码。
您最多可以通过。每个请求 25 个目的地和起点(就像 Do2 正确说的那样)。
但是如果你有 150 个商店或更多呢??
我的想法是将请求分成块并调用 API server-side。
所以我在 PHP 文件中排除了 API 调用,并使用 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
祝你有愉快的一天:)