# 四、区域

# (一)概述

区域数据包括区域要素[AreaFeature]、区域集合[AreaSet]两个数据类。

区域要素[AreaFeature]是一种地图数据,可用来记录地图上的区域。例如停车区域,办公区域,危险区域...等等。如下图:

区域集合[AreaSet]用来分类存放、管理区域要素[AreaFeature]。

# (二)区域集合[AreaSet]

所有的区域数据,都存放在不同的区域集合之下。想要对区域进行操作,需要先获取区域集合。 路线集合[AreaSet]的常用属性如下:

属性名 值类型 属性描述
name String 区域集合名称
remark String 备注
symbol PolygonSymbol 区域符号

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

方法名 返回类型 方法描述
queryAreas void 查询集合下的所有区域要素
createArea void 创建区域
updateArea void 更新区域信息
deleteArea void 删除区域

# 1、获取区域集合

初始化成功后,可直接从Cellsys的organization对象中获取到组织下所有的区域集合。具体代码示例如下:

/*执行初始化成功后,可直接获取到区域集合*/
let areaSets = Cellsys.shared.organization.areaSets //areaSets可能为null
if (areaSets != nil ) {
    let areaSet = areaSets.first
    let name = areaSet.name //集合名称
    let remark = areaSet.remark //集合备注信息
    let polygonSymbol = areaSet.symbol //获取地图符号对象
}
1
2
3
4
5
6
7
8

# (1)区域符号[PolygonSymbol]

区域符号决定了区域要素在地图上的具体参数,如:边框颜色、边框透明度、边框宽度、填充颜色,填充透明度等。具体参数获取示例如下:

let color = polygonSymbol.fillColor //区域填充颜色
let colorValue = color.value //返回一个带#号的色值:如#3c3c3c
let alpha = polygonSymbol.alpha //填充色的不透明度。取值范围0~1,1为不透明
let strokeSymbol = polygonSymbol.strokeSymbol 
let width = strokeSymbol.width //边框宽度
let strokeColor = strokeSymbol.fillColor //边框颜色
let strokeCValue = color.value //返回一个带#号的色值:如#3c3c3c
let strokeAlpha = strokeSymbol.alpha //边框的不透明度
1
2
3
4
5
6
7
8

有关区域符号[PolygonSymbol]的详细介绍,可查看附-样式

# 2、新增区域集合

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

let polygonSymbol = PolygonSymbol.new(fillColor: Color.new(ribbon: Ribbon.Blue))
organization.createAreaSet(name: "区域名称", remark: "集合备注", polygonSymbol: polygonSymbol) { obj, errorMessage in
    //成功
    if (obj != nil) {
        let areaSet = obj?.data as? AreaSet
    }
    //失败
    if (errorMessage != nil) {
        let errorCode = errorMessage?.code //错误码
        let errorMsg = errorMessage?.message //错误信息
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

# 3、修改区域集合

区域集合通过组织[Organization]对象修改。具体操作见代码示例

areaSet.remark = "修改线路集合"
organization.updateAreaSet(areaSet: areaSet!) { obj, errorMessage in
    //成功
    if (obj != nil) {
    }
    //失败
    if (errorMessage != nil) {
        let errorCode = errorMessage?.code //错误码
        let errorMsg = errorMessage?.message //错误信息
    }
}

1
2
3
4
5
6
7
8
9
10
11
12

# 4、删除区域集合

区域集合通过组织[Organization]对象来删除。具体操作见代码示例

organization.deleteAreaSet(areaSet: areaSet!) { obj, errorMessage in
    //成功
    if (obj != nil) {
    }
    //失败
    if (errorMessage != nil) {
        let errorCode = errorMessage?.code //错误码
        let errorMsg = errorMessage?.message //错误信息
    }
}
1
2
3
4
5
6
7
8
9
10

# (三)区域要素[AreaFeature]

区域要素是地图数据,一个区域要素对象可以表示一条地图区域。区域要素的常用属性表如下:

属性名 值类型 属性描述
name String 区域集合名称
remark String 备注
symbol PolygonSymbol 区域符号
polygon Polygon 区域坐标集合
fenceInfo FenceInfo 围栏信息

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

方法名 返回类型 方法描述
- - -

# 1、获取区域要素

区域集合[AreaSet]提供了query方法来查询自身集合中的区域要素。具体操作见代码示例

areaSet.queryAreas { obj, errorMessage in
    //成功
    if (obj != nil) {
        /*分页信息-查询方法特有*/
        let pageInfo = obj.pageInfo //查询接口特有的分页信息
        let totalCount = pageInfo.totalCount //数据总数
        let totalPage = pageInfo.totalPage //总页数
        let pageNo = pageInfo.pageNo //当前页码(从1开始)
        let pageSize = pageInfo.pageSize //每页查询数量(注意!不一定和当前查询的数据总量匹配)

        /*获取查询结果*/
        let areaFeatures = obj.data
        if (areaFeatures != nil ) {//查询结果可能为null
            for areaFeature in areaFeatures {
                /*区域要素基础信息获取示例*/
                let name = areaFeature.name //区域要素名称
                let remark = areaFeature.remark //备注
                let polygonSymbol = areaFeature.symbol //区域符号
                let polygon = areaFeature.polygon //区域坐标
                let fenceInfo = areaFeature.fenceInfo //电子围栏属性
            }
        }
    }
    //失败
    if (errorMessage != nil) {
        let errorCode = errorMessage?.code //错误码
        let errorMsg = errorMessage?.message //错误信息
    }
}
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

# 2、新增区域要素

区域要素[AreaFeature]通过区域集合[AreaSet]对象创建。具体操作见代码示例

/*生成区域坐标*/
let name = "区域名称"
let remark = "区域备注"
let geometry = ["type":"Polygon","coordinates":[[[113.436174765915,23.1632031849264],[113.43617987521,23.1622170910859],[113.43706378316,23.162237528264],[113.437293701413,23.1623550420377],[113.437263045646,23.1626207253522],[113.437217061995,23.1631878570429],[113.43716596905,23.1633155894056],[113.436174765915,23.1632031849264]]]] as [String : Any]
let polygon = Polygon.new(jsonGeometry: JSON(geometry)) as! Polygon
areaSet.createArea(name: name, remark: remark, polygon: polygon) { obj, errorMessage in
    //成功
    if (obj != nil) {
        let areaFeature = obj?.data as? AreaFeature
    }
    //失败
    if (errorMessage != nil) {
        let errorCode = errorMessage?.code //错误码
        let errorMsg = errorMessage?.message //错误信息
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 3、修改区域要素

区域要素[AreaFeature]通过区域集合[AreaSet]对象修改。具体操作见代码示例

areaFeature.name = "修改名字"
areaFeature.remark = "修改备注"
areaSet.updateArea(area: areaFeature) { obj, errorMessage in
    //成功
    if (obj != nil) {
        /*成功,可在回调中直接查看原对象修改后的数据*/
        let name = areaFeature.name
        let remark = areaFeature.remark
    }
    //失败
    if (errorMessage != nil) {
        let errorCode = errorMessage?.code //错误码
        let errorMsg = errorMessage?.message //错误信息
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 4、删除区域要素

路线要素[AreaSet]通过路线集合[AreaFeature]对象删除。具体操作见代码示例

areaSet.deleteArea(area: areaFeature) { obj, errorMessage in
    //成功
    if (obj != nil) {
    }
    //失败
    if (errorMessage != nil) {
        let errorCode = errorMessage?.code //错误码
        let errorMsg = errorMessage?.message //错误信息
    }
}
1
2
3
4
5
6
7
8
9
10