离线切片的制作和加载方式


作者: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服务方式加载性能优化明显,而以影像引擎方式加载提升不明显。

转载自:https://blog.csdn.net/supermapsupport/article/details/53785895

You may also like...