【JS】js计算地图两个经纬度坐标点范围(java同样处理),哈夫辛公式 ...

打印 上一主题 下一主题

主题 1039|帖子 1039|积分 3117

判断一个点 A (其经纬度为lat1,lon1) 是否在另一个点 B (其经纬度为 lat2,lon2) 的方圆 n 米之内,可以利用地球上经纬度之间的距离计算公式。常用的方法是 哈夫辛公式(Haversine Formula),它可以计算两个点之间的球面距离。
哈夫辛公式

计算过程如下
1、将经纬度转换为弧度。
2、算两个点之间的距离。
3、判断计算得到的距离是否小于或即是n。
公式:


其中:
1、r 是地球的半径,约即是 6371 公里(或 6371000 米)。
2、d 是两点之间的距离。
实现示例(JavaScript)

以下是 JavaScript 中实现这种判断的方法:
  1. function isPointWithinRange(lat1, lon1, lat2, lon2, range) {  
  2.     const toRadians = (degree) => degree * (Math.PI / 180); // 角度转弧度  
  3.     // 将经纬度转为弧度  
  4.     const lat1Rad = toRadians(lat1);  
  5.     const lon1Rad = toRadians(lon1);  
  6.     const lat2Rad = toRadians(lat2);  
  7.     const lon2Rad = toRadians(lon2);  
  8.     // 哈夫辛公式  
  9.     const dLat = lat2Rad - lat1Rad;  
  10.     const dLon = lon2Rad - lon1Rad;  
  11.     const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +  
  12.               Math.cos(lat1Rad) * Math.cos(lat2Rad) *  
  13.               Math.sin(dLon / 2) * Math.sin(dLon / 2);  
  14.    
  15.     const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));  
  16.     const R = 6371000; // 地球平均半径,单位为米  
  17.     const distance = R * c; // 计算出来的距离  
  18.     // 判断是否在范围内  
  19.     return distance <= range;  
  20. }  
  21. // 示例  
  22. const latA = 39.9042; // A点纬度  
  23. const lonA = 116.4074; // A点经度  
  24. const latB = 39.9088; // B点纬度  
  25. const lonB = 116.3973; // B点经度  
  26. const range = 1000; // 范围 1000 米  
  27. const result = isPointWithinRange(latA, lonA, latB, lonB, range);  
  28. 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企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

自由的羽毛

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表