作者:贤
一、介绍
SuperMap iObjects Java
是面向 GIS 应用系统开发者的组件式 GIS 开发平台,具有强大的地理数据管理、编辑、显示、分析等功能,并且其具有极强的易用性和丰富的帮助资源,适宜快速开发大型 GIS 应用系统。
本篇将带你深入了解如何利用 SuperMap iObjects Java 高效地进行多任务地图瓦片生成。在这个教程中,你将逐步掌握 SuperMap iObjects Java 的强大功能,学会设置多任务以加速地图瓦片的生成过程。无论你是 GIS 专业人士还是对地图制作感兴趣的爱好者,本教程都将为你提供详细的指导和实用的技巧。通过清晰的步骤和丰富的示例,你将能够轻松上手,快速生成高质量的地图瓦片,为你的地理信息系统项目增添强大的可视化支持。
现在让我们一起开启 SuperMap iObjects Java
多任务生成地图瓦片的学习之旅。
二、环境准备
2.1. 系统环境
操作系统 | 支持 | 说明 |
---|---|---|
Windows | ✔ | Windows 平台推荐硬件配置要求:处理器: 2.00 GHz以上内存要求: 2 GB硬盘容量: 100 GB |
Linux | ✔ | Linux平台最低硬件配置要求:CPU: 1.00 GHz (x86 架构)内存: 512 MB硬盘空间: 40 GB |
2.2. 开发环境
软件 | 版本 | 下载地址 |
---|---|---|
iObjects Java | 10i 及其以上版本 | iObjects Java 下载地址 |
IDEA | 2020.3.4 及其以上版本 | IDEA 下载地址 |
-
配置 iObjects Java 组件环境变量
由于
SuperMap iObjects Java
组件的核心 GIS 功能实际上是基于 C++ 语言来实现的,并且是通过 Java Native Interface(JNI)进行调用。鉴于此,为了确保SuperMap iObjects Java
组件能够正常运行并发挥其强大的 GIS 功能,就需要在开发环境的机器上进行专门的配置,以搭建起 iObjects Java 组件的依赖环境。只有这样,才能够为后续的开发工作提供稳定、可靠的基础支持。操作系统 配置环境变量 Windows 在系统环境变量 PATH 中添加 SuperMap iObjects Java 安装目录\Bin 路径 Linux export LD_LIBRARY_PATH=SuperMap iObjects Java 安装目录\Binexport PATH=$LD_LIBRARY_PATH:$PATH
三、核心技术
SuperMap iObjects Java
组件提供了 MapCacheBuilder 二维地图缓存生成类,用于生成二维地图缓存以及 sci 格式的地图缓存配置文件。
MapCacheBuilder 通常情况下是基于单任务来生成二维地图缓存以及 sci 格式的配置文件。然而,在实际应用场景中,生成二维地图缓存这一过程并非那么简单,它涵盖了多个图层的多个任务。并且,在此过程中,还需要充分考虑到每个任务的调度事宜。正因如此,若要实现多任务生成地图缓存,绝不是仅仅通过多线程去调用 MapCacheBuilder 这个二维地图缓存生成类就能够轻易实现的。
为了能够更加紧密地贴合实际项目复杂多变的应用场景,从而最大程度地提升二维地图缓存的生成效率,减少时间成本,SuperMap iObjects Java
组件经过精心设计与开发,进行了额外的封装操作。在这个过程中,成功封装出了两个极为重要的类,即 TaskBuilder 和 CacheBuilder。其中,TaskBuilder 主要负责切分任务,它能够将复杂庞大的任务进行细致拆解,使得每个子任务更加清晰、易于管理和执行。而 CacheBuilder 则专注于生成缓存,通过高效的算法和优化的流程,确保缓存的快速生成,为二维地图的流畅显示和快速响应提供坚实的基础。这两个类的出现,为 SuperMap iObjects Java
组件在实际项目中的应用增添了强大的动力和保障。
四、业务实现
4.1. 生成地图配置文件
-
核心接口
// 生成地图缓存的 sci 配置文件 MapCacheBuilder.toConfigFile(String path)
-
示例代码
MapCacheBuilder mapCacheBuilder = new MapCacheBuilder(); mapCacheBuilder.setMap(map); mapCacheBuilder.setBounds(map.getBounds()); mapCacheBuilder.setIndexBounds(mapCacheBuilder.getGlobalIndexBounds()); mapCacheBuilder.setStorageType(StorageType.Original); mapCacheBuilder.setOutputFolder(tasksFolder); mapCacheBuilder.setCacheName(mapName); mapCacheBuilder.setTileFormat(TileFormat.WEBP); mapCacheBuilder.setTileSize(TileSize.SIZE256); mapCacheBuilder.setTilingMode(MapTilingMode.GLOBAL); HashMap<Double, String> scalesMaps = mapCacheBuilder.getGlobalLevelScales(); Integer minScales = minCacheLevel; Integer maxScales = maxCacheLevel; double[] outputScales = getOutputScales(scalesMaps, minScales, maxScales); HashMap<Double, String> doubleStringHashMap2 = new HashMap<>(); for (int i = 0; i < outputScales.length; i++) { doubleStringHashMap2.put(outputScales[i], String.valueOf(i)); } mapCacheBuilder.setOutputScales(outputScales); mapCacheBuilder.setOutputScaleCaptions(doubleStringHashMap2); mapCacheBuilder.resumable(false); sciFilePath = tasksFolder.concat("/").concat(mapName).concat(".sci"); mapCacheBuilder.toConfigFile(sciFilePath);
4.2. 拆分任务
-
核心接口
// 拆分切图子任务 // String[] 包含至少以下 2 个字符串参数: // 1、sci 配置文件路径; // 2、拆分后的任务文件集合输出路径。 TaskBuilder.main(String[] args)
-
示例代码
TaskBuilder.main(new String[]{sciFilePath, tasksFolder});
4.3. 多任务生成地图缓存
-
核心接口
// 多任务生成地图缓存 // String[] 包含至少以下 7 个字符串参数 // 1、工作空间文件路径; // 2、用于生成缓存的地图名称; // 3、拆分的子任务目录; // 4、生成的缓存输出目录; // 5、切图任务数; // 6、合并任务数,即多少个sci同时输入到一个进程里执行; // 7、sci 配置文件路径。 CacheBuilder.main(String[] args)
-
示例代码
CacheBuilder.main(new String[]{workspaceFilePath, mapName, tasksFolder.concat("/task"), cacheFolder, processCount, mergeTaskNumber, sciFilePath});
五、总结
依据上述教程进行开发并成功实现之后,能够达成如下图所示的多任务生成地图缓存的结果。这一成果的呈现,意味着经过精心的开发过程,成功地实现了多任务地图缓存的生成,为后续的地图应用和数据分析提供了坚实的基础。其具体表现形式正如下面的图示,清晰地展示了多任务生成地图缓存的实际效果:
此外,本教程特意提供了依据上述教程进行开发的 iObjects Java 组件多任务生成二维地图缓存示例代码。你可以直接下载该示例代码,然后通过 IDEA 打开,进行编译、调试以及深入学习。这个示例代码为你提供了一个实际的参考,帮助你更好地理解和掌握多任务生成二维地图缓存的开发过程。