地理围栏

更新时间:2024-07-03 06:33:58下载pdf

本文介绍地理围栏的相关功能。

基础概念

LBS

LBS 即基于位置的服务(Location Based Services,LBS),是指围绕地理位置数据而展开的服务。由移动终端使用无线通信网络(或卫星定位系统),基于控件数据库,获取用户的地理位置坐标信息并与其他信息集成,以便向用户提供所需的、与位置相关的增值服务。

地理围栏

地理围栏(Geo-fencing)是 LBS 的一种新应用,是物理位置周围的虚拟围栏或边界。与真正的围栏一样,地理围栏会在该位置与其周围区域之间建立隔离。与真实围栏不同的是,它还可以检测虚拟边界内的移动,当设备进入或离开某个特定地理区域,设备可以接收自动通知和警告。有了地理围栏技术,位置社交网站就可以帮助用户在进入某地区时自动登记。

地理围栏能力

当开启围栏告警后,地理围栏的中心地址通常以车辆锁车时的地址为准,随着车辆行驶而变化。当车辆锁车时上报位置信息,偏差超过设置半径时,进行对应的提醒功能。当车辆超过地理围栏范围时,进行相应报警方式的报警。

地理围栏相关类

类名(协议名) 说明
IODGeofenceService 地理围栏相关服务
GeofenceResultInfoBean 获取地理围栏增值服务信息返回结果实体类
GeofenceInfoBean 设置地理围栏入参实体类

地理围栏开发流程

地理围栏

查询是否开启地理围栏

获取当前地理围栏信息,包括开关状态和半径等信息。

接口说明

/**
 * 获取地理围栏信息
 * @param devId 设备 ID
 * @param listener 回调
 */
fun getGeofenceInfoWithDevID(
  devId: String,
  listener: IThingResultCallback<GeofenceResultInfoBean>
)

示例代码

private void getGeofenceInfoWithDevID(String deviceId) {
  OutdoorUtils.getGeofenceInfoWithDevID(deviceId, new IThingResultCallback<GeofenceResultInfoBean>() {
    @Override
    public void onSuccess(GeofenceResultInfoBean result) {
      showToast("getGeofenceInfoWithDevID success");
    }

    @Override
    public void onError(String errorCode, String errorMessage) {
      showToast("onError code=" + errorCode + " message=" + errorMessage);
    }
  });
}

GeofenceResultInfoBean 数据模型

{
  "deviceId": "vdevo162814799088537",
  "deviceInfo": {
    "geofenceInfo": {
      "fenceRadius": 200,                 // 圆形围栏半径
      "fenceAppNotice": "app,sms,phone", // 告警信息
      "open": true,                       // 围栏能力开关
      "lockDpCode": "blelock_switch",     // 锁状态 DP Code
      "lockValue": "0"                    // 锁状态判断规则,等于该值,为锁状态
    }
  }
}
字段 类型 描述
fenceRadius Int 圆形围栏半径
fenceAppNotice String 告警信息
open Boolean 围栏能力开关,true 表示开启
lockDpCode String 锁状态 DP Code,当前固定为 blelock_switch
lockValue String 关锁状态的 DP 值

设置地理围栏

接口说明

/**
 * 设置地理围栏
 * @param devId 设备 ID
 * @param geofenceInfoBean 地理围栏信息
 * @param listener 回调
 */
fun setGeofenceWithRequestModel(
  devId: String,
  geofenceInfoBean: GeofenceInfoBean,
  listener: IThingResultCallback<Boolean>
)

示例代码

private void setGeofenceWithRequestModel(String deviceId) {
  GeofenceInfoBean geofenceInfoBean = new GeofenceInfoBean();
  geofenceInfoBean.setFenceAppNotice("app");
  geofenceInfoBean.setFenceRadius(50);
  geofenceInfoBean.setOpen(true);
  geofenceInfoBean.setLockDpCode("blelock_switch");
  geofenceInfoBean.setLockValue("false");
  OutdoorUtils.setGeofenceWithRequestModel(deviceId, geofenceInfoBean, new IThingResultCallback<Boolean>() {
    @Override
    public void onSuccess(Boolean result) {
      showToast("setGeofenceWithRequestModel success="+result);
    }

    @Override
    public void onError(String errorCode, String errorMessage) {
      showToast("onError code=" + errorCode + " message=" + errorMessage);
    }
  });
}

GeofenceInfoBean 数据模型

{
  "fenceRadius": 200,
  "fenceAppNotice": "app,sms,phone",
  "open": true,
  "lockDpCode": "blelock_switch",
  "lockValue": "0"
}
字段 类型 描述
fenceRadius Int 圆形围栏半径
fenceAppNotice String 告警信息,支持多个,逗号分隔。
  • app:App 推送消息通知
  • sms:短信提醒
  • phone:电话通知
示例:"app,sms" 表示开启 App 推送和短信提醒
open Boolean 围栏能力开关,true 表示开启
lockDpCode String 锁状态 DP Code,当前固定为 blelock_switch
lockValue String 关锁状态的 DP 值

关于 lockValue,由于 lockDpCode 可能有不同的定制,例如 blelock_switch 可能存在 bool 类型,也可能存在 int 型。需要读取其具体类型,再获取其关锁的值进行发送。

  • 如果当前 PID 下 blelock_switch 为 bool 类型,false 为关锁,则发送字符串 "false"
  • 如果当前 PID 下 blelock_switch 是 int 型,1 表示关闭,则发送字符串 "1"