作者:xinxin
随着GIS行业的发展,越来越大的数据应用于移动端,但相比PC端,同一份大小的数据在移动端显示要比在PC端慢,这就有必要通过其他方式来提升数据加载和显示的性能了。在使用SuperMap iMobile for Android产品加载和显示地图时,为了提高性能除了在配图时抽稀数据、设置图层最大最小可见比例尺和创建数据集空间索引等方法外,还可以做离线切片。一般对只浏览的数据做离线切片,下面小编将分享离线切片的制作和在移动端的不同加载方式。
#####1、离线切片制作
离线切片又叫地图缓存,一般在SuperMap iDesktop中生成。在生成地图缓存时可以设置缓存的级别和比例尺、切缓存的范围和存储类型,如下图:
![这里写图片描述](https://img-blog.csdn.net/20161221142949309?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3VwZXJtYXBzdXBwb3J0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![这里写图片描述](https://img-blog.csdn.net/20161221143001497?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3VwZXJtYXBzdXBwb3J0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
切完地图缓存后得到如下图文件:
![这里写图片描述](https://img-blog.csdn.net/20161221143205107?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3VwZXJtYXBzdXBwb3J0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![这里写图片描述](https://img-blog.csdn.net/20161221153647915?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3VwZXJtYXBzdXBwb3J0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
**PS**:如果切的地图缓存的级别较多,比例尺较大,用“原始”存储类型切出来的数据瓦片很多,拷贝到移动设置上耗时太久,建议选“紧凑”的存储类型,数据量小,方便拷贝。 #####**2、离线切片加载** #####**1)以影像引擎加载** 将切好的地图缓存拷贝到移动设备的某个路径下,加载数据的代码如下: ``` m_workSpace = new Workspace(); //将地图显示控件和工作空间关联 m_mapView = (MapView)findViewById(R.id.Map_view); m_mapControl = m_mapView.getMapControl(); m_mapControl.getMap().setWorkspace(m_workSpace); //缓存数据路径 String server = sdcard + "/SampleData/长春市区图/长春市区图.sci"; DatasourceConnectionInfo info = new DatasourceConnectionInfo(); //设置Server info.setServer(server); //设置数据源连接的引擎类型为影像只读引擎类型 info.setEngineType(EngineType.IMAGEPLUGINS); //获取数据源集合 Datasources datasources = m_workSpace.getDatasources(); //打开数据源 Datasource ds = datasources.open(info); //添加到地图窗口中 m_mapControl.getMap().getLayers().add(ds.getDatasets().get(0),true); //全幅显示 m_mapControl.getMap().viewEntire(); ```
#####2)以Rest服务方式加载
用Rest服务方式加载前需要配置数据,首先,要编辑sci文件中的Provider参数,如下图:
编辑前:
![这里写图片描述](https://img-blog.csdn.net/20161221154030531?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3VwZXJtYXBzdXBwb3J0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
编辑后:
![这里写图片描述](https://img-blog.csdn.net/20161221154040375?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3VwZXJtYXBzdXBwb3J0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
在”http://127.0.0.1:8090/iserver/services/map-长春市区图/rest/maps/长春市区图”中”127.0.0.1:8090”、”长春市区图”可以自己设定,但设置的值要和放在移动设置上的路径结构保持一致,其它值保持不变。 在sci文件中设置完后,保存后将地图缓存数据拷贝到移动设备中,路径为”...\SuperMap\data\Rest\127.0.0.1_8090\map_长春市区图\长春市区图”。由于文件名中不能用英文的冒号,所以路径中的”127.0.0.1_8090”用”_”代替”:”,如下图:
![这里写图片描述](https://img-blog.csdn.net/20161221154843792?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3VwZXJtYXBzdXBwb3J0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
放在特定的路径目录中后,则通过打开Rest服务方式加载,具体代码如下: ``` m_workSpace = new Workspace(); //将地图显示控件和工作空间关联 m_mapView = (MapView)findViewById(R.id.Map_view); m_mapControl = m_mapView.getMapControl(); m_mapControl.getMap().setWorkspace(m_workSpace); //缓存数据路径 String server = "http://127.0.0.1:8090/iserver/services/map-长春市区图/rest/maps/长春市区图"; DatasourceConnectionInfo info = new DatasourceConnectionInfo(); //设置Server info.setServer(server); //设置数据源连接的引擎类型为REST 地图服务引擎类型info.setEngineType(EngineType.Rest); //获取数据源集合 Datasources datasources = m_workSpace.getDatasources(); //打开数据源 Datasource ds = datasources.open(info); //添加到地图窗口中 m_mapControl.getMap().getLayers().add(ds.getDatasets().get(0),true); //全幅显示 m_mapControl.getMap().viewEntire(); ``` **PS**:由于是以rest服务方式加载地图缓存,打开的是web数据源,所以运行时需要联网。 #####**3、小结** 当在移动端加载的数据较大时,可以通过加载地图缓存提示地图显示性能。在移动端主要有上面两种方式加载地图缓存,在可以联网的情况下,建议使用Rest服务方式加载性能优化明显,而以影像引擎方式加载提升不明显。