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

如何通过经纬度计算判断酒店是否在当前位置2公里范围内?

如何简便判断经纬度目标是否在指定范围内?

针对你的场景,我们可以用平面近似法快速计算——因为范围很小(仅2公里),这种方法的误差几乎可以忽略,不需要复杂的球面几何计算。下面一步步来拆解:

首先解决你疑惑的经度距离问题:经度每度对应的公里数是随纬度变化的,地球是椭球体,越靠近赤道,经度每度的距离越远,公式是:
经度每度公里数 = 111.32 * cos(当前纬度的弧度值)
这里需要先把纬度从度数转成弧度:弧度 = 纬度 × π ÷ 180

接下来结合你的具体数据计算:

步骤1:计算经纬度差值

  • 当前纬度:46.776073°,酒店纬度:46.752879°
    纬度差 Δlat = |46.776073 - 46.752879| = 0.023194°
  • 当前经度:23.605802°,酒店经度:23.605848°
    经度差 Δlon = |23.605802 - 23.605848| = 0.000046°(这个差值极小,几乎可以忽略)

步骤2:计算各差值对应的公里数

  • 纬度转公里:已知1度纬度≈110.6公里,所以纬度方向距离:
    lat_distance = 0.023194 × 110.6 ≈ 2.565公里
  • 经度转公里:先把当前纬度转成弧度:46.776073 × π ÷ 180 ≈ 0.8164弧度
    计算cos值:cos(0.8164) ≈ 0.689
    经度每度公里数:111.32 × 0.689 ≈ 76.7公里/度
    经度方向距离:lon_distance = 0.000046 × 76.7 ≈ 0.0035公里

步骤3:计算总直线距离

小范围可以近似成平面,用勾股定理计算:
总距离 = √(lat_distance² + lon_distance²) ≈ √(2.565² + 0.0035²) ≈ 2.565公里

结论

2.565公里 > 2公里,所以这家酒店不在你当前位置的2公里范围内。


补充:通用简便方法(适用于任何小范围判断)

如果遇到经度差较大的情况,都可以按以下步骤来:

  • 计算经纬度的绝对差值(Δlat、Δlon)
  • 根据当前纬度计算经度每度对应的公里数
  • 把两个差值分别转成公里
  • 用勾股定理计算总距离,和阈值比较

如果需要更精确的结果(比如跨越大范围),可以用Haversine公式(专门计算球面两点距离),示例代码如下:

import math

def calculate_distance(lat1, lon1, lat2, lon2):
    R = 6371  # 地球平均半径,单位:公里
    lat_diff = math.radians(lat2 - lat1)
    lon_diff = math.radians(lon2 - lon1)
    a = math.sin(lat_diff/2)**2 + math.cos(math.radians(lat1)) * math.cos(math.radians(lat2)) * math.sin(lon_diff/2)**2
    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
    return R * c

用你的数据代入,得到的结果约为2.58公里,和平面近似的结果几乎一致,说明小范围内两种方法的误差可以忽略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:28:10