笔者第一篇博客里面曾介绍过将专题图制作功能发布为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)

建议先完成四、五两个步骤之后再实现这个接口,最终实现后的函数内容如下:

 1 @Override
 2 public Object execute(HashMap<Object, Object> layers, HashMap<Object, Object> paramters) {
 3     // TODO Auto-generated method stub
 4     String firstInput = "QuHuaShp";
 5     String secondInput = "LieDuShp";
 6     String input1_href = layers.get(firstInput + IReflectService.DATAHREF).toString();
 7     String input2_href = layers.get(secondInput + IReflectService.DATAHREF).toString();
 8     String output = layers.get(IReflectService.OUTPUTNAME).toString();
 9
10     File file = new File(output);
11     if(file.exists()){
12             file.delete();
13     }
14     try {
15         DzLdksmnProcess.mainprocess(input1_href, input2_href, output);
16     } catch (Exception e) {
17         e.printStackTrace();
18     }
19     return true;
20 }

三、在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内容如下:

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <wps:ProcessDescriptions xmlns:wps="http://www.opengis.net/wps/1.0.0"
  3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4     xmlns:ows="http://www.opengis.net/ows/1.1"
  5     xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsDescribeProcess_response.xsd"
  6     xml:lang="en-US" service="WPS" version="1.0.0">
  7 <ProcessDescription statusSupported="true" storeSupported="true" wps:processVersion="1.1.0">
  8     <ows:Identifier>DzLdksmnProcess</ows:Identifier>
  9     <ows:Title>地震烈度模型</ows:Title>
 10     <ows:Abstract>利用地震震级、震中地理坐标和震源机制解等相关参数绘制地震烈度图</ows:Abstract>
 11     <DataInputs>
 12     <Input minOccurs="1" maxOccurs="1">
 13         <ows:Identifier>QuHuaShp</ows:Identifier>
 14         <ows:Title>行政区划图</ows:Title>
 15         <ComplexData>
 16             <Default>
 17                 <Format>
 18                 <MimeType>application/x-zipped-shp</MimeType>
 19                 </Format>
 20             </Default>
 21             <Supported>
 22                 <Format>
 23                     <MimeType>application/x-zipped-shp</MimeType>
 24                 </Format>
 25                 <Format>
 26                     <MimeType>text/xml; subtype=gml</MimeType>
 27                 </Format>
 28                 <Format>
 29                     <MimeType>text/xml; subtype=gml/2.0.0</MimeType>
 30                 </Format>
 31                 <Format>
 32                     <MimeType>text/xml; subtype=gml/2.1.1</MimeType>
 33                 </Format>
 34                 <Format>
 35                     <MimeType>text/xml; subtype=gml/2.1.2</MimeType>
 36                 </Format>
 37                 <Format>
 38                     <MimeType>text/xml; subtype=gml/2.1.2.1</MimeType>
 39                 </Format>
 40                 <Format>
 41                     <MimeType>text/xml; subtype=gml/3.0.0</MimeType>
 42                 </Format>
 43                 <Format>
 44                     <MimeType>text/xml; subtype=gml/3.0.1</MimeType>
 45                 </Format>
 46                 <Format>
 47                     <MimeType>text/xml; subtype=gml/3.1.0</MimeType>
 48                 </Format>
 49                 <Format>
 50                     <MimeType>text/xml; subtype=gml/3.1.1</MimeType>
 51                 </Format>
 52                 <Format>
 53                     <MimeType>text/xml; subtype=gml/3.2.1</MimeType>
 54                 </Format>
 55             </Supported>
 56         </ComplexData>
 57     </Input>
 58     <Input minOccurs="1" maxOccurs="1">
 59         <ows:Identifier>LieDuShp</ows:Identifier>
 60         <ows:Title>断裂带分布图</ows:Title>
 61         <ComplexData>
 62             <Default>
 63                 <Format>
 64                 <MimeType>application/x-zipped-shp</MimeType>
 65                 </Format>
 66             </Default>
 67             <Supported>
 68                 <Format>
 69                     <MimeType>application/x-zipped-shp</MimeType>
 70                 </Format>
 71                 <Format>
 72                     <MimeType>text/xml; subtype=gml</MimeType>
 73                 </Format>
 74                 <Format>
 75                     <MimeType>text/xml; subtype=gml/2.0.0</MimeType>
 76                 </Format>
 77                 <Format>
 78                     <MimeType>text/xml; subtype=gml/2.1.1</MimeType>
 79                 </Format>
 80                 <Format>
 81                     <MimeType>text/xml; subtype=gml/2.1.2</MimeType>
 82                 </Format>
 83                 <Format>
 84                     <MimeType>text/xml; subtype=gml/2.1.2.1</MimeType>
 85                 </Format>
 86                 <Format>
 87                     <MimeType>text/xml; subtype=gml/3.0.0</MimeType>
 88                 </Format>
 89                 <Format>
 90                     <MimeType>text/xml; subtype=gml/3.0.1</MimeType>
 91                 </Format>
 92                 <Format>
 93                     <MimeType>text/xml; subtype=gml/3.1.0</MimeType>
 94                 </Format>
 95                 <Format>
 96                     <MimeType>text/xml; subtype=gml/3.1.1</MimeType>
 97                 </Format>
 98                 <Format>
 99                     <MimeType>text/xml; subtype=gml/3.2.1</MimeType>
100                 </Format>
101             </Supported>
102         </ComplexData>
103     </Input>
104     </DataInputs>
105     <ProcessOutputs>
106     <Output>
107         <ows:Identifier>OutputData</ows:Identifier>
108         <ows:Title>地震烈度图</ows:Title>
109         <ComplexOutput>
110             <Default>
111                 <Format>
112                 <MimeType>application/x-zipped-shp</MimeType>
113                 </Format>
114             </Default>
115             <Supported>
116                 <Format>
117                     <MimeType>application/x-zipped-shp</MimeType>
118                 </Format>
119                 <Format>
120                     <MimeType>text/xml; subtype=gml</MimeType>
121                 </Format>
122                 <Format>
123                     <MimeType>text/xml; subtype=gml/2.0.0</MimeType>
124                 </Format>
125                 <Format>
126                     <MimeType>text/xml; subtype=gml/2.1.1</MimeType>
127                 </Format>
128                 <Format>
129                     <MimeType>text/xml; subtype=gml/2.1.2</MimeType>
130                 </Format>
131                 <Format>
132                     <MimeType>text/xml; subtype=gml/2.1.2.1</MimeType>
133                 </Format>
134                 <Format>
135                     <MimeType>text/xml; subtype=gml/3.0.0</MimeType>
136                 </Format>
137                 <Format>
138                     <MimeType>text/xml; subtype=gml/3.0.1</MimeType>
139                 </Format>
140                 <Format>
141                     <MimeType>text/xml; subtype=gml/3.1.0</MimeType>
142                 </Format>
143                 <Format>
144                     <MimeType>text/xml; subtype=gml/3.1.1</MimeType>
145                 </Format>
146                 <Format>
147                     <MimeType>text/xml; subtype=gml/3.2.1</MimeType>
148                 </Format>
149             </Supported>
150         </ComplexOutput>
151     </Output>
152     </ProcessOutputs>
153 </ProcessDescription>
154 </wps:ProcessDescriptions>

五、添加Execute的xml文档

创建DzLdksmnProcess类的Execute XML文档,注意其中的Identifier属性要和类名一样,内容编辑完成后将其放到wps10/WebContent/requests2路径下。

DzLdksmnProcess.xml内容如下:

 1 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 2 <wps:Execute service="WPS" version="1.0.0" xmlns:wps="http://www.opengis.net/wps/1.0.0"
 3     xmlns:ows="http://www.opengis.net/ows/1.1"
 4     xmlns:ogc="http://www.opengis.net/ogc"
 5     xmlns:xlink="http://www.w3.org/1999/xlink"
 6     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 7     xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsExecute_request.xsd">
 8     <ows:Identifier>DzLdksmnProcess</ows:Identifier>
 9     <ows:Title>地震烈度模型</ows:Title>
10     <ows:Abstract>利用地震震级、震中地理坐标和震源机制解等相关参数绘制地震烈度图</ows:Abstract>
11     <wps:DataInputs>
12     <wps:Input>
13         <ows:Identifier>QuHuaShp</ows:Identifier>
14         <ows:Title>行政区划图</ows:Title>
15         <wps:Reference mimeType="application/x-zipped-shp"
16             xlink:href="http://localhost:8080/wps10/datas/shapefile/china.zip" method="GET"/>
17     </wps:Input>
18     <wps:Input>
19         <ows:Identifier>LieDuShp</ows:Identifier>
20         <ows:Title>断裂带分布图</ows:Title>
21         <wps:Reference mimeType="application/x-zipped-shp"
22             xlink:href="http://localhost:8080/wps10/datas/shapefile/Duanceng.zip" method="GET"/>
23     </wps:Input>
24     </wps:DataInputs>
25     <wps:ResponseForm>
26     <wps:ResponseDocument storeExecuteResponse="false" lineage="false" status="false">
27       <wps:Output asReference="true" mimeType="application/x-zipped-shp" encoding="UTF-8">
28         <ows:Identifier>OutputData</ows:Identifier>
29         <ows:Title>地震烈度图</ows:Title>
30       </wps:Output>
31     </wps:ResponseDocument>
32     </wps:ResponseForm>
33 </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发布,本地的访问页面如下所示:

可以成功访问即可。

转载于:https://www.cnblogs.com/MatthewHome/p/10910888.html

标准WPS框架下的空间信息处理服务部署方法相关推荐

  1. WCF的服务部署方法

    WCF的服务部署方法 如果你创建了一个类库项目的服务,如图, 可以根据以下的步骤进行部署,以下步骤也是我经过多次操作可用的. 1.打开IIS管理器,右键网站,点击添加网站,弹出个页面,输入相关信息,注 ...

  2. php larval框架运行环境,4种Windows系统下Laravel框架的开发环境安装及部署方法详解...

    1.准备工作 1.1PHP集成环境 这里我们使用的是XAMPP,XAMPP是一个功能强大的建站集成软件包,采用一键安装的方式,包含PHP7.0.Mysql.Tomcat等.最新版下载地址:PHP 5. ...

  3. 银光中国网免费Silverlight空间Web Service部署方法

    银光中国网为方便大家学习Silverlight技术,特别推出Silverlight免费空间服务.看到论坛上有不少开发人员询问在部署WCF或者Web Service应用时出现异常,无法部署成功,这里我做 ...

  4. AFNetworking框架下的SSL服务器证书的自定义验证

    2019独角兽企业重金招聘Python工程师标准>>> # AFNetworking框架下的SSL服务器证书的自定义验证 ## 如何使用本地证书进行SSL验证 #### 开启SSL验 ...

  5. [转载] 新兵训练营系列课程——平台服务部署及Web框架

    原文: http://weibo.com/p/1001643875679132642345 大纲 微博平台主要负责微博基础功能.接下来将会介绍 平台的作用,以及服务提供的形式 平台Web服务的部署 平 ...

  6. Keras框架下的保存模型和加载模型

    在Keras框架下训练深度学习模型时,一般思路是在训练环境下训练出模型,然后拿训练好的模型(即保存模型相应信息的文件)到生产环境下去部署.在训练过程中我们可能会遇到以下情况: 需要运行很长时间的程序在 ...

  7. “人工”智能框架下的PDF转Word试探

    众所周知,PDF转Word是一大难题,扫描件的PDF转Word更是难上加难.经过一番探索发现,网上现有的PDF转Word 免费资源①,大多数都无法进行OCR(Optical Character Rec ...

  8. 微服务实战(六):选择微服务部署策略

    http://dockone.io/article/1066 微服务实战(六):选择微服务部署策略 [编者的话]这篇博客是用微服务建应用的第六篇,第一篇介绍了微服务架构模板,并且讨论了使用微服务的优缺 ...

  9. 微服务实践(六):选择微服务部署策略

    [编者的话]这篇博客是用微服务建应用的第六篇,第一篇介绍了微服务架构模板,并且讨论了使用微服务的优缺点.随后的文章讨论了微服务不同方面:使用API网关,进程间通讯,服务发现和事件驱动数据管理.这篇文章 ...

最新文章

  1. ML/DL:关于机器学习、深度学习算法模型的选择
  2. Visual Studio registry capture utility 已停止工作的解决办法
  3. FPGA加速BCNN,模型20倍剪枝率、边缘设备超5000帧/秒推理吞吐量
  4. CDN预热与刷新在促销活动中的应用
  5. c 语言 单链表的操作 易考点
  6. OpenCV 中的图像处理
  7. [转]Web3 是去中心化的“骗局”?
  8. 转载|pymysql.err.InternalError: Packet sequence number wrong - got 45 expected 0
  9. 【LeetCode笔记】309. 最佳买卖股票时机含冷冻期(Java、动态规划)
  10. 李大勇matlab视频解压密码,13.4 环境控制、手动开关模块
  11. 如何用MyEclipse在Resin中调试Web应用程序
  12. 怎么保存html,怎样保存网页?
  13. java300集高淇老师学习笔记
  14. cmd批量修改文件名 增加文字_如何批量修改文件名称,如何批量修改文件标题
  15. Sahi (3) —— 压力测试Load Test以CAS SSO登陆场景为例(103 Tutorial)
  16. qq物联网 android sdk,qcloud-iot-sdk-android
  17. 重温数据结构与算法之单调栈
  18. 关于md文件插入视频链接的方法。(亲测可用)
  19. W ndoWs电脑上的线怎么接,win7一台电脑两个显示器的连接方法介绍
  20. 浅谈开发与研发之差异

热门文章

  1. ghostwin10系统后不小心重新分区了,其它分区的资料如何找回
  2. js和CSS3炫酷3D相册展示
  3. 用康托展开实现全排列(STL、itertools)
  4. 一个测试新人的职业规划——三个月
  5. Error:java: 无效的源发行版: 9 解决方案论述
  6. Android中去掉显示标题的方法
  7. 三、面向对象——9-初始化块
  8. ios xcode真机调试获取屏幕截屏
  9. 一周总结汇总_2016-09-18
  10. 请问android直接post请求登录地址成功后,webview还是现实登录界面