# 十、事件

# (一)概述

用户可以创建自定义事件,用作事件具体位置发生的事情。自定义事件可以是调查、众包采集、科考记录、旅游线路记录等多种形式,通过创建事件类型进行划分。

# (二)事件集合[EventSet]

所有的事件数据,都存放在不同的事件集合之下。想要对事件进行操作,需要先获取事件集合。 事件集合的常用属性如下:

属性名 值类型 属性描述
name String 事件集合名称
remark String 备注
icon Icon 图标
symbol PointSymbol 点符号

常用方法如下:(get/set方法略)

方法名 返回类型 方法描述
queryEvents void 查询集合下的所有事件要素
queryEventByName void 在该集合下的根据名称查找事件要素
createEvent void 创建事件
updateEvent void 更新事件信息
deleteEvent void 删除事件

# 1、获取事件集合

初始化成功后,可直接从Cellsys的organization对象中获取到组织下所有的事件集合。

List<EventSet> eventSets = Cellsys.organization.getEventSets();//eventSets 可能为null
if (eventSets != null && eventSets.size() > 0) {
    EventSet eventSet = eventSets.get(0);
    String name = eventSet.getName();//集合名称
    String remark = eventSet.getRemark();//集合备注信息
    PointSymbol pointSymbol = eventSet.getSymbol();//获取地图符号对象
    Icon icon = eventSet.getIcon();//获取图标对象
    boolean isPublish = eventSet.isPublish();//是否发布
}
1
2
3
4
5
6
7
8
9

# 2、新增事件集合

事件集合通过组织[Organization]对象创建。具体操作见代码示例

Cellsys.organization.createEventSet("集合名称", "集合备注", new CsCallback<EventSet>() {
    @Override
    public void onSuccess(EventSet object) {
        /*创建成功*/
        String name = object.getName();//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

# 3、修改事件集合

事件集合通过组织[Organization]对象进行修改。具体操作见代码示例

eventSet.setName("修改后名称");
eventSet.setRemark("修改后备注");
eventSet.setPublish(false);//将发布状态调整为不发布
eventSet.setIcon(icon);//修改图标。图标对象通过IconSet的query方法获取。
Cellsys.organization.updateEventSet(eventSet, new CsCallback() {
    @Override
    public void onSuccess(Object object) {
        /*修改成功*/
        eventSet.getName();/*修改后原对象的值将会被更改*/
        eventSet.getIcon();
        eventSet.getRemark();
        eventSet.getSymbol();
    }
         
    @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

# 4、删除事件集合

事件集合通过组织[Organization]对象进行删除。具体操作见代码示例

Cellsys.organization.deleteEventSet(eventSet, new CsCallback() {
    @Override
    public void onSuccess(Object 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

# (三)事件要素[EventFeature]

事件要素常用属性表如下:

属性名 值类型 属性描述
name String 事件集合名称
remark String 备注
icon Icon 图标
symbol PointSymbol 事件在地图上的符号
mapPoint MapPoint 事件发生地点
images List< Image > 事件图片列表
uploader CommonInfo 上传者的简易信息
happenTime DateTime 事件发生时间
content String 事件内容

事件要素的常用方法如下:(get/set方法略)

方法名 返回类型 方法描述
queryUploader void 查询事件上传者详情

# 1、查询事件要素

事件集合[EventSet]提供了query方法来查询自身集合下的事件。具体操作见代码示例

eventSet.queryEvents(new CsCallback<QueryResult<EventFeature>>() {
    @Override
    public void onSuccess(QueryResult<EventFeature> object) {
        /*分页信息-查询方法特有*/
        PageInfo pageInfo = object.pageInfo;//查询接口特有的分页信息
        int totalCount = pageInfo.totalCount;//数据总数
        int totalPage = pageInfo.totalPage;//总页数
        int pageNo = pageInfo.pageNo;//当前页码(从1开始)
        int pageSize = pageInfo.pageSize;//每页查询数量(注意!不一定和当前查询的数据总量匹配)
             
        /*获取查询结果*/
        List<EventFeature> eventFeatures = object.data;
        if (eventFeatures != null && eventFeatures.size() > 0) {//查询结果可能为null
            for (EventFeature eventFeature : eventFeatures) {
                /*事件要素基础信息获取示例*/
                String name = eventFeature.getName();//事件要素名称
                String remark = eventFeature.getRemark();//备注
                PointSymbol pointSymbol = eventFeature.getSymbol();//点符号
                String uploaderName = eventFeature.getUploader().getName();//上传人姓名
                String content = eventFeature.getContent();//事件内容
                DateTime happenTime = eventFeature.getHappenTime();//事件发生事件
                String dateStr = happenTime.toFormatString();//具体日期时间,例:2022-06-21 13:51:42
                long timeStamp = happenTime.value;//时间戳
                MapPoint mapPoint = eventFeature.getMapPoint();//事件发生地点
                List<Image> images = eventFeature.getImages();//事件图片列表
            }
        }
    }
         
    @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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

# (1)查询事件上报人详情

事件要素提供了queryUploader方法来查询、获取具体的上报成员对象。具体代码示例如下:

eventFeature.queryUploader(new CsCallback<QueryResult<MemberFeature>>() {
    @Override
    public void onSuccess(QueryResult<MemberFeature> object) {
        /*查询接口统一返回数组格式的数据。但一般来讲,上传者只会有一个*/
        List<MemberFeature> memberFeatures = object.data;
        if (memberFeatures == null || memberFeatures.size() == 0) {
            //找不到具体的上传人信息
        } else {
            MemberFeature uploader = memberFeatures.get(0);
            uploader.getName();//具体的MemberFeature操作见相关文档
        }
    }
         
    @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

# (2)显示事件图片

从query接口获取的事件要素的图片数据-Image对象,其type都是InternetImage。这是,Image对象的data属性即是图片的http/https网络链接。具体代码示例如下:

List<Image> images = eventFeature.getImages();//可能为空
if (images != null && images.size() > 0) {
    for (Image image : images) {
        if (image.type.equals(ImageType.InternetImage)) {
            String imgUrl = image.data;
        } else {
            /*从query方法获取的数据,ImageType不会是其他类型。否则便是异常数据*/
        }
    }
}
1
2
3
4
5
6
7
8
9
10

# 2、新增事件要素

事件要素[EventFeature]通过事件集合[EventSet]对象创建。具体操作见代码示例

/*事件地点*/
double lat = 39.908827;//纬度
double lng = 116.397804;//经度
MapPoint mapPoint = new MapPoint(lat, lng);
/*事件时间*/
long timeStamp = 1655796331234l;//毫秒级时间戳
DateTime happenTime = new DateTime(timeStamp);
/*事件图片*/
List<Image> images = new ArrayList<>();
Image image = new Image(ImageType.Base64BMP, base64Str, "picture.png");//base64Str是图片文件的base64编码
images.add(image); 
eventSet.createEvent("事件名称", "事件描述", mapPoint, happenTime, images, new CsCallback<EventFeatur() {
    @Override
    public void onSuccess(EventFeature object) {
        //事件创建成功,object对象为新创建的事件对象
        object.getName();
        object.getImages();
        //...
    }
         
    @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
22
23
24
25
26
27

# 3、修改事件要素

事件要素[EventFeature]通过事件集合[EventSet]对象修改。具体操作见代码示例

/*添加图片*/
String base64 = pictureToBase64(imgUrl);//将欲新增的图片转成base64,方法自行实现
List<Image> images = eventFeature.getImages();//获取当前图片列表
images.add(new Image(ImageType.Base64BMP, base64, "1.png"));//新增图片到图片列表中
eventFeature.setImages(images);
/*修改坐标*/
MapPoint mapPoint = new MapPoint(23.123512, 113.462313);
eventFeature.setMapPoint(mapPoint);
/*修改事件时间*/
long timeStamp = 1655796331234l;//毫秒级时间戳
DateTime happenTime = new DateTime(timeStamp);
eventFeature.setHappenTime(happenTime);
/*修改其他信息*/
eventFeature.setName("修改后的名称");
eventFeature.setRemark("修改后的备注");
eventFeature.setContent("修改后的事件内容");
     
eventSet.updateEvent(eventFeature, new CsCallback() {
    @Override
    public void onSuccess(Object object) {
        //修改成功,相应修改已同步到eventFeature对象
        eventFeature.getImages();
        eventFeature.getName();
    }
      
    @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
22
23
24
25
26
27
28
29
30
31
32
33

# 4、删除事件要素

事件要素[EventFeature]通过事件集合[EventSet]对象删除。具体操作见代码示例

eventSet.deleteEvent(eventFeature, new CsCallback() {
    @Override
    public void onSuccess(Object 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