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

如何按固定距离偏移经纬度点实现谷歌地图扫描窗口门店查询

网格切分功能实现方法

你需要的固定距离偏移经纬度生成网格点,可以通过以下逻辑实现:
地球经线方向上,纬度每相差1度对应地面距离约等于111km,该数值基本不受纬度影响;纬线方向上经度每相差1度对应的地面距离随纬度升高而降低,计算公式为 111km * cos(当前纬度的弧度值)。
为了避免搜索盲区,网格点的横向/纵向步长建议设置为搜索半径的√2倍,比如你用50km的搜索半径,步长设为70km即可保证区域内所有位置都落在至少一个搜索圆的覆盖范围内。

具体实现步骤:

  1. 确定目标区域的四个边界值:最小纬度min_lat、最大纬度max_lat、最小经度min_lng、最大经度max_lng
  2. 计算纬度方向的步长:lat_step = 步长距离 / 111,单位为度
  3. 从min_lat开始逐次叠加lat_step,直到超过max_lat,得到每一行的纬度值current_lat
  4. 针对每一个current_lat,计算当前纬度下的经度步长:lng_step = 步长距离 / (111 * cos(弧度化的current_lat))
  5. 从min_lng开始逐次叠加lng_step,直到超过max_lng,得到的每个经纬度组合就是搜索圆心坐标

以下是Python实现示例:

import math

def generate_search_points(min_lat, max_lat, min_lng, max_lng, search_radius_km=50):
    points = []
    # 步长设为搜索半径的√2倍,避免搜索盲区
    step_km = search_radius_km * math.sqrt(2)
    # 计算纬度步长
    lat_step = step_km / 111
    current_lat = min_lat
    while current_lat <= max_lat:
        # 计算当前纬度对应的经度步长
        lat_rad = math.radians(current_lat)
        lng_step = step_km / (111 * math.cos(lat_rad))
        current_lng = min_lng
        while current_lng <= max_lng:
            points.append((round(current_lat, 6), round(current_lng, 6)))
            current_lng += lng_step
        current_lat += lat_step
    return points

注意事项:

  • Google Place API支持通过components=country:{国家二字码}参数限定返回结果所属国家,比如美国传components=country:US,无需你自行过滤境外结果
  • 每个搜索请求最多返回60个结果,如果返回结果里有next_page_token,需要等几秒后携带token请求下一页,拉完当前圆心的所有结果
  • 可以适当扩大目标区域的四个边界值,避免边缘区域出现漏覆盖
其他可选方案
  • 直接使用Google Place Text Search API,搜索关键词设置为{品牌名} stores in {国家名},配合国家限定参数使用,不需要自行切分网格,多次更换关键词搜索后对结果去重即可
  • 直接查询目标品牌的官方门店接口,绝大部分连锁品牌的官网门店查询功能都有公开接口,返回的门店数据比地图API更全更准,调用成本也更低
  • 从OpenStreetMap等开源POI数据集里直接筛选对应国家、对应品牌的门店数据,无需调用付费API,适合大规模数据获取场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:45:05