# 五、专题地图
# (一)专题与图层
专题是可综合显示多种地图要素的地图。通常可用于显示某种主题的地图。
地图要素:标记要素、路线要素、区域要素,统称地图要素。

在CoreSDK中,专题关联了多个图层,每个图层关联一个地图要素集。
地图要素集:标记集合、路线集合、区域集合,统称地图要素集。
因此,要配置好专题,得先要会配置图层。要显示专题数据,也需要知道如何获取图层关联的图层数据。
# (二)图层(Layer)
图层通常对应一种集合数据,并可自定义其在地图上的符号(或者说显示样式)。Layer类的常用属性表如下:
属性名 | 值类型 | 属性描述 |
---|---|---|
name | String | 图层的名称 |
remark | String | 图层的备注信息 |
icon | Icon | 图层的图标 |
geometryType | GeometryType | 图层类型 |
layerSymobl | PointSymbol / PolylineSymbol / PolygonSymbol | 图层的地图符号 |
图层常用方法如下:
方法名 | 返回类型 | 方法描述 |
---|---|---|
setName | void | 设置图层名称 |
setMapFeatureSet | void | 设置图层关联的地图要素集合 |
setLayerSymbol | void | 设置图层的地图符号 |
# 1、获取/查询图层
初始化成功后,可调用Cellsys的organization对象的queryLayer方法进行查询。具体代码示例如下:
Cellsys.organization.queryLayer(new CsCallback<QueryResult<Layer>>() {
@Override
public void onSuccess(QueryResult<Layer> object) {
/*分页信息-查询方法特有*/
PageInfo pageInfo = object.pageInfo;//查询接口特有的分页信息
int totalCount = pageInfo.totalCount;//数据总数
int totalPage = pageInfo.totalPage;//总页数
int pageNo = pageInfo.pageNo;//当前页码(从1开始)
int pageSize = pageInfo.pageSize;//每页查询数量(注意!不一定和当前查询的数据总量匹配)
/*获取查询结果*/
List<Layer> layers = object.data;
if (layers != null && layers.size() > 0) {//查询结果可能为null
Layer layer = layers.get(0);
String name = layer.getName();//图层名称
String remark = layer.getRemark();//图层备注
GeometryType geometryType = layer.getGeometryType();
/*图层样式
* 根据地图要素集种类(标记、路线、区域)的不同,图层样式会是不同的MapSymbol子类。*/
MapSymbol mapSymbol = layer.getLayerSymbol();
if (mapSymbol instanceof PointSymbol) {
PointSymbol pointSymbol = (PointSymbol) mapSymbol;
} else if (mapSymbol instanceof PolylineSymbol) {
PolylineSymbol polylineSymbol = (PolylineSymbol) mapSymbol;
} else if (mapSymbol instanceof PolygonSymbol) {
PolygonSymbol polygonSymbol = (PolygonSymbol) mapSymbol;
}
}
}
@Override
public void onFailure(ErrorMessage errorMessage) {
/*失败*/
int code = errorMessage.getCode();//错误码
String errMsg = errorMessage.getMessage();//错误信息
}
}
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
# 2、新增图层
初始化成功后,可调用Cellsys的organization对象的createLayer方法进行查询。具体代码示例如下:
/*创建标记图层*/
PointSymbol pointSymbol = new PointSymbol(icon, new Color(Ribbon.GeekBlue, RibbonLevel.L2));//自定义图层样式传null,直接使用标记集合的默认样
Cellsys.organization.createLayer("图层名称", "图层描述", markerSet, pointSymbol, new CsCallback<Layer>() {
@Override
public void onSuccess(Layer object) {
/*创建成功,object为创建成功的返回对象*/
object.getName();
}
@Override
public void onFailure(ErrorMessage errorMessage) {
/*失败*/
int code = errorMessage.getCode();//错误码
String errMsg = errorMessage.getMessage();//错误信息
}
});
/*创建路线图层*/
int strokeWidth = 5;//边框宽度
Color strokeColor = new Color(Ribbon.Green, RibbonLevel.L8);
PolylineSymbol polylineSymbol = new PolylineSymbol(strokeWidth, strokeColor);//图层路线样式。传null则使用路线的默认样式
Cellsys.organization.createLayer("图层名称", "图层描述", lineSet, polylineSymbol, new CsCallback<Layer>() {
@Override
public void onSuccess(Layer object) {
/*创建成功,object为创建成功的返回对象*/
object.getName();
}
@Override
public void onFailure(ErrorMessage errorMessage) {
/*失败*/
int code = errorMessage.getCode();//错误码
String errMsg = errorMessage.getMessage();//错误信息
}
});
/*创建区域图层*/
Color _fillColor = new Color(Ribbon.Green, RibbonLevel.L4);//填充颜色
float _fillAlpha = 0.5f;
int _strokeWidth = 5;//边框宽度
Color _strokeColor = new Color(Ribbon.Green, RibbonLevel.L8);
float _strokeAlpha = 1f;
PolylineSymbol lineSymbol = new PolylineSymbol(strokeWidth, strokeColor);
PolygonSymbol polygonSymbol = new PolygonSymbol(_fillColor, _fillAlpha, lineSymbol, FillType.PureColor, 0);
Cellsys.organization.createLayer("图层名称", "图层描述", areaSet, polygonSymbol, new CsCallback<Layer>() {
@Override
public void onSuccess(Layer object) {
/*创建成功,object为创建成功的返回对象*/
object.getName();
}
@Override
public void onFailure(ErrorMessage errorMessage) {
/*失败*/
int code = errorMessage.getCode();//错误码
String errMsg = errorMessage.getMessage();//错误信息
}
});
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# 3、更新图层
初始化成功后,可调用Cellsys的organization对象的updateLayer方法进行查询。具体代码示例如下:
layer.setName("要修改的名称");
layer.setRemark("要修改的备注");
/*修改图层关联的集合数据,并使用集合默认的样式*/
layer.setMapFeatureSet(markerSet);
layer.setMapFeatureSet(lineSet);
layer.setMapFeatureSet(areaSet);
/*修改图层关联的集合数据,并自定义样式*/
boolean result = layer.setMapFeatureSet(markerSet, pointSymbol);
if (!result) {
//修改失败。可能原因是,集合与样式的类型不匹配。标记集合需配对点符号,路线集合配对线符号,区域集合配对面符号。
}
boolean result2 = layer.setMapFeatureSet(lineSet, polylineSymbol);
boolean result3 = layer.setMapFeatureSet(areaSet, polygonSymbol);
/*仅修改图层的样式*/
boolean changeResult = layer.setLayerSymbol(pointSymbol);
if (!changeResult) {
//修改失败。可能原因是,集合与样式的类型不匹配。标记集合需配对点符号,路线集合配对线符号,区域集合配对面符号。
}
Cellsys.organization.updateLayer(layer, new CsCallback() {
@Override
public void onSuccess(Object object) {
//修改成功,相关属性已同步到layer对象中。
String name = layer.getName();
}
@Override
public void onFailure(ErrorMessage errorMessage) {
/*失败*/
int code = errorMessage.getCode();//错误码
String errMsg = errorMessage.getMessage();//错误信息
}
});
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、删除图层
初始化成功后,可调用Cellsys的organization对象的deleteLayer方法进行查询。具体代码示例如下:
Cellsys.organization.deleteLayer(layer, new CsCallback() {
@Override
public void onSuccess(Object object) {
/*成功*/
}
@Override
public void onFailure(ErrorMessage errorMessage) {
/*失败*/
int code = errorMessage.getCode();//错误码
String errMsg = errorMessage.getMessage();//错误信息
}
});
2
3
4
5
6
7
8
9
10
11
12
13
# (三)专题(Map)
专题可关联多种图层数据,并指定图层在专题中的排序。排序越靠后的图层越容易被其他图层覆盖。专题类(Map)的常用属性如下:
属性名 | 值类型 | 属性描述 |
---|---|---|
name | String | 专题地图名称 |
remark | String | 专题地图备注信息 |
icon | Icon | 专题地图图标 |
mapConifg | MapConifg | 专题地图配置信息 |
常用方法如下:
方法名 | 返回类型 | 方法描述 |
---|---|---|
queryLayers | void | 查询专题关联的图层详情 |
associateLayer | void | 新增关联图层(单个) |
cancelAssociateLayer | void | 取消关联图层(单个) |
updateAssociatedLayers | void | 重设图层关联关系(可多个) |
sortLayers | void | 图层排序 |
# 1、获取专题
初始化成功后,可通过Cellsys的organization对象获取。具体代码示例如下:
List<Map> maps = Cellsys.organization.getMaps();//可能为null
if (maps != null && maps.size() > 0) {
Map map = maps.get(0);
String name = map.getName();//获取专题名称
String remark = map.getRemark();//获取专题备注
Icon icon = map.getIcon();//获取专题图标
MapConfig mapConfig = map.getMapConfig();//获取专题的地图配置
MapPoint center = mapConfig.defaultCenter;//专题地图默认中心点
int zoom = mapConfig.defaultZoom;//专题地图默认缩放级别
//查询专题关联图层
map.queryLayer(new CsCallback<QueryResult<Layer>>() {
@Override
public void onSuccess(QueryResult<Layer> object) {
List<Layer> layers = object.data;
if (layers != null) {
//......
}
}
@Override
public void onFailure(ErrorMessage errorMessage) {
/*失败*/
int code = errorMessage.getCode();//错误码
String errMsg = errorMessage.getMessage();//错误信息
}
});
}
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
# 2、新增专题
初始化成功后,可通过Cellsys的organization对象来新增专题。具体代码示例如下:
//地图配置类
MapPoint center = new MapPoint(23, 113);//专题地图默认中心点
int zoom = 16;//专题地图默认缩放级别
MapConfig mapConfig = new MapConfig(center, zoom);
Cellsys.organization.createMap("专题名称", "专题备注", icon, mapConfig, new CsCallback<Map>() {
@Override
public void onSuccess(Map object) {
/*创建成功,回调是创建后的map对象*/
String name = object.getName();//专题名称
//...
}
@Override
public void onFailure(ErrorMessage errorMessage) {
/*失败*/
int code = errorMessage.getCode();//错误码
String errMsg = errorMessage.getMessage();//错误信息
}
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 3、更新专题
初始化成功后,可通过Cellsys的organization对象来更新专题信息。具体代码示例如下:
MapPoint center = new MapPoint(23, 113);//专题地图默认中心点
int zoom = 16;//专题地图默认缩放级别
MapConfig mapConfig = new MapConfig(center, zoom);
map.setName("修改后名称");
map.setRemark("修改的备注");
map.setIcon(icon);//修改图标
map.setMapConfig(mapConfig);
Cellsys.organization.updateMap(map, new CsCallback() {
@Override
public void onSuccess(Object object) {
/*修改成功*/
}
@Override
public void onFailure(ErrorMessage errorMessage) {
/*失败*/
int code = errorMessage.getCode();//错误码
String errMsg = errorMessage.getMessage();//错误信息
}
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 4、删除专题
初始化成功后,可通过Cellsys的organization对象来删除专题。具体代码示例如下:
Cellsys.organization.deleteMap(map, new CsCallback() {
@Override
public void onSuccess(Object object) {
/*删除成功*/
}
@Override
public void onFailure(ErrorMessage errorMessage) {
/*失败*/
int code = errorMessage.getCode();//错误码
String errMsg = errorMessage.getMessage();//错误信息
}
});
2
3
4
5
6
7
8
9
10
11
12
13
# 5、图层关联
Map对象提供了三种方法来设置与图层的关联关系。分别是关联单个图层、取消关联单个图层、重设所有图层的关联关系。具体代码示例如下:
/*新增一个关联图层*/
map.associateLayer(layer, new CsCallback() {
@Override
public void onSuccess(Object object) {
/*成功*/
}
@Override
public void onFailure(ErrorMessage errorMessage) {
/*失败*/
int code = errorMessage.getCode();//错误码
String errMsg = errorMessage.getMessage();//错误信息
}
});
/*移除指定的关联图层*/
map.cancelAssociateLayer(layer, new CsCallback() {
@Override
public void onSuccess(Object object) {
/*成功*/
}
@Override
public void onFailure(ErrorMessage errorMessage) {
/*失败*/
int code = errorMessage.getCode();//错误码
String errMsg = errorMessage.getMessage();//错误信息
}
});
/*重置关联的图层,清空之前的图层关联,重新设置新的图层关联关系*/
List<Layer> layers = new ArrayList<>();
layers.add(layer);
layers.add(layer2);
map.updateAssociatedLayers(layers, new CsCallback() {
@Override
public void onSuccess(Object object) {
/*成功*/
}
@Override
public void onFailure(ErrorMessage errorMessage) {
/*失败*/
int code = errorMessage.getCode();//错误码
String errMsg = errorMessage.getMessage();//错误信息
}
});
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
43
44
45
46
47
# 6、图层排序
通过Map对象的sortLayers方法来对图层进行排序。代码示例如下:
List<Layer> layers = new ArrayList<>();
layers.add(layer);//最早加入的图层处于最顶层,最后加入的图层处于最底层。
layers.add(layer2);
layers.add(layer3);
map.sortLayers(layers, new CsCallback() {
@Override
public void onSuccess(Object object) {
/*成功*/
}
@Override
public void onFailure(ErrorMessage errorMessage) {
/*失败*/
int code = errorMessage.getCode();//错误码
String errMsg = errorMessage.getMessage();//错误信息
}
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17