You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

打车APP开发:如何等间隔移除数组元素适配Google Maps API途经点限制

解决Google Maps API途经点数量限制的等间隔筛选方法

嘿,这个问题我之前做类似导航应用时也碰到过,刚好可以给你分享个靠谱的实现思路——核心就是均匀筛选坐标点,同时牢牢保留首尾的起点和终点,最大程度还原原路线的形状。

核心逻辑

Google Maps Directions API最多支持23个途经点,加上起点和终点总共是25个坐标点。我们要做的就是把40个点的原数组,通过等间隔采样压缩到最多25个点,既满足API限制,又不会让路线变形太严重。

具体实现(PHP示例)

假设你的原始坐标数组是按行程顺序排列的$allCoordinates:

// 你的原始行程坐标数组
$allCoordinates = [$coordinates1, $coordinates2, $coordinates3, ..., $coordinates40];
// API允许的最大总点数(起点+23途经点+终点)
$maxAllowedPoints = 25;
$originalCount = count($allCoordinates);

$filteredCoordinates = [];

// 如果原数组长度已经符合要求,直接复用即可
if ($originalCount <= $maxAllowedPoints) {
    $filteredCoordinates = $allCoordinates;
} else {
    // 计算采样步长:确保首尾点都被选中,中间点均匀分布
    $step = floor(($originalCount - 1) / ($maxAllowedPoints - 1));
    
    // 按步长遍历采样
    for ($i = 0; $i < $originalCount; $i += $step) {
        $filteredCoordinates[] = $allCoordinates[$i];
    }
    
    // 修复最后一个点:避免整数除法导致最后一个采样点不是原终点
    if (end($filteredCoordinates) !== $allCoordinates[$originalCount - 1]) {
        $filteredCoordinates[count($filteredCoordinates) - 1] = $allCoordinates[$originalCount - 1];
    }
}

// 现在$filteredCoordinates就是符合API要求的坐标数组啦

代码细节解释

  1. 边界判断:先检查原数组长度是否已经在API限制内,是的话直接用,不用做多余处理。
  2. 步长计算:用($originalCount - 1) / ($maxAllowedPoints - 1)计算步长,这样能保证起点(索引0)和终点(索引$originalCount-1)都被选中,中间的点均匀分布在原路线上。
  3. 补全终点:因为整数除法可能导致最后一个采样点不是原数组的终点,所以最后做个检查,确保终点不会丢失。

额外注意事项

  • 这个方法的前提是你的坐标数组是按行程顺序严格排列的,这样采样后的路线才会和原路线一致。
  • 如果数组里有必须保留的关键节点(比如转弯点、上下车点),可以在采样后手动把这些点插入到筛选后的数组中(注意总长度不要超过25个点)。
  • 测试时可以打印count($filteredCoordinates),确认结果符合限制。

内容的提问来源于stack exchange,提问作者Aftab Ahmad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:38:38