6***@qq.com
6***@qq.com
  • 发布:2026-07-28 13:57
  • 更新:2026-08-11 11:34
  • 阅读:314

经纬度圆形围栏校验

分类:uni-app
2026-07-28 13:57 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

在 uni-app 中,可以通过计算两点之间的球面距离来判断一个经纬度点是否在指定的圆形围栏内。以下是一个通用的实现方法:

// 计算点到圆心的距离的函数  
function distance(lat1, lng1, lat2, lng2) {  
    const radius = 6378137.0; // 地球半径  
    const rad = Math.PI / 180.0;  
    const lat1rad = lat1 * rad;  
    const lat2rad = lat2 * rad;  
    const a = Math.sin(lat1rad) * Math.sin(lat2rad) + Math.cos(lat1rad) * Math.cos(lat2rad) * Math.cos((lng2 - lng1) * rad);  
    return radius * Math.acos(a);  
}  

// 检查点是否在圆内的函数  
function isPointInCircle(lat, lng, circleLat, circleLng, radius) {  
    const d = distance(lat, lng, circleLat, circleLng);  
    return d <= radius;  
}  

// 使用示例  
const pointLat = 39.9903; // 点的纬度  
const pointLng = 116.4814; // 点的经度  
const circleLat = 39.9109; // 圆心的纬度  
const circleLng = 116.4119; // 圆心的经度  
const radius = 1000; // 圆的半径,单位为米  
const isInside = isPointInCircle(pointLat, pointLng, circleLat, circleLng, radius);  
console.log(isInside ? '点在圆内' : '点在圆外');

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

该方法通过计算目标点与圆心的球面距离,并与设定的半径进行比较,从而判断目标点是否在圆形围栏内部。

更多详细内容可以参考:经纬度圆形围栏校验

如果需要在 App 端实现更高级的地理围栏功能(如进入/离开围栏的系统级监听),也可以前往插件市场搜索相关的原生地理围栏插件。

内容为 AI 生成,仅供参考
6***@qq.com

6***@qq.com (作者)

1111111111

6***@qq.com

6***@qq.com (作者)

1111111111

杨杨得亿

杨杨得亿 - 这个人很懒,什么都没有留下~

可以计算两点之间的空间直线距离是否小于你的围栏半径

//计算两点经纬度之间直线距离  
export const getDistance = (startLon, startLat, endLon, endLat) => {  
  const R = 6371; // 地球半径(千米)  
  const dLat = (endLat - startLat) * Math.PI / 180;  
  const dLon = (endLon - startLon) * Math.PI / 180;  
  const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +  
            Math.cos(startLat * Math.PI / 180) * Math.cos(endLat * Math.PI / 180) *  
            Math.sin(dLon / 2) * Math.sin(dLon / 2);  
  const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));  
  const distance = R * c;  
  return Math.floor(distance*1000); // (单位:米)  
}
6***@qq.com

6***@qq.com (作者)

<div id="file_uploader_answer"><a href="javascript:;" class="_ajax_upload-button btn btn-default btn-normal" style="position: relative; overflow: hidden; direction: ltr;"><i class="icon-upload-alt"></i>上传附件<input multiple="multiple" type="file" name="file" style="position: absolute; right: 0px; top: 0px; font-family: Arial; font-size: 118px; margin: 0px; padding: 0px; cursor: pointer; opacity: 0;"></a><div class="aw-file-uploader _ajax_upload-list clearfix" id="upload-ul"></div></div>

6***@qq.com

6***@qq.com (作者)

1231

  • 杨杨得亿

    不是已经给你解决办法了吗?你还要什么?必须使用地理围栏?用两点之间的距离对比你的中心半径等同于地理围栏打的

    2026-08-06 13:38

6***@qq.com

6***@qq.com (作者)

https://m.book118.com/try_down/197043131013010040.pdf
https://max.book118.com/html/2025/1001/6014122212011235.shtm
https://m.book118.com/try_down/118070052022007022.pdf
https://meng.tsinghua.edu.cn/docs/20180412112855782243.pdf

要回复问题请先登录注册