地理围栏

简介

鹰眼的地理围栏服务,将根据轨迹判断终端是否进出围栏,并实时推送报警至观察者。

坐标系的说明

输入参数支持WGS84、GCJ02、bd09ll三种坐标系,可通过"coord_type"标明输入坐标类型。输出坐标仅支持百度经纬度坐标(bd09ll)。

围栏的主要参数

1. 围栏的范围:可是一个圆形或多边形地理区域


2. 被监控对象:被追踪的对象(比如一辆车),必须是一个已存在的entity并上传轨迹。一旦该entity进出围栏,都将触发报警。


3. 观察者:接收该围栏报警的人(比如车辆管理者),必须是一个已存在的entity,但不需要上传轨迹。

地理围栏的配额

一个围栏只能有1个被追踪者,1-5个观察者。


整个service无总围栏数限制,但每一个被监控对象(entity)最多被100个围栏监控。

围栏的应用场景一:物流司机发车和到达监控

场景描述:司机APP集成鹰眼SDK持续追踪轨迹。车辆管理人员为每个司机创建出发地和目的地围栏,监控对象和观察者都设为司机,并在SDK的围栏报警回调函数中向开发者服务端推送报警信息。一旦监控对象进出围栏,司机APP和开发者服务端将接收到实时报警。


1. 创建围栏

如:车辆管理管理员(admin)为某个司机(car1)创建一个围栏,被监控者和观察者都是car1。一旦car1触发围栏,报警信息将推送给car1。

围栏可在客户端(SDK)或服务端(WEB服务API)创建围栏。

客户端创建围栏可调用createCircularFence()createVertexesFence()方法创建,示例:

[[BTRACEAction shared] createCircularFence:self serviceId:100001 fenceName:@"fenceA" fenceDesc:nil creator:"admin" monitoredPersons:“car1” observers:"car1" validTimes:@"0000,2359" validCycle:4 validDate:nil validDays:nil coordType:3 center:"116.404046,39.91339" radius:5000 alarmCondition:3 precision:100];


2. 接收围栏报警信息

一旦司机触发围栏,鹰眼将推送报警信息至观察者SDK,通过ApplicationServiceDelegate协议的onPushTrace()回调中获取报警信息。开发者也可在此回调中触发自身业务,如推送消息至开发者服务端等。


3. 历史报警信息查询:

可通过queryFenceHistoryAlarm()方法查询某围栏在7天内报警信息。即使围栏被删除,仍可通过fenceId进行查询。

[[BTRACEAction shared] queryFenceHistoryAlarm:self serviceId:100001 fenceId:1 monitoredPersons:@"car1" beginTime:1471239000 endTime:1471249000];


4. 关于漏报警

向观察者SDK推送报警时,若因为网络原因推送失败,鹰眼将在后续的10分钟之内每隔15s推送一次,直至收到成功响应。若10分钟之后仍未成功,将不再推送,但报警记录将存储在鹰眼服务端。为避免因此造成报警漏接收,开发者可定期使用历史报警查询接口同步报警信息。


5. 关于误报警

无论是GPS定位还是网络定位都存在误差(也就是常说的定位漂移问题),这会影响到围栏状态的判断。比如当前在围栏内,由于定位偏差,下一次采集时定位到围栏外,便会报离开围栏,但此时并未离开围栏。

因此,开发者在创建或者更新围栏时,可以指定围栏去噪精度,也就是定位误差超过某一精度值的点不参与围栏状态计算。比如设置围栏去噪精度为30米,则定位精度大于30米的轨迹点都不会参与围栏计算,只有定位精度不大于30米的轨迹点才会参与计算。开发者可以根据自己业务对报警精度的要求,来调整围栏去噪精度。


6. 判断被追踪者是否在围栏中

调用queryFenceStatus()根据被监控对象上传到在服务端最新的轨迹点,判断在围栏内外。

[[BTRACEAction shared] queryFenceStatus:self serviceId:100001 fenceId:1 monitoredPersons:@"car1"];


7. 根据开发者传入的坐标,判断该坐标是否在围栏中

调用queryMonitoredStatusByLocation()方法,开发者可传入任意坐标,判断该坐标是否在围栏内,坐标不受上传轨迹点影响。

围栏的应用场景二:儿童监护

场景描述:儿童老人监护:儿童或老人随身设备中集成鹰眼服务持续追踪轨迹,监护者APP(如:父母)集成鹰眼SDK并管理围栏,将观察者设为监护者,接收被监控者触发围栏的报警。此时,围栏的被监控者和观察者是两个entity。如:父母(mother1)监控小孩(child1)

使用步骤:

1. 创建围栏

如:父母(mother1)为小孩(child1)创建一个围栏,被监控者设为child1,观察者设为mother1

[[BTRACEAction shared] createCircularFence:self serviceId:100001 fenceName:@"fenceA" fenceDesc:nil creator:"mother1" monitoredPersons:“mother1” observers:"child1" validTimes:@"0000,2359" validCycle:4 validDate:nil validDays:nil coordType:3 center:centerOfFence radius:radiusOfFence alarmCondition:3 precision:100];


其余同场景一。