aijinhui
2023-08-31 a152548db005be9227730a3166dc233d94a52c5f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.ruoyi.test.Geo;
 
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.utils.gis.GisUtil;
import com.ruoyi.utils.gis.Point;
import lombok.Data;
 
import java.util.List;
 
/**
 * @Description: 电子栅栏
 * @ClassName: Geofence
 * @Author: 刘苏义
 * @Date: 2023年08月30日9:53:53
 **/
@Data
public class Geofence {
    private String id;
    private List<Point> vertices;//顶点坐标集合
    private GeofenceCallback callback;//围栏回调
 
    public Geofence(String id,List<Point> vertices, GeofenceCallback callback) {
        this.id=id;
        this.vertices = vertices;
        this.callback = callback;
    }
 
    public boolean isInside(Point point) {
        // 实现坐标是否在围栏内的检测逻辑
        // 返回 true 如果在围栏内,否则返回 false
        boolean inPolygon = GisUtil.isInPolygon(point, vertices);
        return inPolygon ? true : false;
    }
 
    public void checkAndTrigger(String id,Point point, SysUser user) {
        if (isInside(point)) {
            callback.onEnter(id,user);
        } else {
            callback.onExit(id,user);
        }
    }
}