想了解如何引入地图请看这篇文章,
需求:人员定位(在校、离校)
学弟请教了我一下,该如何做人员定位,并判断学生是否在学校内,将不在校内的视为“离校”。
想法一:圆形监测
理念:一个定点,一个动点,一个标准
一个定点看做圆心,一个动点来判断两者之间的距离,一个标准是判断该距离的尺子,是等于在校,否等于离校。这里的标准是以实际距离米来做参考的,查了查资料(参考经度每隔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);
},
优缺点
圆形监测
优点
- 结构简单:只需一个参考坐标即可;
不足之处
- 对实际范围不够准确,进而得到的错误数据大。因为实际中很多这种监测都是一个矩形,当然排除也有接近圆形或圆形的;
矩形监测
优点
- 准确,进而得到的错误数据少;
- 不需标准值(针对甲方);
不足之处
- 结构复杂:想要数据越精确,需要的定点坐标就越多;