快速掌握多进程切地图缓存
来源:互联网 发布:供销e家 源码 编辑:程序博客网 时间:2024/06/06 05:47
作者:xinxin
如果你还在为在SuperMap iDesktop上切地图缓存慢而发愁时,那我要告诉你一个好消息,SuperMap iObjects Java 9D版本开始支持多进程切图,可实现多机分发切图,使切图更稳定、更高效;另外,还提供了地图缓存检查和补切工具,使地图缓存生成操作更加可控。由于SuperMap iObjects Java是可跨平台产品,所以这个9D产品不仅可以在Windows系统中进行多进程切图,在Linux系统中也是可行的。在多线程切图时会用到的Bin文件夹下的.jar如下:
com.supermap.data.jar
com.supermap.mapping.jar
com.supermap.tilestorage.jar
com.supermap.data.processing.jar
下面介绍如何通过命令行的方式进行多进程切图,切图结果检查及补切问题瓦片。
1. 环境准备
1)配置好JDK环境;
2)下载SuperMap iObjects Java 9D产品,并将该Bin路径设置到【高级系统设置】的Path中;
3)配置SuperMap iObjects Java 9D产品的许可。
2. 多进程切图
多进程切图是按照指定的切图比例尺,将切图任务进行拆分,这样,就可以分配到多个进程中执行切图任务,因此,多进程切图分为以下几个步骤:
1) 生成缓存配置文件
在SuperMap iDesktop中配置一个缓存配置文件*.sci,该文件中包含了切图范围、切图比例尺、瓦片缓存类型、瓦片设置、数据库信息和缓存路径等信息,其中,缓存路径将以执行切图任务的命令行参数指定为准,如下图,导出的sci文件可以用txt打开查看具体信息。
2) 拆分任务
拆分任务是将步骤1中的缓存配置文件*.sci作为一个总的sci,然后,按照缓存配置文件中的切图比例尺情况,拆分任务,获得多个子sci,用于后续多进程切图时分配到多个进程中去执行切图任务。
Windows系统下拆分任务的的命令行:
java -cp .:com.supermap.data.jar:com.supermap.mapping.jar:com.supermap.tilestorage.jar:com.supermap.data.processing.jar com.supermap.data.processing.cache.TaskBuilder <参数1:总sci路径> <参数2:拆分的子sci的存放根目录> <参数3(可选):拆分多少个allTask.list 文件>> <参数4(可选):是否生成udb,值可以为0、1、2三个值,0表示不生成udb,1表示生成udb同时重新拆分子sci,2表示生成udb但不重新拆分子sci;默认为0,不生成udb >
Linux系统下拆分任务的命令行:
java -cp .;com.supermap.data.jar;com.supermap.mapping.jar;com.supermap.tilestorage.jar;com.supermap.data.processing.jar com.supermap.data.processing.cache.TaskBuilder <参数1:总sci路径> <参数2:拆分的子sci的存放根目录> <参数3(可选):拆分多少个allTask.list 文件>> <参数4(可选):是否生成udb,值可以为0、1、2三个值,0表示不生成udb,1表示生成udb同时重新拆分子sci,2表示生成udb但不重新拆分子sci;默认为0,不生成udb >
说明:
- 执行后,“拆分的子sci的存放根目录”下会生成一个task文件夹存放了所有拆分后的子sci,此外,还有一个allTask.list文件,该文件是拆分后的子sci文件名列表,供后续生成缓存用;
- 执行后,“拆分的子sci的存放根目录”下会生成udb目录及目录下的cache.udb文件。
下面在Windows操作系统举例拆分,具体执行命令行如下:
java -cp .;com.supermap.data.jar;com.supermap.mapping.jar;com.supermap.tilestorage.jar;com.supermap.data.processing.jar com.supermap.data.processing.cache.TaskBuilder F: \地图缓存配置文件.sci F:\Data
执行后,在F:\Data目录下生成一个task文件夹存放拆分后的子sci和一个allTask.list文件,如下图:
注意:在执行拆分命令前要进入到SuperMap iObjects Java Bin目录下,否则运行时会报错,报错信息如下图:
3) 执行多进程切图
拆分任务完成了,就可以执行多进程切图了。
Windows系统下切图任务的的命令行:
java -cp .;com.supermap.data.jar;com.supermap.mapping.jar;com.supermap.tilestorage.jar;com.supermap.data.processing.jar com.supermap.data.processing.cache.CacheBuilder <参数1:工作空间路径> <参数2:地图名称> <参数3: allTask.list 文件路径/拆分的子sci的存放目录/单个sci文件路径(单进程)> <参数4: 缓存存放目录> <参数5: 新增进程数> <参数6:合并sci个数>
Linux系统下切图任务的命令行:
java -cp .:com.supermap.data.jar:com.supermap.mapping.jar:com.supermap.tilestorage.jar:com.supermap.data.processing.jar com.supermap.data.processing.cache.CacheBuilder <参数1:工作空间路径> <参数2:地图名称> <参数3: allTask.list 文件路径/拆分的子sci的存放目录/单个sci文件路径(单进程)> <参数4: 缓存存放目录> <参数5: 新增进程数> <参数6:合并sci个数>
说明:
- <参数1:工作空间路径>:要切图的地图保存的工作空间;
- <参数2:地图名称>:要切图的地图名称;
- <参数3: allTask.list 文件路径/拆分的子sci的存放根目录/单个sci文件路径(单进程)> 即三种情况都可以,allTask.list是拆分的小sci名称列表,如果传入路径且用了双引号,则路径最后一个\不要加,因为\也是转义符号会将后半个冒号转义,从而导致参数传递有误;
- <参数5:新增进程数>:是指除主线程外增加的多进程数;
- <参数6:合并任务数>:是指多少个sci同时输入到一个进程里执行,即一次打开工作空间和地图后,将几个sci同时输入到一个进程里执行,因为如果每个sci都打开工作空间打开地图,性能会很慢;
- 生成完成sci文件会移到“拆分的子sci的存放根目录”下的build文件夹下;
- 切图完成后,需要手动将缓存配置文件*.sci拷贝到缓存生成目录,就可以加载sci文件浏览缓存地图了。
注意:
使用多进程切图时,要求数据源要设置为以只读方式打开,因为要多进程打开数据,所以必须要求数据源只读方式打开。
下面在Windows操作系统举例拆分,具体执行命令行如下:
java -cp .;com.supermap.data.jar;com.supermap.mapping.jar;com.supermap.tilestorage.jar;com.supermap.data.processing.jar com.supermap.data.processing.cache.CacheBuilder F:\SuperMapSoftWare\iDesktop\SampleData\City\ChongQing\ChongQing.smwu ChongQing F:\Data\task F:\Data 5 50
执行命令行后,会在F:\Data目录下生成缓存瓦片,如下图:
将build文件中的sci文件拷贝到J_256_A3278454FIX文件同级目录下,如下图:
在iDesktop中可以打开每个级别的缓存,也可以将所有子sci文件合并为一个,即将其它sci中的Scale参数添加到一个sci文件中,如下图:
注意:
(1) 命令行中的参数值不能有空格,否则空格后的值表示另一个参数,会造成参数错误;
(2) 在执行多进程切图时,所切地图对应的数据源不能被其它软件占用,比如不能在iDesktop中打开这个数据源,否则切不出缓存瓦片。
3.检查切图结果
检查缓存生成结果,主要是查看是否有缺少瓦片或者白块的情况。
Windows系统下结果检查的的命令行:
java -cp .;com.supermap.data.jar;com.supermap.mapping.jar;com.supermap.tilestorage.jar;com.supermap.data.processing.jar com.supermap.data.processing.cache.CacheCheck <参数1:缓存结果sci所在目录/mongo> <参数2: allTask.list 文件路径/拆分的子sci的存放目录> <参数3:新增进程数> <参数4:合并sci个数> <参数5(可选):true/false(错误信息是否保存到udb数据源)> <参数6(可选):范围检查文件路径(GeoJSON文件)>
Linux系统下结果检查的命令行:
java -cp .;com.supermap.data.jar;com.supermap.mapping.jar;com.supermap.tilestorage.jar;com.supermap.data.processing.jar com.supermap.data.processing.cache.CacheCheck <参数1:缓存结果sci所在目录/mongo> <参数2: allTask.list 文件路径/拆分的子sci的存放目录> <参数3:新增进程数> <参数4:合并sci个数> <参数5(可选):true/false(错误信息是否保存到udb数据源)> <参数6(可选):范围检查文件路径(GeoJSON文件)>
说明:
- <参数1:缓存sci目录/mongo> 当是mongoDB缓存时,该参数可以输入任何一个字符串,如:mongo;
- 检查出问题的小sci文件,会存放到小sci目录同级的error目录下,成功的会在checked目录下,异常退出的会还在原目录下;
- <参数5(可选):true/false(错误信息是否保存到udb数据源)>。不加该参数时,默认是false;参数是true时,错误信息保存到步骤二(拆分总sci为多个子sci)中生成的cache.udb里;
- <参数6(可选):范围检查文件路径(如GeoJSON文件)> 根据传入范围文件( GeoJSON文件)中所指定的范围来检查,不加该参数时默认是全部遍历;
- check功能目前不支持原始缓存的check检查,目前只支持紧凑缓存和mongoDB缓存。
4.补切问题瓦片
检查缓存生成结构后,就可以对检查结果进行修补,如对缺少的瓦片或者白块瓦片进行补切。
Windows系统下补切缓存的的命令行:
java -cp .;com.supermap.data.jar;com.supermap.mapping.jar;com.supermap.tilestorage.jar;com.supermap.data.processing.jar com.supermap.data.processing.cache.CacheBuilder <参数1:工作空间路径> <参数2:地图名称> <参数3: 上一步检查存在问题的error目录> <参数4: 补切缓存存放目录> <参数5: 新增进程数> <参数6:合并sci个数>
Linux系统下补切缓存的命令行:
java -cp .;com.supermap.data.jar;com.supermap.mapping.jar;com.supermap.tilestorage.jar;com.supermap.data.processing.jar com.supermap.data.processing.cache.CacheBuilder <参数1:工作空间路径> <参数2:地图名称> <参数3: 上一步检查存在问题的error目录> <参数4: 补切缓存存放目录> <参数5: 新增进程数> <参数6:合并sci个数>
说明:
<参数4:补切缓存存放目录> 补切缓存的存放目录最好不要用原来的缓存目录。
- 快速掌握多进程切地图缓存
- Android 快速掌握高德地图SDK(内含实践项目)
- [转]教你快速掌握PL/SQL中的多进程通信技术
- 教你快速掌握Oracle中"Kill"进程的方法
- 地图缓存
- 快速掌握Linux
- 快速掌握Jmail使用方法
- 快速掌握JFreeChart
- 如何快速掌握java
- 快速掌握TREEVIEW控件
- 如何快速掌握计算机
- 快速掌握JBPM工作流
- SpingMvc 快速入门掌握
- 快速掌握Oracle异常
- 快速掌握框架
- 正则表达式-快速掌握
- 全面掌握快速排序
- 快速掌握函数指针
- 一步一步写Makefile(1):概念,变量,自动推导,Makefile相互引用
- Eclipse中使用jstl标签
- muduo源码学习(19)-socket封装
- Hybris 新建自己的项目工程
- 动态代理(一)---JDK动态代理
- 快速掌握多进程切地图缓存
- android 生命周期梳理
- HDU
- I2C总线双向电平转换实用电路
- win下安装memcached
- 解决8080端口被占用的问题
- PCA-手写字体图片识别
- 欢迎使用CSDN-markdown编辑器
- Wcf服务客户端无法连接“无法识别该uri前缀 ”