标准WPS框架下的空间信息处理服务部署方法
笔者第一篇博客里面曾介绍过将专题图制作功能发布为WPS,但随着后面的研究,才发现那时候发布的不是真正WPS框架下的服务,而只是通过Servlet将其发布为可调用的网络服务,所以今天再具体介绍一下真正的WPS服务到底如何发布。
WPS(Web Processing Service)是OGC组织制定的空间信息处理服务的标准规范,旨在以标准化的方式在网络上共享空间信息处理功能。WPS主要用来处理空间数据,实现通过网络向客户端提供地理数据的处理服务,使客户无需安装桌面软件就能实现相关的处理功能。它定义一个标准的接口来帮助实现地理进程发布和绑定进程与客户端,“进程”包括任何能够操作空间数据的算法、计算或模型,“发布”意思是提供机器可读的绑定信息和人们可读的元数据信息以便服务的发现和使用。一个WPS可以被配置提供任何功能的GIS空间数据处理功能,将WPS进程链接在一起能够生成可以复用的工作流。
在WPS中,客户端和服务器采用基于XML的通信方式,在WPS接口中定义了三个主要操作,用于向客户端提供服务详细信息、查询部署在服务器上的进程描述和执行进程,这三个主要操作分别是:GetCapabilities、DescribeProcess和Execute。GetCapabilities操作允许客户端从服务器中检索元数据,使客户端通过请求获得描述具体信息的元数据文档,该文档包括所有可执行的进程简要的元数据信息描述。DescribeProcess操作使客户通过请求获得进程的详细信息,包括输入、输出参数和格式等。Execute操作允许WPS客户端提供输入参数值,然后在服务器端运行指定的进程,并返回输出结果。
下面介绍将算子模型部署到WPS框架的具体步骤:
一、获取WPS工程
我使用的工程来自师门提供,不能外传,可以从网上找到开源的相关代码,其目录结构如下所示:
二、部署需要调用的Java类
将算法调用java文件放到cn.edu.whu.lmars.reflect.services路径下,将文件名和类名更改统一,比如此处改为DzLdksmnProcess.java,添加对接口IReflectService的实现,如下语句所示:
public class DzLdksmnProcess extends Model implements IReflectService
添加接口方法的实现函数:
public Object execute(HashMap<Object, Object> layers, HashMap<Object, Object> paramters)
建议先完成四、五两个步骤之后再实现这个接口,最终实现后的函数内容如下:
@Override public Object execute(HashMap<Object, Object> layers, HashMap<Object, Object> paramters) { // TODO Auto-generated method stub String firstInput = "QuHuaShp"; String secondInput = "LieDuShp"; String input1_href = layers.get(firstInput + IReflectService.DATAHREF).toString(); String input2_href = layers.get(secondInput + IReflectService.DATAHREF).toString(); String output = layers.get(IReflectService.OUTPUTNAME).toString(); File file = new File(output); if(file.exists()){ file.delete(); } try { DzLdksmnProcess.mainprocess(input1_href, input2_href, output); } catch (Exception e) { e.printStackTrace(); } return true; }
三、在jni目录下添加编译文件
如果有需要调用的其他文件,比如.exe、.dll、.py、.so等文件,要将其放到wps10/WebContent/jni目录下,并添加相应的引用。
此例子中需要将arcobjects.jar添加到Referenced Libraries,jar包文件放于wps10/WebContent/WEB-INF/lib目录下,并将其添加到Build Path。
四、添加ProcessDescription的xml文档
创建DzLdksmnProcess类的ProcessDescription XML文档,注意其中的Identifier属性要和类名一样,内容编辑完成后将其放到wps10/ WebContent/config/processes路径下。
DzLdksmnProcess.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?> <wps:ProcessDescriptions xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ows="http://www.opengis.net/ows/1.1" xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsDescribeProcess_response.xsd" xml:lang="en-US" service="WPS" version="1.0.0"> <ProcessDescription statusSupported="true" storeSupported="true" wps:processVersion="1.1.0"> <ows:Identifier>DzLdksmnProcess</ows:Identifier> <ows:Title>地震烈度模型</ows:Title> <ows:Abstract>利用地震震级、震中地理坐标和震源机制解等相关参数绘制地震烈度图</ows:Abstract> <DataInputs> <Input minOccurs="1" maxOccurs="1"> <ows:Identifier>QuHuaShp</ows:Identifier> <ows:Title>行政区划图</ows:Title> <ComplexData> <Default> <Format> <MimeType>application/x-zipped-shp</MimeType> </Format> </Default> <Supported> <Format> <MimeType>application/x-zipped-shp</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/2.0.0</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/2.1.1</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/2.1.2</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/2.1.2.1</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/3.0.0</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/3.0.1</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/3.1.0</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/3.1.1</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/3.2.1</MimeType> </Format> </Supported> </ComplexData> </Input> <Input minOccurs="1" maxOccurs="1"> <ows:Identifier>LieDuShp</ows:Identifier> <ows:Title>断裂带分布图</ows:Title> <ComplexData> <Default> <Format> <MimeType>application/x-zipped-shp</MimeType> </Format> </Default> <Supported> <Format> <MimeType>application/x-zipped-shp</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/2.0.0</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/2.1.1</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/2.1.2</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/2.1.2.1</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/3.0.0</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/3.0.1</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/3.1.0</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/3.1.1</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/3.2.1</MimeType> </Format> </Supported> </ComplexData> </Input> </DataInputs> <ProcessOutputs> <Output> <ows:Identifier>OutputData</ows:Identifier> <ows:Title>地震烈度图</ows:Title> <ComplexOutput> <Default> <Format> <MimeType>application/x-zipped-shp</MimeType> </Format> </Default> <Supported> <Format> <MimeType>application/x-zipped-shp</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/2.0.0</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/2.1.1</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/2.1.2</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/2.1.2.1</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/3.0.0</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/3.0.1</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/3.1.0</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/3.1.1</MimeType> </Format> <Format> <MimeType>text/xml; subtype=gml/3.2.1</MimeType> </Format> </Supported> </ComplexOutput> </Output> </ProcessOutputs> </ProcessDescription> </wps:ProcessDescriptions>
五、添加Execute的xml文档
创建DzLdksmnProcess类的Execute XML文档,注意其中的Identifier属性要和类名一样,内容编辑完成后将其放到wps10/WebContent/requests2路径下。
DzLdksmnProcess.xml内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <wps:Execute service="WPS" version="1.0.0" xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsExecute_request.xsd"> <ows:Identifier>DzLdksmnProcess</ows:Identifier> <ows:Title>地震烈度模型</ows:Title> <ows:Abstract>利用地震震级、震中地理坐标和震源机制解等相关参数绘制地震烈度图</ows:Abstract> <wps:DataInputs> <wps:Input> <ows:Identifier>QuHuaShp</ows:Identifier> <ows:Title>行政区划图</ows:Title> <wps:Reference mimeType="application/x-zipped-shp" xlink:href="http://localhost:8080/wps10/datas/shapefile/china.zip" method="GET"/> </wps:Input> <wps:Input> <ows:Identifier>LieDuShp</ows:Identifier> <ows:Title>断裂带分布图</ows:Title> <wps:Reference mimeType="application/x-zipped-shp" xlink:href="http://localhost:8080/wps10/datas/shapefile/Duanceng.zip" method="GET"/> </wps:Input> </wps:DataInputs> <wps:ResponseForm> <wps:ResponseDocument storeExecuteResponse="false" lineage="false" status="false"> <wps:Output asReference="true" mimeType="application/x-zipped-shp" encoding="UTF-8"> <ows:Identifier>OutputData</ows:Identifier> <ows:Title>地震烈度图</ows:Title> </wps:Output> </wps:ResponseDocument> </wps:ResponseForm> </wps:Execute>
六、在common_algorithms.properties下添加键值对
打开wps10/WebContent/config路径下的
common_algorithms.properties文件,在最后一行下面添加:
DzLdksmnProcess=cn.edu.whu.lmars.reflect.ReflectAlgorithm
(注意key要和类名一样)
七、在index.html添加执行页面
打开wps10/WebContent路径下的index.html文件,找到
var requests = new Array();并在下面添加新的指定值:
requests[159] = datafolder + "DzLdksmnProcess.xml";
(注意这里是添加第五步的Execute xml文档)
八、测试
至此,所有部署工作已经完成,将整个工程用tomcat发布,本地的访问页面如下所示:
可以成功访问即可。
- IFC标准是为了满足建筑行业的信息交互与共享而产生的统一数据标准,是建 筑行业事实上的数据交换与共享标准。本文概要介绍了IFC标准的产生及发展 历程,IFC的整体框架结构,简要说明了IFC标准的实现方法和过程,描述了 当前的应用以及我们应该更加积极地利用IFC标准为建筑软件行业服务。
- 江苏全面部署地理空间信息基础框架建设项目
- (WPS) 网络地理信息处理服务
- SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
- Windows 证书服务部署安全基础框架
- 转贴:在 RedHat 7.2 Linux 系统下实现提供个人主页空间服务的方法
- 遭遇:“说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。”错误
- 使用Axis部署Web服务时的常见问题及其解决方法(转)
- 使用Apache Axis部署 Web服务时的常见问题及其解决方法(IBM 官方文档)
- 解决DFS命名空间服务无法初始化该域控制器上的跨林信任信息
- 在windows 2008R2上部署.net framework 3.5网站的故障处理解决方法
- 使用Apache Axis部署 Web服务时的常见问题及其解决方法
- Asp.Net 2.0 中错误处理的几种方法(发邮件及记录信息到系统事件中)
- LR中用关联方法处理对服务集群压力测试问题
- oracle temp表空间处理方法
- Oracle数据库空间文件丢失处理方法
- 说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。 分析器错误信息: 无法识别的属性“type”。
- 与信息处理相关的一些标准网址
- Oracle7.X 回滚表空间数据文件误删除处理方法
- net处理有命名空间的xml文件的方法