鹰眼android sdk | 百度地图api sdk-凯发k8官方旗舰厅

浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。
地理围栏
下载开发文档
简介

鹰眼的地理围栏服务,将根据轨迹判断终端是否进出围栏,并实时推送报警。鹰眼 android sdk、ios sdk 和 web服务api 均提供地理围栏接口,详见:地理围栏

围栏的形状

目前鹰眼支持以下围栏形状:

1. 圆形围栏:支持设置圆形围栏,一旦进出圆形范围则推送报警

2. 多边形围栏:支持设置多边形围栏,一旦进出多边形围栏则推送报警

3. 线型围栏:支持设置折线围栏,一旦偏离或回到设定路线则推送报警

4. 行政区围栏:支持通过传入行政区名称,创建以行政区边界为界的围栏

客户端围栏和服务端围栏的说明

除围栏形状的区分,鹰眼android sdk还提供客户端和服务端两种围栏:

1. 客户端地理围栏:围栏的创建、计算和报警均在sdk完成,在卫星定位成功的情况下,无需联网即可完成围栏运算。可应用于手机终端网络不稳定情况下,仍需实时获取围栏报警的场景。例如,长途物流运输过程中,司机手机网络经常长时间断网或网络频繁切换,导致轨迹无法及时回传至服务端进行围栏运算,因此也无法获取实时报警。此时可同步创建客户端围栏,无需联网即可利用卫星定位轨迹点在手机本地进行围栏计算,app 可及时收到报警信息进行相应的业务处理。

2. 服务端地理围栏:围栏的创建、计算和报警的发起都在鹰眼服务端完成,依赖于轨迹点上传至服务端才能进行围栏进算。相较于客户端围栏,服务端围栏报警推送方式更多样:支持推送至 sdk,也支持推送至开发者的服务端,同时还支持报警信息批量查询

开发者可根据业务场景选择两类围栏中的一类,或两类同时使用。

围栏报警去噪的说明

无论是卫星定位还是网络定位都存在误差(也就是常说的定位漂移问题),噪点会造成围栏误报警。

目前鹰眼围栏进行了去噪处理,同时开放了 denoise 参数供开发者在创建围栏时设置,围栏运算时,一旦判断轨迹点定位精度大于denoise,则不参与围栏运算。比如设置denoise=30,则定位精度大于30米的轨迹点都不会参与围栏计算。

在此提供各定位模式的平均精度供开发者参考:卫星定位精度均值为10米,wifi定位精度均值为24米,基站定位精度均值为210米。

围栏的应用场景

1. 物流时效监控:司机app集成鹰眼sdk持续追踪轨迹。车辆管理人员通过服务端为每个司机创建出发地和目的地站点围栏,一旦监控对象进出围栏,鹰眼支持向鹰眼sdk 和 开发者服务端 推送报警信息。

2. 路线偏离报警:鹰眼v3.0新增路线围栏,可设定车辆行驶路线和偏离距离,一旦车辆偏离超过设定的距离,鹰眼围栏将推送报警。

3. 用车行业运营区域监控:利用鹰眼多边形地理围栏和行政区围栏功能,设置运营区域围栏,一旦判断车辆进/出运营区触发报警。

创建客户端围栏

目前客户端围栏仅支持圆形围栏,以圆形围栏为例介绍客户端围栏的创建

// 请求标识
int tag =3;
// 轨迹服务id
long serviceid =0;
// 围栏名称
string fencename ="local_circle";
// 监控对象
string monitoredperson ="mytrace";
// 围栏圆心
com.baidu.trace.model.latlng center =newcom.baidu.trace.model.latlng(39.9151190000,116.4039630000);
// 围栏半径(单位 : 米)
double radius =2000;
// 去噪精度
int denoise =200;
// 坐标类型
coordtype coordtype =coordtype.bd09ll;
// 创建本地圆形围栏请求实例
createfencerequest localcirclefencerequest =createfencerequest.buildlocalcirclerequest(tag, serviceid,fencename, monitoredperson, center, radius, denoise, coordtype);
// 初始化围栏监听器
onfencelistener mfencelistener =newonfencelistener(){
// 创建围栏回调
@override
publicvoidoncreatefencecallback(createfenceresponse response){}
// 更新围栏回调
@override
publicvoidonupdatefencecallback(updatefenceresponse response){}
// 删除围栏回调
@override
publicvoidondeletefencecallback(deletefenceresponse response){}
// 围栏列表回调
@override
publicvoidonfencelistcallback(fencelistresponse response){}
// 监控状态回调
@override
publicvoidonmonitoredstatuscallback(monitoredstatusresponse
response){}
// 指定位置监控状态回调
@override
publicvoidonmonitoredstatusbylocationcallback(monitoredstatusbylocationresponse response){}
// 历史报警回调
@override
publicvoidonhistoryalarmcallback(historyalarmresponse response){}
};
// 创建本地圆形围栏
mtraceclient.createfence(localcirclefencerequest, mfencelistener);
创建服务端围栏

1. 以创建多边形围栏为例,圆形和线型围栏与之类似,不再重复说明:

// 请求标识
int tag =11;
// 轨迹服务id
long serviceid =0;
// 围栏名称
string fencename ="server_polygon_fence";
// 监控对象
string monitoredperson ="mytrace";
// 多边形顶点集
list<com.baidu.trace.model.latlng> vertexes =newarraylist<com.baidu.trace.model.latlng>();
vertexes.add(newlatlng(40.0581750000,116.3067370000));
vertexes.add(newlatlng(40.0583410000,116.3079580000));
vertexes.add(newlatlng(40.0554970000,116.3093600000));
vertexes.add(newlatlng(40.0554140000,116.3078150000));
// 去噪精度
int denoise =100;
// 坐标类型
coordtype coordtype =coordtype.bd09ll;
// 创建服务端多边形围栏请求实例
createfencerequest request =createfencerequest.buildserverpolygonrequest(tag,
serviceid, fencename, monitoredperson, vertexes, denoise, coordtype);
// 初始化围栏监听器
onfencelistener mfencelistener =newonfencelistener(){
//参见客户端围栏
};
// 创建服务端多边形围栏
mtraceclient.createfence(request, mfencelistener);

2. 创建行政区围栏示例:

// 请求标识
int tag =13;
// 轨迹服务id
long serviceid =0;
// 围栏名称
string fencename ="server_district_fence";
// 监控对象
string monitoredperson ="mytrace";
// 行政区划关键字
string keyword ="湖南省长沙市";
// 去噪精度
int denoise =100;
// 创建服务端行政区划围栏请求实例
createfencerequest request =createfencerequest.buildserverdistrictrequest(tag,
serviceid, fencename, monitoredperson, keyword, denoise);
// 初始化围栏监听器
onfencelistener mfencelistener =newonfencelistener(){
//参见创建客户端围栏
}
// 创建服务端行政区划围栏
mtraceclient.createfence(request, mfencelistener);
围栏报警推送

围栏报警支持推送至鹰眼sdk,统一由ontracelistener监听器中的onpushcallback()推送回调接口接收。 开发者可在报警回调中触发自身业务,如发送短信至其他监控者、推送至开发者服务端等。

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

查询历史报警

不论围栏是否被删除,鹰眼将保留7天内的所有围栏报警信息,可通过queryfencehistoryalarminfo方法并指定fenceid即可查询。

如:查询fenceid 等于100、101、102的三个围栏在30分钟内的报警信息:

// 请求标识
int tag =8;
// 轨迹服务id
long serviceid =0;
// 开始时间
long starttime =system.currenttimemillis()/1000-30*60;
// 结束时间
long endtime =system.currenttimemillis()/1000;
// 监控对象
string monitoredperson ="mytrace";
// 坐标类型
coordtype coordtypeoutput =coordtype.bd09ll;
// 围栏编号列表
list<long> fenceids =newarraylist<long>();
fenceids.add(100l);
fenceids.add(101l);
fenceids.add(102l);
// 创建服务端围栏历史报警请求
historyalarmrequest request =historyalarmrequest.buildserverrequest(tag, serviceid, starttime, endtime,monitoredperson, fenceids, coordtypeoutput);
// 初始化围栏监听器
onfencelistener mfencelistener =newonfencelistener(){
//参见创建客户端围栏
}
// 查询围栏历史报警信息
mtraceclient.queryfencehistoryalarminfo(request, mfencelistener);
查询监控者状态

可通过querymonitoredstatus()方法可以查询被监控者是在围栏内或围栏外(以被监控者上传至服务端的最新轨迹点计算)。

如:查询entityname="mytrace"所有围栏的状态:

// 请求标识
int tag =9;
// 轨迹服务id
long serviceid =0;
// 监控对象
string monitoredperson ="mytrace";
// 围栏编号列表,传 null,则表示查询该 entity 所有围栏。若填写fenceid 列表,则查询指定围栏的状态
list<long> fenceids =null;
// 创建查询服务端围栏监控状态请求
monitoredstatusrequest request =monitoredstatusrequest.buildserverrequest(tag,
serviceid, monitoredperson, fenceids);
// 初始化围栏监听器
onfencelistener mfencelistener =newonfencelistener(){
//参见客户端围栏
}
// 查询围栏监控者状态
mtraceclient.querymonitoredstatus(request, mfencelistener);
根据坐标查询监控者状态

当轨迹点尚未上传时,无法通过querymonitoredstatus()方法查询到准确的状态。此时,可通过querymonitoredstatusbylocation()方法,传入一个被追踪者当前的坐标,判断被追踪者是在围栏内还是围栏外。

如:查询监控对象car1(指定位置:119.33,40.39,坐标类型为:百度经纬度)是在编号为1的围栏内还是外。

// 请求标识
int tag =10;
// 轨迹服务id
long serviceid =0;
// 监控对象
string monitoredperson ="mytrace";
// 围栏编号列表
list<long> fenceids =null;
// 位置坐标
com.baidu.trace.model.latlnglocation=newcom.baidu.trace.model.latlng(40.0552720000,116.307655000);
// 坐标类型
coordtype coordtype =coordtype.bd09ll;
// 创建查询服务端围栏指定位置上监控状态请求实例
monitoredstatusbylocationrequest request =monitoredstatusbylocationrequest.buildserverrequest(tag,serviceid, monitoredperson, fenceids,location, coordtype);
// 初始化围栏监听器
onfencelistener mfencelistener =newonfencelistener(){
//参见客户端围栏
}
// 查询围栏监控者状态
mtraceclient.querymonitoredstatusbylocation(request, mfencelistener);

上一篇

轨迹分析

下一篇

图像存储

本篇文章对您是否有帮助?

网站地图