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

如何通过PHP从Google Maps短链接提取GPS经纬度?

从Google Maps短链接提取GPS坐标的PHP解决方案

核心思路

Google Maps短链接(如maps.app.goo.gl/xxx)本质是重定向链接,需先解析获取最终跳转的完整Google Maps长链接,再从长链接中提取GPS坐标——这比依赖API更高效,且无需API密钥和调用次数限制。

完整实现代码

1. 解析短链接获取完整长链接

function expandGoogleMapsShortLink($shortUrl) {
    $ch = curl_init($shortUrl);
    // 跟随重定向获取最终目标URL
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_NOBODY, true); // 仅获取响应头,避免下载页面内容
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 开发环境临时关闭SSL验证,生产环境建议开启
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

    curl_exec($ch);
    $finalUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
    curl_close($ch);

    return $finalUrl;
}

2. 从长链接提取GPS坐标

Google Maps长链接有两种常见的坐标存储格式,正则匹配覆盖这两种情况:

function extractCoordinatesFromMapsUrl($mapsUrl) {
    // 匹配@lat,lng格式(如@48.8583701,2.2919064)
    if (preg_match('/@(-?\d+\.\d+),(-?\d+\.\d+)/', $mapsUrl, $matches)) {
        return [
            'latitude' => (float)$matches[1],
            'longitude' => (float)$matches[2]
        ];
    }
    // 匹配3d=lat和4d=lng参数格式(如3d48.8583701!4d2.2944813)
    if (preg_match('/3d(-?\d+\.\d+)/', $mapsUrl, $latMatch) && preg_match('/4d(-?\d+\.\d+)/', $mapsUrl, $lngMatch)) {
        return [
            'latitude' => (float)$latMatch[1],
            'longitude' => (float)$lngMatch[1]
        ];
    }
    return null;
}

3. 组合使用示例

// 测试短链接
$shortLink = 'https://maps.app.goo.gl/GmCgwbfgzPHq1JeHA';
$expandedUrl = expandGoogleMapsShortLink($shortLink);

if ($expandedUrl) {
    $coordinates = extractCoordinatesFromMapsUrl($expandedUrl);
    if ($coordinates) {
        print_r($coordinates);
        // 输出示例:Array ( [latitude] => 48.8583701 [longitude] => 2.2944813 )
    } else {
        echo "无法从展开后的链接提取坐标";
    }
} else {
    echo "短链接解析失败";
}

之前方案的问题分析

  1. 第一种方案:未开启CURLOPT_FOLLOWLOCATION选项,无法处理短链接的多层重定向,导致无法获取最终的长链接。
  2. 第二种方案:错误将短链接后缀(如GmCgwbfgzPHq1JeHA)当作Place ID——该后缀仅为短链接的跳转标识,并非Google Places API认可的合法Place ID,因此调用API会返回INVALID_ARGUMENT错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:43:16