# 八、围栏
# (一)围栏与围栏事件
门户系统允许将地图要素设置为电子围栏。根据设置围栏触发类型(进入触发/离开触发),当由成员进入/离开电子围栏时,就会生成围栏事件。
# (二)设置围栏
FenceInfo fenceInfo = markerFeature.fenceInfo;
fenceInfo.enable = true;//启用围栏
fenceInfo.radius = 10;//围栏半径
fenceInfo.triggerType = FenceTriggerType.In;//围栏触发类型
//markerFeature的更新需由其所属的集合对象markerSet来操作
markerSet.updateMarker(markerFeature, new CsCallback() {
@Override
public void onSuccess(Object object) {
//更新markerFeature信息成功(设置围栏成功)
}
@Override
public void onFailure(ErrorMessage errorMessage) {
int errorCode = errorMessage.getCode();//错误码
String errorMsg = errorMessage.getMessage();//错误信息
}
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# (三)围栏事件[FenceEvent]
# 1、获取围栏事件
Organization organization = Cellsys.organization;//初始化成功之后,可随时获取组织对象。
organization.queryFenceEvent(new CsCallback<QueryResult<FenceEvent>>() {
@Override
public void onSuccess(QueryResult<FenceEvent> object) {
List<FenceEvent> fenceEvents = object.data;
}
@Override
public void onFailure(ErrorMessage errorMessage) {
int errorCode = errorMessage.getCode();//错误码
String errorMsg = errorMessage.getMessage();//错误信息
}
});
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 2、围栏事件信息
//围栏触发类型(进入/离开)
FenceTriggerType fenceTriggerType = fenceEvent.triggerType;
//围栏触发人
fenceEvent.triggerMember.getName();//触发人名称
Location location = fenceEvent.locationOnTriggered;//触发人定位信息
/*查询具体的触发人信息*/
fenceEvent.queryTriggerDetail(new CsCallback<QueryResult<MemberFeature>>() {
@Override
public void onSuccess(QueryResult<MemberFeature> object) {
MemberFeature memberFeature = object.data.get(0);
}
@Override
public void onFailure(ErrorMessage errorMessage) {
int errorCode = errorMessage.getCode();//错误码
String errorMsg = errorMessage.getMessage();//错误信息
}
});
//围栏信息
fenceEvent.mapFeatureOfFence.getName();//围栏名称
Geometry geometry = fenceEvent.fenceGeometry;//围栏坐标信息
/*查询具体的围栏信息*/
fenceEvent.queryMapFeatureDeatil(new CsCallback<QueryResult<MapFeature>>() {
@Override
public void onSuccess(QueryResult<MapFeature> object) {
MapFeature mapFeature = object.data.get(0);
if (mapFeature instanceof MarkerFeature) {
MarkerFeature markerFeature = (MarkerFeature) mapFeature;
} else if (mapFeature instanceof LineFeature) {
LineFeature lineFeature = (LineFeature) mapFeature;
} else if (mapFeature instanceof AreaFeature) {
AreaFeature areaFeature = (AreaFeature) mapFeature;
}
}
@Override
public void onFailure(ErrorMessage errorMessage) {
int errorCode = errorMessage.getCode();//错误码
String errorMsg = errorMessage.getMessage();//错误信息
}
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 3、创建围栏事件
初始化成功后,可通过Cellsys的organization对象创建围栏事件。代码示例如下:
MemberFeature memberFeature = getMember();//触发人
MarkerFeature fence = getMarker();//触发围栏,可以是标记、路线、区域
double lat = 23.12366;//纬度
double lng = 113.521352;//经度
MapPoint mapPoint = new MapPoint(lat, lng);//点坐标
long timeStamp = TimeUtil.getTime();//获取时间戳
DateTime dateTime = new DateTime(timeStamp);//定位时间
Location location = new Location(mapPoint, dateTime);//触发时的定位信息
Cellsys.organization.createFenceEvent(memberFeature, location, fence, new CsCallback<FenceEvent>() {
@Override
public void onSuccess(FenceEvent object) {
/*成功*/
}
@Override
public void onFailure(ErrorMessage errorMessage) {
/*失败*/
int code = errorMessage.getCode();//错误码
String errMsg = errorMessage.getMessage();//错误信息
}
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21