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);
|
}
|
}
|
}
|