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 vertices;//顶点坐标集合 private GeofenceCallback callback;//围栏回调 public Geofence(String id,List 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); } } }