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

如何从Google Maps短链接中提取精准的经纬度坐标?

问题根因说明

你目前遇到的坐标不准问题,本质是混淆了Google Maps长链中两类不同用途的坐标:

  • @符号后紧跟的坐标是当前地图视口的中心展示坐标,并非目标POI的真实经纬度,存在偏移
  • 长链data=参数段的!3d{纬度}!4d{经度}为官方标记的目标地点精确坐标,就是你现有正则匹配到的内容,该值本身和浏览器最终跳转后的坐标完全一致,不需要额外捕获后续JS跳转。你示例长链中提取到的24.6968319,46.7353356即为该地点的正确坐标,可直接使用。

可选解决方案

方案1:直接优化现有正则逻辑(成本最低,适合1万条批量处理)

不需要修改跳转逻辑,仅优化坐标提取规则即可,现有逻辑拿到的第一次跳转长链已包含所有必要信息,批量处理速度最快,无额外依赖:

  • 优先提取!3d和!4d后的数值作为最终坐标,无需等待后续跳转
  • 若部分短链返回的长链无该参数,再提取!1s后的Place ID备用

方案2:无头浏览器捕获完整跳转(适配所有短链类型)

如果你的短链包含非POI类型(如路线、自定义标记点等),第一次跳转长链无固定坐标参数,可以用无头浏览器模拟浏览器加载过程,捕获JS跳转后的最终URL,无需人工操作:

// 需引入Selenium依赖,ChromeDriver版本需和本地Chrome版本匹配
public static String getFinalRedirectUrl(String shortUrl) {
    ChromeOptions options = new ChromeOptions();
    // 开启无头模式,不弹出浏览器窗口
    options.addArguments("--headless=new");
    options.addArguments("--disable-gpu");
    options.addArguments("--no-sandbox");
    WebDriver driver = new ChromeDriver(options);
    try {
        driver.get(shortUrl);
        // 等待2秒确保JS跳转完成,可根据实际情况调整时长
        Thread.sleep(2000);
        return driver.getCurrentUrl();
    } catch (InterruptedException e) {
        e.printStackTrace();
        return null;
    } finally {
        driver.quit();
    }
}

方案3:调用官方Place API获取坐标(精度最高)

对坐标精度要求极高的场景下,可以从第一次跳转的长链中提取!1s参数后的Place ID,调用Google Maps Platform的Place Details API获取官方返回的精确经纬度,准确率100%,不受URL规则变动影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:06:04