
使用android的location.distancebetween()方法可精确计算两点间距离(单位:米),只需将结果与10进行比较即可实现10米半径范围判断,无需手动换算或误用千米单位。
使用android的location.distancebetween()方法可精确计算两点间距离(单位:米),只需将结果与10进行比较即可实现10米半径范围判断,无需手动换算或误用千米单位。
在实际开发中,常需验证用户是否处于指定地理围栏(如办公室打卡点)内。关键在于正确理解 distanceBetween() 的返回单位:该方法直接返回以米为单位的直线距离(基于WGS84椭球模型的“逆公式”高精度计算),而非千米或其他单位。因此,判断是否在10米范围内,应直接与 10 比较,而非 1.0(千米)或 0.01(千米)。
✅ 正确写法(修正核心逻辑)
float[] distanceResults = new float[3]; // 建议分配长度3,支持获取方位角等扩展信息
Location.distanceBetween(
latitude, longitude, // 当前位置
targetLatitude, targetLongitude, // 目标位置
distanceResults
);
float distanceInMeters = distanceResults[0]; // 单位:米(无需除以1000!)
if (distanceInMeters <h3>⚠️ 注意事项</h3>
- 单位陷阱:原代码中 distanceResults[0] / 1000 将米转为千米,导致 distanceInKm 1公里范围,而非10米。这是最常见的逻辑错误。
- 数组长度建议:虽仅需距离值时 new float[1] 可运行,但官方文档明确指出:长度≥2时 results[1] 存储初始方位角,≥3时 results[2] 存储终止方位角。预留空间更规范、便于后续扩展。
- 定位精度依赖:getLastLocation() 返回的是最近一次缓存定位,可能过时或精度不足(尤其室内)。生产环境建议结合 requestLocationUpdates() 获取实时高精度定位,并检查 location.getAccuracy()(例如要求
- 地理围栏健壮性:单一距离判断适用于静态小范围场景;若需持续监控(如考勤签到),推荐使用 GeofencingClient API,它底层已优化功耗与精度,且支持进出事件回调。
? 总结
Location.distanceBetween() 是Android平台计算地理距离的可靠方案,其结果单位恒为米。判断N米范围只需 distanceResults[0]











