处理自动化工具扩展开发

发送反馈


本指南主要用于希望使用SuperMap iServer Geoprocessing Modeler 或 SuperMap iDesktopX工具箱进行处理自动化模型搭建,且现有工具无法满足功能需求的用户。您可跟随本指南完成处理自动化工具的自定义扩展,并掌握在SuperMap iServer Geoprocessing Modeler或SuperMap iDesktopX工具箱中投入使用的步骤。在此之前您需要了解:

1. 扩展开发步骤

1.1. 添加Maven项目依赖

https://maven.supermap.io 是超图官方为开发者提供的 maven 仓库,方便您使用 SuperMap 相关产品进行扩展开发。

仓库包含 SuperMap iServer、SuperMap iObjects 等相关 Jar 和其所依赖的第三方库。通过在 pom 文件中添加 SuperMap maven仓库,您可以将开发使用到的依赖项直接添加到 maven 项目中,避免使用 SuperMap 相关产品时遇到的第三方依赖缺失问题。

在 pom.xml 中添加如下<repositories>节点:

<repositories>

    <repository>

        <id>iserver</id>

        <name>iserver</name>

        <url>https://maven.supermap.io/</url>

        <snapshots>

            <enabled>true</enabled>

        </snapshots>

        <releases>

            <enabled>true</enabled>

        </releases>

    </repository>

</repositories>

接下来,需要在pom.xml文件中添加扩展开发需要的依赖项。sps-core为扩展开发主要的依赖项,在SuperMap Maven仓库中可以自动找到,您只需要在pom文件中的添加一个<dependency>节点:

<dependency>

    <groupId>com.supermap.sps</groupId>

    <artifactId>sps-core</artifactId>

    <version>1.0</version>

</dependency>

注:当扩展的算法需要使用Spark分布式计算时,还需要依赖SuperMap iObjects for Spark提供的bdt-processing项目,在SuperMap Maven仓库中可以自动找到,在pom文件中的添加方法为:

<dependency>

    <groupId>com.supermap.bdt</groupId>

    <artifactId>bdt-processing</artifactId>

    <version>10.1.0-SNAPSHOT</version>

</dependency>

1.2. 创建自定义工具相关类型

新建的自定义工具类需继承自com.supermap.sps.impl.annotated. AnnotatedProcessBean类。

注:当使用Spark分布式计算时,需继承自com.supermap.bdt. processing.sps.BDTAnnotatedBean类,即可在类的execute函数内使用SuperMap iObjects for Spark产品提供的API进行扩展开发(开发指南参见《SuperMap iObjects for Spark 编程指南》)。并能够支持在可视化建模界面中设置工具的分布式集群参数。

您可以先建立一个继承AnnotatedProcessBean类的基类作为扩展工具的基础,例如这里创建了一个DemoProcess类作为工具基类:

再创建一个工具实现类,继承自DemoProcess类,在进行自定义工具的具体实现时,您可以在execute函数中实现工具的功能。

我们需要使用 GPA 扩展开发框架中定义的注解来描述工具的基本信息、结果和参数等,使前端界面能够发现该工具。常用的注解有:

注解后的括号内填写该注解的相关参数。详细注解参数说明见第2章节。

1.3. 创建自定义工厂

创建一个自定义工厂类,用于对接工具工厂的类,并装载自定义的扩展工具,需继承自com.supermap.sps.impl.annotated.AbstractAnnotatedProcessFactory类。

注:当使用Spark分布式计算时,需继承自com.supermap.bdt. processing.sps.AbstractBDTProcessFactory类

例如,创建一个装载地理编码算子的工厂类GeocoderFactory类:

 构造函数中传入参数:

1.4. 注册自定义工具

使用SPI注册自定义工具与基类的关系。新建META-INF/services/com.supermap.geocode.DemoProcess文件,并注册自定义工具类GeoCodeProcess:

1.5. 注册自定义工厂

使用SPI注册工厂,在META-INF/service/com.supermap.sps.core.workflow.IProcessFactory中注册自定义工厂类,例如,本例需要将GeocoderFactory类进行注册:

完成该步骤后即完成了在代码中的扩展开发工作。

1.6. 添加至iServer Geoprocessing Modeler

如需在iServer Geoprocesssing Modeler中使用扩展开发的工具,您还需要执行以下步骤。

将扩展包打包为JAR文件,再将包含自定义工具的JAR文件添加至 %SuperMap iServer_HOME%\support\geoprocessing\lib路径下,重新启动iServer后进入Geoprocessing Modeler页面,即可在页面左侧的工具列表中找到自定义工具。

注:当扩展的算法需要使用Spark分布式计算时,需要手动在JAR文件名后添加“withbdt”,保证Geoprocessing Modeler在向集群提交任务时自动将JAR文件下发至集群。例如:

1.7. 添加至iDesktopX可视化建模工具箱

如需在iDesktopX工具箱中使用扩展开发的工具,您还需要执行以下步骤。

扩展包打包为JAR文件,将包含自定义工具的JAR文件添加至 %SuperMap iDesktop_HOME%\lib路径下,重新启动iDesktopX后,即可在工具箱列表中找到添加的自定义工具。

注:当扩展的算法需要使用Spark分布式计算时,需要同时将JAR文件拷贝到 %SuperMap iDesktop_HOME%\support\bdtJars路径下,保证iDesktopX在向集群提交任务时自动将JAR文件下发至集群。

 

2. 注解说明

GPA 扩展开发框架中定义的注解体系由sps-core-*.jar提供(*为版本号),支持定义输入输出参数的中文名称、支持定义是否为可选参数、支持设置参数默认值等实用功能。

GPA 扩展开发框架中定义的注解体系

创建自定义工具时需要用到的 GPA 扩展开发框架中定义的注解:

@ProcessDef

用来标注方法或类,描述工具的基本信息

@NamespaceDef

@InputDef

用来标注方法参数,绑定 process 工具的 Input 和具体参数

补充:目前已经支持的meta数据类型:

例如下面@InputDef定义的数值区间为(0,1)

@OutputDef

用来标注工具的输出,有 OutputDefs 作为容器,支持重复注解。

@ParameterBuilderDef

指定多个 InputDef 标注一个参数时,用来在运行时构造参数实例。

@ParameterBuilder

参数构造工具。

@OutputSourceType

@OutputDefs

OutputDef 的注解容器,是 java 8 及以上版本的新特性,以更友好易读的方式支持重复注解。

附:扩展开发示例代码-地理编码

示例代码参考附件sps-geocoder。

使用数据:镇江市-高德.csv

计算结果:

常见问题

1. 在编译时报错自定义工厂类中的工具名称找不到符号

是由于工厂类为Java代码编写、工具实现算法为Scala代码编写,需要设置在编译时首先执行Scala代码编译可解决该问题,在pom 文件中设置 scala plugin 的配置:

2. 当AnnotatedProcessBean继承无法识别时,需要手动Alt+Enter,添加执行方法: