移动设备本身内存、性能等限制,对移动端的地图浏览和应用有更高的要求,为了提高地图性能和体验,需要对移动端使用的地图进行优化,包括在移动端或桌面端对矢量数据的优化和对栅格数据的优化。
矢量数据优化
数据集抽稀
当矢量数据集中的对象个数多,且单个对象的节点个数多时可以通过抽稀减少对象节点数,减少在地图中的绘制和渲染时间。但这个方法会改变数据本身,只适用于地图小比例尺下显示。
桌面端抽稀
使用SuperMap iDeskstopX(以下简称“iDesktopX”),在“数据”选项卡的“数据处理”中,选择【矢量重采样】,实现数据集抽稀。
图:矢量重采样 |
图:设置矢量重采样参数 |
移动端抽稀
地图中数据绘制和渲染耗时取决于地图当前可见窗口内对象个数和节点数,当单个对象的节点数多时会极大影响性能,所以可以根据需要对图层中对象节点进行抽稀。对图层上显示对象的抽稀,不会影响数据集中的对象,只是影响地图小比例尺下对象的显示效果,比例尺越小抽稀越明显,且抽稀的参数可以自行设置,代码如下:
layer.setDeduplicateEnabled(true);//设置地图抽稀
layer.setMinVisibleGeometrySize(0.4);//设置几何对象的最小显示尺寸
layer.setDeduplicateTolerance(2);//设置抽稀容限
layer.setDeduplicateThreshold(20);//设置抽稀阈值
创建空间索引
当矢量数据集中对象个数超过1000条时,建议创建空间索引。
桌面端创建空间索引
使用SuperMapiDeskstopx,在数据集上点击右键,选择“重建空间索引”,设置空间索引。
图:重建空间索引 |
图:设置索引类型 |
移动端创建空间索引
使用iMobile,也能创建空间索引。开发用到的jar包为:com.supermap.data.jar和com.supermap.mapping.jar。创建前,先使用Dataset类的isSpatialIndexDirty()方法,判断是否已创建空间索引。未创建时,通过Dataset类的buildSpatialIndex()方法,创建空间索引。
参考代码如下:
if(dataset.isSpatialIndexDirty()){
dataset.buildSpatialIndex(SpatialIndexType.RTREE);
}
创建字段索引
如果地图中有矢量图层对应的标签专题图层,该专题图层的字段表达式字段需要创建字段索引,否则影响性能较大。
桌面端创建字段索引
使用iDesktopX创建空间索引,在“开始”选项卡选择【字段索引】,通过【创建】按钮,选择索引字段。
图:创建字段索引 |
图:选择字段索引 |
移动端创建字段索引
使用iMobile,也能创建字段索引。开发用到的jar包为:com.supermap.data.jar和com.supermap.mapping.jar。通过Dataset类的buildFieldIndex方法,创建字段索引。
String[] fields = new String[]{"SmID"};
Map<String,String> map = dataset.getFieldIndexes();
boolean isExist = map.containsValue("SmID");
if (!isExist){
boolean isOk = dataset.buildFieldIndex(fields,"SmID_index");
}
设置图层可见比例尺
地图中加载数据时,需要合理设置各个图层的可见比例尺,既不影响功能又尽量减少当前可见窗口内的对象数。比如有3个线数据集,分别存储国道、省道和乡村道路,在地图小比例尺时只让国道图层显示,大比例尺时才让乡村道路图层显示,这样不仅能提升性能,地图浏览整体还美观。
桌面端设置比例尺
在iDesktopX中,打开地图,将地图缩放为合适的比例尺,在“图层管理器”中,选择待设置的图层,右键选择“设置可见比例尺范围”,选择【将当前地图比例尺作为最小值】或【将当前地图比例尺作为最大值】,设置地图比例尺范围。
图:设置可见比例尺范围 |
移动端设置比例尺
iMobile通过代码控制矢量图层的可见比例尺范围,通过Layer类的setMaxVisibleScale()和setMinVisibleGeometrySize()方法设置图层的最大、最小可见比例尺。
layer.setMaxVisibleScale(0.3)
layer. setMinVisibleGeometrySize(0.1)
地图缓存
如果矢量数据在地图中只是用于浏览,不需要对数据进行增删改查,建议先对矢量数据分级先切缓存,然后拷贝到移动端中加载。
在iDesktopX中,打开地图,在地图窗口右键选择【生成地图瓦片(单任务)】或【生成地图瓦片(多任务)】,设置参数(参数设置参照下图),生成地图缓存。
图:生成缓存 |
图:设置缓存参数 |
影像数据优化
多波段转单波段
通过将多波段影像数据转换为单波段数据,提升影像数据在移动端的操作性能。
使用SuperMap iDesktopX,在“工作空间管理器”中,选择影像数据集,单击右键,选择【属性】,查看数据集属性,在属性框中选择【影像】选项卡,查看栅格分块属性。在移动端高效运行的影像数据,栅格分块属性推荐值为256*256,在接下来输出影像数据集时,根据这个值进行相应的设置。
图:查看影像属性 |
在【工作空间管理器】中双击导入的影像数据集,将其添加到新的地图窗口。在该地图窗口,单击右键,选择【输出为影像数据集】,打开“输出为影像数据集”对话框。设置“分辨率”,该值为“栅格分块属性推荐值大小256 ÷ 原始影像栅格分块大小”的结果。(例如:原始影像栅格分块为128*128,则分辨率为256÷128=2)。设置“编码类型”为“DCT”。设置完成后,点击“确定”按钮,完成影像数据的输出。
图:输出为影像数据集 |
优化后的影像数据集,输出完成后,原始数据集已失去作用,可以通过点击右键,选择【删除数据集】的方式,将其删除。
建立影像数据金字塔
在“工作空间管理器”中,选择影像数据集,点击右键,选择【创建影像金字塔】。
图:建立影像金字塔 |