打车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要求的坐标数组啦
代码细节解释
- 边界判断:先检查原数组长度是否已经在API限制内,是的话直接用,不用做多余处理。
- 步长计算:用
($originalCount - 1) / ($maxAllowedPoints - 1)计算步长,这样能保证起点(索引0)和终点(索引$originalCount-1)都被选中,中间的点均匀分布在原路线上。 - 补全终点:因为整数除法可能导致最后一个采样点不是原数组的终点,所以最后做个检查,确保终点不会丢失。
额外注意事项
- 这个方法的前提是你的坐标数组是按行程顺序严格排列的,这样采样后的路线才会和原路线一致。
- 如果数组里有必须保留的关键节点(比如转弯点、上下车点),可以在采样后手动把这些点插入到筛选后的数组中(注意总长度不要超过25个点)。
- 测试时可以打印
count($filteredCoordinates),确认结果符合限制。
内容的提问来源于stack exchange,提问作者Aftab Ahmad
相关产品推荐
相关产品推荐

