ogc web处理服务(ogc wps)

OGC Web Processing Service 标准为标准化地理空间处理服务的输入和输出(请求和响应)提供了规则。该标准还定义了客户机如何请求流程的执行,以及如何处理流程的输出。它定义了一个接口,该接口有助于地理空间进程的发布以及客户端对这些进程的发现和绑定。wps所需的数据可以通过网络传递,也可以在服务器上使用。

注解

此描述主要参考1.0.0版本标准,因为pywps仅实现此版本。还有2.0.0版本,我们将在不久的将来实现。

wps是一种无状态协议(类似于任何ogc服务)。对于每个请求-响应操作,服务器和客户端之间的协商都必须启动。没有官方的方式,如何让服务器“记住”,以前是什么,服务器和客户端之间没有通信历史。

过程

一个过程 p 是一个函数,对于每个输入返回相应的输出:

\[P:X\右箭头Y\]

在哪里? X 表示参数的域 xY 表示值的共域 y .

在规范中,过程参数被称为 过程输入 结果值称为 过程输出 . 没有进程输入的进程表示传递常量或随机进程输出的值生成器。

过程 只是一些地理空间操作,它有输入和输出,并部署在服务器上。它可以是相对简单的(将两个栅格地图加在一起)或非常复杂的(气候变化模型)。计算可能需要短时间(秒)或长时间(天)。进程是,作为pywps用户,您希望向其他人公开并让他们处理数据的内容。

每个进程都具有以下属性:

标识符

唯一进程标识符

书名

可读标题

摘要

对过程的详细描述,它做什么,应该如何使用

以及输入和输出列表。

数据输入和输出

ogc wps定义了3种类型的数据输入和输出: LiteralDataComplexDataBoundingBoxData .

所有数据类型都需要具有以下属性:

标识符

唯一输入标识符

书名

可读标题

摘要

更长的数据输入或输出描述,这样用户就可以有方向感。

极小发生

输入的最小出现次数(例如,可以有更多的栅格文件带,并且它们都可以使用相同的标识符作为输入传递)

最大发生

输入或输出出现的最大次数

根据数据类型(literal、complex、boundingbox),也可能出现其他属性。

LiteralData

文字数据是任何文本字符串,通常很短。它用于传递单个参数,如数字或文本参数。wps使服务器能够定义 allowedValues -允许值的列表或间隔,以及数据类型(整数、浮点、字符串)。可以设置其他属性,例如 unitsencoding .

ComplexData

复杂数据通常是栅格或矢量文件,但基本上是任何(通常是基于文件的)数据,这些数据通常被处理(或处理的结果)。可以使用 mimeType ,XML schemaencoding (如 base64 对于栅格数据。

注解

pywps(像每台服务器一样)支持有限的列表 mimeTypes . 如果您需要一些新格式,只需在我们的存储库中创建pull请求。参考 pywps.inout.formats.FORMATS 了解更多详细信息。

通常,输入数据标识的最低要求是 mimeType. That usually is application/gml+xml for GML -编码的矢量文件, image/tiff; subtype=geotiff 用于栅格文件。输入或输出也可以是任何ogc ows服务的结果。

BoundingBoxData

待处理

添加对ogc ows公共规范的引用

在ogc ows通用规范中,boundingbox数据被指定为两对坐标(用于2d和3d空间)。它们可以用wgs84编码,也可以通过epsg码。它们旨在用作目标区域的定义。

注解

在现实生活中,boundingbox数据并没有那么常用

将数据传递到流程实例

通常有三种方法将输入数据从客户端传递到服务器:

数据已在服务器上

在第一种情况下,数据已经存储在服务器上(从客户机的角度来看)。这是最简单的情况。

数据与请求一起发送到服务器

在这种情况下,数据是通过http post发送的xml编码文档的直接一部分。一些客户机/服务器希望将数据插入 CDATA section. The data can be text based (JSON), XML based (GML) or even raster based - in this case, they are usually encoded using base64 .

传递到目标服务的引用链接

客户端不需要传递数据本身,客户端只需发送指向目标数据服务(或文件)的引用链接。在这种情况下,例如ogc wfs GetFeatureType 可以传递url,服务器将自动下载数据。

虽然这通常是用来 ComplexData 输入类型,它也可以用于文本和边框数据。

同步进程请求与异步进程请求

流程实例执行有两种模式:同步和异步。

同步模式

客户端发送 Execute request to the server and waits with open server connection, till the process is calculated and final response is returned back. This is useful for fast calculations which do not take longer then a couple of seconds (Apache2 httpd server uses 300 seconds 作为connectionTimeout的默认值)。

异步模式

客户端发送 Execute 带有异步模式显式请求的请求。如果进程支持(在pywps中,我们有相应的配置),服务器将返回 ProcessAccepted 立即用url响应,客户端可以定期检查 流程执行状态 .

注解

如您所见,使用wps,客户端必须应用 pull 与服务器通信的方法。客户端必须是通信中的活动元素-服务器只是响应客户端请求,而不是活动的 任何信息(就像web套接字将被实现一样)。

过程状态

Process status 是流程实例的一般状态,向客户端报告计算结果。有4种类型的过程状态

ProcessAccepted

进程已被服务器接受,进程将很快开始执行。

ProcessStarted

进程计算已开始。状态还包含关于 percentDone -计算进度及 statusMessage -报告当前计算状态的文本(示例: “缓存” - 33%)。

ProcessFinished

流程实例成功执行了计算,并最终 Execute 响应返回到客户端和/或存储在最终位置

ProcessFailed

流程实例和服务器报告有问题 server exception (见 pywps.exceptions )除了信息,还有可能出错的地方。

请求编码,http get和post

可以使用键值对(kvp)或xml有效负载对请求进行编码。

键值对

通常通过 HTTP GET request method 直接在url中编码。键和值用分隔 = 每一对用 & 签署(用) ? 在请求开始时。例如 获取能力需求 ::

http://server.domain/wps?service=WPS&request=GetCapabilities&version=1.0.0

在本例中,有3对输入参数: servicerequestversion 带值 WPSGetCapabilities1.0.0 分别。

XML有效载荷

XML数据是通过 HTTP POST request method . XML文档可以更丰富,参数更多,更好地在复杂结构中解析。客户端还可以将整个数据集编码到请求中,包括栅格(使用base64编码)或矢量数据(通常作为gml文件)。

<?xml version="1.0" encoding="UTF-8"?>
<wps:GetCapabilities language="cz" service="WPS" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:wps="http://www.opengis.net/wps/1.0.0" 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/wpsGetCapabilities_request.xsd">
  <wps:AcceptVersions>
    <ows:Version>1.0.0</ows:Version>
  </wps:AcceptVersions>
</wps:GetCapabilities>

注解

即使在kvp上使用xml看起来更复杂,对于一些复杂的请求,使用xml编码通常更安全和高效。kvp方式,特别是wps的execute请求可能会很棘手,并导致不可预测的错误。