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

如何在PHP中捕获旧谷歌地图URL的重定向新URL?

解决谷歌地图旧URL重定向获取失败的PHP方案

问题根源

之前的脚本无效,大概率是没处理谷歌的重定向逻辑:谷歌会对非浏览器请求做限制,或者需要跟随多次重定向,同时请求头缺失(比如没有模拟浏览器的User-Agent)导致重定向不生效,最终返回原始URL。

正确的PHP实现步骤

1. 用cURL实现完整重定向追踪

cURL能更灵活控制请求参数,确保正确获取最终重定向URL。示例代码:

function getGoogleMapsRedirectUrl($oldUrl) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $oldUrl);
    // 跟随所有重定向
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    // 设置最大重定向次数,防止死循环
    curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
    // 模拟浏览器请求头,避免被拦截
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
    ]);
    // 不输出内容,只获取响应信息
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // 执行请求
    curl_exec($ch);
    
    // 获取最终重定向后的URL
    $finalUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
    
    curl_close($ch);
    return $finalUrl;
}

// 测试示例
$oldUrl = 'http://maps.google.com/maps?ll=50.93554167,4.36341667&t=k&z=19';
$newUrl = getGoogleMapsRedirectUrl($oldUrl);
echo $newUrl;

2. 提取海拔参数并建立缩放级别映射

拿到最终URL后,用正则提取其中的海拔数值(比如169m部分):

function extractElevationFromMapsUrl($url) {
    preg_match('/@[\d.]+,[\d.]+,(\d+)m/', $url, $matches);
    return isset($matches[1]) ? (int)$matches[1] : null;
}

// 提取示例
$elevation = extractElevationFromMapsUrl($newUrl);
echo '对应海拔:' . $elevation . 'm';

接下来批量测试不同缩放级别(z值)的旧URL,记录每个z对应的海拔,就能建立近似的映射关系(比如z=19对应169m,z=18对应338m,z=17对应676m,大致是2倍递减的关系,具体以实际测试为准)。

注意事项

  • 谷歌的重定向规则可能随时间调整,建议用自己的URL样本批量测试,确保映射关系准确
  • 如果遇到请求被拦截,可以更换User-Agent字符串,或者添加其他常见请求头(比如Accept-Language)
  • 批量处理时建议添加请求间隔,避免触发谷歌的频率限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:02:38