SuperMap iObjects Java 之多任务生成地图瓦片

一、介绍

  SuperMap iObjects Java 是面向 GIS 应用系统开发者的组件式 GIS 开发平台,具有强大的地理数据管理、编辑、显示、分析等功能,并且其具有极强的易用性和丰富的帮助资源,适宜快速开发大型 GIS 应用系统。

  本篇将带你深入了解如何利用 SuperMap iObjects Java 高效地进行多任务地图瓦片生成。在这个教程中,你将逐步掌握 SuperMap iObjects Java 的强大功能,学会设置多任务以加速地图瓦片的生成过程。无论你是 GIS 专业人士还是对地图制作感兴趣的爱好者,本教程都将为你提供详细的指导和实用的技巧。通过清晰的步骤和丰富的示例,你将能够轻松上手,快速生成高质量的地图瓦片,为你的地理信息系统项目增添强大的可视化支持。

  现在让我们一起开启 SuperMap iObjects Java 多任务生成地图瓦片的学习之旅。

二、环境准备

2.1. 系统环境

操作系统支持说明
WindowsWindows 平台推荐硬件配置要求:处理器: 2.00 GHz以上内存要求: 2 GB硬盘容量: 100 GB
LinuxLinux平台最低硬件配置要求:CPU: 1.00 GHz (x86 架构)内存: 512 MB硬盘空间: 40 GB

2.2. 开发环境

软件版本下载地址
iObjects Java10i 及其以上版本iObjects Java 下载地址
IDEA2020.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 路径
    Linuxexport LD_LIBRARY_PATH=SuperMap iObjects Java 安装目录\Binexport PATH=$LD_LIBRARY_PATH:$PATH

三、核心技术

  SuperMap iObjects Java 组件提供了 MapCacheBuilder 二维地图缓存生成类,用于生成二维地图缓存以及 sci 格式的地图缓存配置文件。

  MapCacheBuilder 通常情况下是基于单任务来生成二维地图缓存以及 sci 格式的配置文件。然而,在实际应用场景中,生成二维地图缓存这一过程并非那么简单,它涵盖了多个图层的多个任务。并且,在此过程中,还需要充分考虑到每个任务的调度事宜。正因如此,若要实现多任务生成地图缓存,绝不是仅仅通过多线程去调用 MapCacheBuilder 这个二维地图缓存生成类就能够轻易实现的。

  为了能够更加紧密地贴合实际项目复杂多变的应用场景,从而最大程度地提升二维地图缓存的生成效率,减少时间成本,SuperMap iObjects Java 组件经过精心设计与开发,进行了额外的封装操作。在这个过程中,成功封装出了两个极为重要的类,即 TaskBuilderCacheBuilder。其中,TaskBuilder 主要负责切分任务,它能够将复杂庞大的任务进行细致拆解,使得每个子任务更加清晰、易于管理和执行。而 CacheBuilder 则专注于生成缓存,通过高效的算法和优化的流程,确保缓存的快速生成,为二维地图的流畅显示和快速响应提供坚实的基础。这两个类的出现,为 SuperMap iObjects Java 组件在实际项目中的应用增添了强大的动力和保障。

四、业务实现

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 多任务生成地图缓存
  此外,本教程特意提供了依据上述教程进行开发的 iObjects Java 组件多任务生成二维地图缓存示例代码。你可以直接下载该示例代码,然后通过 IDEA 打开,进行编译、调试以及深入学习。这个示例代码为你提供了一个实际的参考,帮助你更好地理解和掌握多任务生成二维地图缓存的开发过程。

  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值