【记录28】人员定位:判断其是否在规定的范围内

想了解如何引入地图请看这篇文章,

需求:人员定位(在校、离校)

学弟请教了我一下,该如何做人员定位,并判断学生是否在学校内,将不在校内的视为“离校”。

想法一:圆形监测

在这里插入图片描述

理念:一个定点,一个动点,一个标准

一个定点看做圆心,一个动点来判断两者之间的距离,一个标准是判断该距离的尺子,是等于在校,否等于离校。这里的标准是以实际距离米来做参考的,查了查资料(参考经度每隔0.00001度,距离相差约1米;纬度每隔0.00001度,距离相差约1.1米转换计算的),里面运行勾股定理进行计算和判断的。

代码

通过两点来计算出其x轴、y轴上的距离,在结合勾股定理来计算两点之间的直线距离。将得到的直线距离在于标准值做比较。

Round(109.11341,34.53642) //以圆为范围,判断是否在圈内
Round(longitude,latitude){
            // 参考坐标(109.11402,34.53697)   (longitude, latitude)
            // 动态坐标(109.109941,34.53642)
            // 参考经度每隔0.00001度,距离相差约1米;纬度每隔0.00001度,距离相差约1.1米转换计算的
            let long = Math.abs(longitude-109.11402)   // 经度计算差值
            var a = (long.toFixed(5)  / 0.00001) * 1  // long.toFixed(5)
            let lat = Math.abs(latitude-34.53697)    // 纬度计算差值,并取绝对值
            var b = (lat.toFixed(5) / 0.00001) * 1.1  //lat.toFixed(5) 保留小数点五位小数
            let value = Math.sqrt(Math.pow(a,2) + Math.pow(b,2))    //勾股定理
            if(value.toFixed(0) > 100) {  //value.toFixed(0) 对结算的结果取整做比较
                console.log(value.toFixed(0)+'离校');
                return value.toFixed(0)+'离校'
            }else if(value.toFixed(0) <= 100){
                console.log(value.toFixed(0)+'在校');
                return value.toFixed(0)+'在校'
            }else{
                console.log('数据不符合算法规则,请检查参数函数(经度,纬度)');
            }
        },

想法二:矩形监测

在这里插入图片描述

理念:四个定点,一个动点

四个定点就相当于矩形的四个角,每个角都有自己的坐标,动点有自己的坐标,可以用其坐标和矩形的四个角的坐标进行比较,都符合等于在校,一个不符合等于离校。

代码:

逻辑是判断四个角和动点的坐标,如果结果都为true,则说明该动点在范围内,这里的true,小编将每次成功的true会push到一个数组中,最后通过判断数组的长度来判断其是否在范围内。

Rectangular(109.113175,34.534591) //以矩形为范围,判断是否在圈内
Rectangular(longitude,latitude) {
            console.log('021');
            // 以矩形为参考范围:
            // 优点:判断范围更加准确
            // 缺点:需要四个参考坐标
            // Y轴经度:y1=109.113032    y2=109.118188     y3=109.115906   y4=109.111127
            // X轴纬度:x1=34.540315     x2=34.539215      x3=34.533952    x4=34.53523
            // 1234分别代表四个角的坐标,也可以是多个,多个话做多次判断即可
            var y1=109.113032
            var y2=109.118188
            var y3=109.115906
            var y4=109.111127
            var list = []
            if(longitude > y1){
                let ay = true
                list.push(ay)
                console.log(1);
            }
            if(longitude < y2){
                let by = true
                list.push(by)
                console.log(2);
            }
            if(longitude < y3){
                let cy = true
                list.push(cy)
                console.log(3);
            }
            if(longitude > y4){
                let dy = true
                list.push(dy)
                console.log(4);
            }
            var x1=34.540315
            var x2=34.539215
            var x3=34.533952
            var x4=34.535232
            if(latitude < x1){
                let ax = true
                list.push(ax)
                console.log(1);
            }
            if(latitude < x2){
                let bx = true
                list.push(bx)
                console.log(2);
            }
            if(latitude > x3){
                let cx = true
                list.push(cx)
                console.log(3);
            }
            if(latitude > x4){
                let dx = true
                list.push(dx)
                console.log(4);
            }
            console.log(list);
            var vla = ''
            if(list.length == 8){ //每个角判断两次,一次y轴,一次x轴
                vla = '在校'
                // return vla
            }else{
                vla = '离校'
                // return vla
            }
            console.log(vla);
        },

优缺点

圆形监测

优点
  1. 结构简单:只需一个参考坐标即可;
不足之处
  1. 对实际范围不够准确,进而得到的错误数据大。因为实际中很多这种监测都是一个矩形,当然排除也有接近圆形或圆形的;

矩形监测

优点
  1. 准确,进而得到的错误数据少;
  2. 不需标准值(针对甲方);
不足之处
  1. 结构复杂:想要数据越精确,需要的定点坐标就越多;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值