判断一个点 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°
确保传入的经纬度和范围是有效的,以避免计算错误。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |