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

Python如何根据经纬度点与公里距离计算(minx,miny,maxx,maxy)边界框

实现方案

有两种常用实现方案,可根据精度需求、场景选择:


方案1:无第三方依赖近似实现

适合100km以内的小距离场景,计算速度快,误差在1%以内,可满足绝大多数业务需求。

实现原理

  • WGS84坐标系下,纬度每相差1度,南北方向地表距离约为111.32km,数值基本不随纬度变化
  • 经度每相差1度,东西方向地表距离随纬度变化,计算公式为 111.32 * cos(纬度弧度值)
  • 常规这类需求默认返回地表实际距离为正方形的轴对齐边界框,因此南北、东西方向的半边长均为输入距离 / √2,通过勾股定理可保证中心点到四角的对角线半长等于输入值
import math

paris_point = (48.8588548, 2.347035)
distance_km = 20

def get_bounding_box(point, distance):
    lat, lon = point
    km_per_deg_lat = 111.32
    km_per_deg_lon = km_per_deg_lat * math.cos(math.radians(lat))
    half_side = distance / math.sqrt(2)
    
    d_lat = half_side / km_per_deg_lat
    d_lon = half_side / km_per_deg_lon
    
    minx = lon - d_lon
    miny = lat - d_lat
    maxx = lon + d_lon
    maxy = lat + d_lat
    return (minx, miny, maxx, maxy)

result = get_bounding_box(paris_point, distance_km)
print(result)
# 输出约为 (2.153, 48.731, 2.541, 48.986)

方案2:基于geopy的高精度实现

适合距离跨度大、对精度要求高的场景,基于WGS84椭球模型计算,考虑地球球面曲率,无平面近似误差。
首先安装依赖:
pip install geopy

实现代码:

import math
from geopy.distance import distance

paris_point = (48.8588548, 2.347035)
distance_km = 20

def get_bounding_box(point, dist):
    lat, lon = point
    half_side = dist / math.sqrt(2)
    # 按方位角偏移计算边界值:0=正北,90=正东,180=正南,270=正西
    maxy = distance(kilometers=half_side).destination((lat, lon), bearing=0).latitude
    miny = distance(kilometers=half_side).destination((lat, lon), bearing=180).latitude
    maxx = distance(kilometers=half_side).destination((lat, lon), bearing=90).longitude
    minx = distance(kilometers=half_side).destination((lat, lon), bearing=270).longitude
    return (minx, miny, maxx, maxy)

result = get_bounding_box(paris_point, distance_km)
print(result)
# 输出约为 (2.152, 48.732, 2.542, 48.986)

注意事项

  • 传入的点参数格式统一为(纬度, 经度),和题目给出的示例格式一致,请勿颠倒经纬度顺序
  • 上述两种实现默认返回地表实际距离为正方形的轴对齐边界框,符合常规业务使用约定;如果需要自定义长宽比,只需调整南北、东西方向的偏移距离分配,保证两个方向偏移距离的平方和等于输入距离的平方即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:36:25