【JS】js计算地图两个经纬度坐标点范围(java同样处理),哈夫辛公式
判断一个点 A (其经纬度为lat1,lon1) 是否在另一个点 B (其经纬度为 lat2,lon2) 的方圆 n 米之内,可以使用地球上经纬度之间的距离计算公式。常用的方法是(Haversine Formula),它可以计算两个点之间的球面距离。
判断一个点 A (其经纬度为lat1,lon1) 是否在另一个点 B (其经纬度为 lat2,lon2) 的方圆 n 米之内,可以使用地球上经纬度之间的距离计算公式。常用的方法是 哈夫辛公式(Haversine Formula),它可以计算两个点之间的球面距离。
哈夫辛公式
计算过程如下
1、将经纬度转换为弧度。
2、算两个点之间的距离。
3、判断计算得到的距离是否小于或等于n。
公式:
其中:
1、r 是地球的半径,约等于 6371 公里(或 6371000 米)。
2、d 是两点之间的距离。
实现示例(JavaScript)
以下是 JavaScript 中实现这种判断的方法:
function isPointWithinRange(lat1, lon1, lat2, lon2, range) {
const toRadians = (degree) => degree * (Math.PI / 180); // 角度转弧度
// 将经纬度转为弧度
const lat1Rad = toRadians(lat1);
const lon1Rad = toRadians(lon1);
const lat2Rad = toRadians(lat2);
const lon2Rad = toRadians(lon2);
// 哈夫辛公式
const dLat = lat2Rad - lat1Rad;
const dLon = lon2Rad - lon1Rad;
const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(lat1Rad) * Math.cos(lat2Rad) *
Math.sin(dLon / 2) * Math.sin(dLon / 2);
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
const R = 6371000; // 地球平均半径,单位为米
const distance = R * c; // 计算出来的距离
// 判断是否在范围内
return distance <= range;
}
// 示例
const latA = 39.9042; // A点纬度
const lonA = 116.4074; // A点经度
const latB = 39.9088; // B点纬度
const lonB = 116.3973; // B点经度
const range = 1000; // 范围 1000 米
const result = isPointWithinRange(latA, lonA, latB, lonB, range);
console.log(result); // 输出 true 或 false
代码解释
1、toRadians(degree):将角度转换为弧度。
2、经纬度转换:将lat1,lon1,lat2,lon2 从度数转换为弧度。
3、计算距离:利用哈夫辛公式计算出两点之间的距离。
4、返回判断:如果计算出来的距离小于或等于指定范围 n,返回 true
注意事项
经纬度的范围是:
纬度 lat: -90° 到 90°
经度 lon: -180° 到 180°
确保传入的经纬度和范围是有效的,以避免计算错误。

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)