使用iObjects java进行多进程生成缓存

来源:互联网 发布:全国各地一手车主数据 编辑:程序博客网 时间:2024/06/01 11:01

1.1 概述

SuperMap iObjects Java 9D版本开始支持多进程切图,可实现多机分发切图,更稳定、更高效;还提供了地图缓存检查和补切工具,使地图缓存生成操作更加可控。

在SuperMap iObjects Java产品安装目录下Bin文件夹下,如下.jar文件与多进程切图有关。

com.supermap.data.jar

com.supermap.mapping.jar

com.supermap.tilestorage.jar

com.supermap.data.processing.jar

下面,介绍如何通过命令行的方式进行多进程切图,切图结果检查以及补切问题瓦片。

1.2 多进程切图

多进程切图是按照指定的切图比例尺,将切图任务进行拆分,这样,就可以分配到多个进程中执行切图任务,因此,多进程切图分为以下几个步骤:

1. 生成缓存配置文件

2. 拆分任务

3. 执行多进程切图

1.2.1 生成缓存配置文件

进行地图缓存生成的第一步就是准备缓存配置文件*.sci,缓存配置文件中包含了切图范围、切图比例尺、瓦片存储类型、瓦片设置、数据库信息、缓存路径等信息,其中,缓存路径将以执行切图任务的命令行参数指定为准。

您可以使用SuperMap iDesktop配置一个缓存配置文件。

i注意

如果使用多进程切图并且缓存输出到MongoDB数据库中,您需要首先创建一个MongoDB库,创建MongoDB数据库的信息由命令行传入的缓存配置文件中的MongoDB信息指定;同时会根据指定的缓存配置文件(sci)在同级目录下生成一个新的sci文件,只有的多进程切图都将使用这个新生成的sci缓存配置文件。

Windows系统下创建MongoDB库命令行(下载示例:MongodbBuilder.bat):

java -cp .:com.supermap.data.jar:com.supermap.mapping.jar:com.supermap.tilestorage.jar:com.supermap.data.processing.jar com.supermap.data.processing.cache. MongodbBuilder <参数1:缓存配置文件sci路径>

Linux系统下创建MongoDB库命令行:

java -cp .;com.supermap.data.jar;com.supermap.mapping.jar;com.supermap.tilestorage.jar;com.supermap.data.processing.jar com.supermap.data.processing.cache. MongodbBuilder <参数1:缓存配置文件sci路径>

1.2.2 拆分任务

拆分任务是将上已步骤获得的缓存配置文件*.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 >

如下举例,windows操作系统下拆分任务命令::(下载示例:CacheBuilder.bat,其中包含了拆分任务内容)

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:\Data\缓存配置文件.sci F:\Data\doing

说明:

1. 执行后,“拆分的子sci的存放根目录”下会生成一个task文件夹存放了所有拆分后的子sci,此外,还有一个allTask.list文件,该文件是拆分后的子sci文件名列表,供后续生成缓存用。


2. 执行后,“拆分的子sci的存放根目录”下会生成udb目录及目录下的cache.udb文件。

1.2.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个数>

如下举例,windows操作系统下执行多进程切图命令(下载示例:CacheBuilder.bat):

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 D:\Data\workspace.smwu ChinaMap F:\Data\doing\task F:\ Data 4 50

说明:

1. <参数1:工作空间路径>:要切图的地图保存的工作空间。

2. <参数2:地图名称>:要切图的地图名称。

3. <参数3: allTask.list 文件路径/拆分的子sci的存放根目录/单个sci文件路径(单进程)> 即三种情况都可以,allTask.list是拆分的小sci名称列表,如果传入路径且用了双引号,则路径最后一个\不要加,因为\也是转义符号会将后半个冒号转义,从而导致参数传递有误。

4. <参数5:新增进程数>:是指除主线程外增加的多进程数。

5. <参数6:合并任务数>:是指多少个sci同时输入到一个进程里执行,即一次打开工作空间和地图后,将几个sci同时输入到一个进程里执行,因为如果每个sci都打开工作空间打开地图,性能会很慢。

6. 生成完成sci文件会移到“拆分的子sci的存放根目录”下的build文件夹下。



7. 切图完成后,需要手动将缓存配置文件*.sci拷贝到缓存生成目录,就可以加载sci文件浏览缓存地图了。

i注意

使用多进程切图时,要求数据源要设置为以只读方式打开,因为要多进程打开数据,所以必须要求数据源只读方式打开。

1.3 检查切图结果

检查缓存生成结果,主要是查看是否有缺少瓦片或者白块的情况。

Windows系统下结果检查的的命令行(下载示例:CacheCheck .bat):

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. <参数1:缓存sci目录/mongo> 当是mongoDB缓存时,该参数可以输入任何一个字符串,如:mongo

2. 检查出问题的小sci文件,会存放到小sci目录同级的error目录下,成功的会在checked目录下,异常退出的会还在原目录下

3. <参数5(可选):true/false(错误信息是否保存到udb数据源)>。不加该参数时,默认是false;参数是true时,错误信息保存到步骤二(拆分总sci为多个子sci)中生成的cache.udb里。

如下图所示,如果选择了将错误信息保存到第二步生成的cache.udb里,那么数据源中将建立一些面数据集,每个数据集名称都是基于切图有问题的比例尺分母命名,其中记录了该比例尺下有问题的缓存瓦片的边界。


下图所示,cache.udb里数据属性表中记录了缓存瓦片发生错误的类型,每一条记录为一张瓦片的对应范围的面对象。其中,errortype记录了错误类型编码;errordesc为对应错误编码的描述信息,具体说明如下。

(1)missing:没有此瓦片数据。

(2)error:读取此瓦片数据错误。

(3)white:此瓦片为非纯色瓦片,但是全白图。

(4)lost:对于紧凑缓存,未找到紧凑缓存cf文件。

(5)failure:对于紧凑缓存,打开紧凑缓存cf文件失败。


4. <参数6(可选):范围检查文件路径(如GeoJSON文件)> 根据传入范围文件( GeoJSON文件)中所指定的范围来检查,不加该参数时默认是全部遍历。

5. check功能目前不支持原始缓存的check检查,目前只支持紧凑缓存和mongoDB缓存。

1.4 补切问题瓦片

检查缓存生成结构后,就可以对检查结果进行修补,如对缺少的瓦片或者白块瓦片进行补切。

Windows系统下补切缓存的的命令行(下载示例:CacheRecover.bat):

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:补切缓存存放目录> 补切缓存的存放目录最好不要用原来的缓存目录。

原创粉丝点击