热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

作者:xinxin随着GIS行业的发展,越来越大的数据应用于移动端,但相比PC端,同一份大小的数据在移动端显示要比在PC端慢

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

推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文介绍了在使用Visual Studio 2015进行项目开发时,遇到类向导弹出“异常来自 HRESULT:0x8CE0000B”错误的解决方案。通过具体步骤和实践经验,帮助开发者快速排查并解决问题。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • IneedtofocusTextCellsonebyoneviaabuttonclick.ItriedlistView.ScrollTo.我需要通过点击按钮逐个关注Tex ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
author-avatar
I-1ove-Y0u
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有