快速掌握多进程切地图缓存

来源:互联网 发布:供销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,值可以为012三个值,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,值可以为012三个值,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:补切缓存存放目录> 补切缓存的存放目录最好不要用原来的缓存目录。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 6个月孩子流鼻涕怎么办 十一个月孩子感冒流鼻涕怎么办 7个月孩子流鼻涕怎么办 18个月的宝宝流鼻涕怎么办 6个月宝宝咳嗽流鼻涕怎么办 18个月宝宝咳嗽流鼻涕怎么办 6个月宝宝流鼻涕打喷嚏怎么办 宝宝18个月流鼻涕怎么办 18个月宝宝感冒流鼻涕怎么办 小孩睡觉鼻子不通气怎么办 宝宝鼻子里有鼻涕出不来怎么办 孩子喉咙有痰呼呼响怎么办 六个月宝宝鼻塞怎么办速效办法 两个月小孩鼻子不通气怎么办 一岁宝宝流清鼻涕怎么办 孩子鼻子里有鼻涕怎么办 宝宝晚上睡觉鼻子不通气怎么办 宝宝感冒睡觉鼻子不通气怎么办 宝宝3个月流鼻涕怎么办 小孩吃着了发烧怎么办 半岁宝宝鼻子塞怎么办 宝宝伤风鼻子不通气怎么办 二十天的宝宝伤风鼻子不通怎么办 一个多月的宝宝鼻子有鼻屎怎么办 2个月宝宝鼻子里有鼻屎怎么办 四个月婴儿感冒发烧怎么办 一个月婴儿感冒发烧怎么办 五个月婴儿感冒发烧怎么办 两个月的婴儿感冒发烧怎么办 9个月婴儿感冒发烧怎么办 两个月婴儿感冒鼻塞咳嗽怎么办 两个月婴儿感冒咳嗽流鼻涕怎么办 小孩感冒发烧怎么办速效办法 宝宝打喷嚏流清鼻涕怎么办 宝宝感冒流清鼻涕怎么办 2岁感冒流清鼻涕怎么办 小孩感冒流清鼻涕怎么办 4岁宝宝半夜发烧怎么办 四岁宝宝免疫力低下怎么办 两岁宝宝咳嗽流鼻涕怎么办 小婴儿流清鼻涕怎么办