使用OGC API流程接口增强WPS实现¶
WPS标准提供了一个标准接口,简化了通过Web服务访问简单或复杂的计算地理空间处理服务的任务。虽然WPS标准在设计时考虑到了空间处理,但该标准也可用于将非空间处理任务轻松插入到Web服务环境中。
OGC API - Process Standard是一种更新、更现代的编程方式,可以通过Web与资源交互,同时允许更好地集成到现有的软件包中。OGCAPI - 流程标准解决了WPS标准处理的所有用例,同时还利用了OpenAPI规范和面向资源的方法。
WPS和OGC API流程都有以下核心概念:
过程
输入
输出
WPS和OGC API流程都支持以下关键执行模式:
同步
异步
WPS和OGC API流程之间的主要区别在于如何描述接口:
WPS使用GetCapability操作来检索有关服务器支持的功能的信息。在合同中,OGC API-Process为一致性声明、进程列表、作业列表和API定义资源提供了单独的路径,这些资源共同描述了服务器提供的能力和资源。
WPS提供的接口仅记录在标准文档中,以供人工解释。相比之下,OGC API-Process提供了标准文档(用于人工解释)和指定为OpenAPI定义文档(用于应用程序解释)的API定义文档。
WPS支持以下输入数据类型:复杂数据、文本数据和边界框数据。相比之下,OGC API-Process支持以下输入数据类型:简单文字值、数组、限定值、二进制值和边界框。此外,OGC API-Process支持以下类型的数组简单文字、嵌入式数组、限定值、二进制值、边界框值,是使用链接的值的引用。
WPS的一个示例¶
为了解释如何通过将OGC API流程实现与WPS一起部署来扩展WPS以支持OGC API流程,我们提供了引用CF Checker流程的示例。CF检查器是 developed 在哈德利气候预测和研究中心,英国气象局。CF卡检查器的开发和维护现已由NCAS计算建模服务(NCAS-CMS)接管。
通过HTTP GET操作发送的DescribeProcess请求示例 cfchecker 流程如下所示。
https://pavics.ouranos.ca/twitcher/ows/proxy/hummingbird/wps?
service=WPS&
version=1.0.0&
request=DescribeProcess&
identifier=cfchecker
DescribeProcess响应的摘录如下所示。
<wps:ProcessDescriptions xmlns:gml="http://www.opengis.net/gml" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:wps="http://www.opengis.net/wps/1.0.0" 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/wpsDescribeProcess_response.xsd" service="WPS" version="1.0.0" xml:lang="en-US">
<ProcessDescription wps:processVersion="3.0.5" storeSupported="true" statusSupported="true">
<ows:Identifier>cfchecker</ows:Identifier>
<ows:Title>CF Checker by CEDA</ows:Title>
<ows:Abstract>The NetCDF Climate Forcast Conventions compliance checker by CEDA. </ows:Abstract>
<DataInputs>
<Input minOccurs="1" maxOccurs="1">
<ows:Identifier>cf_version</ows:Identifier>
<ows:Title>Check against CF version</ows:Title>
<ows:Abstract>Version of CF conventions that the NetCDF file should be check against.</ows:Abstract>
<LiteralData>
<ows:DataType ows:reference="urn:ogc:def:dataType:OGC:1.1:string">string</ows:DataType>
<ows:AllowedValues>
<ows:Value>auto</ows:Value>
<ows:Value>1.6</ows:Value>
<ows:Value>1.5</ows:Value>
<ows:Value>1.4</ows:Value>
<ows:Value>1.3</ows:Value>
<ows:Value>1.2</ows:Value>
<ows:Value>1.1</ows:Value>
<ows:Value>1.0</ows:Value>
</ows:AllowedValues>
<DefaultValue>auto</DefaultValue>
</LiteralData>
</Input>
<Input minOccurs="0" maxOccurs="1024">
<ows:Identifier>dataset</ows:Identifier>
<ows:Title>Dataset</ows:Title>
<ows:Abstract>You may provide a URL or upload a NetCDF file.</ows:Abstract>
<ComplexData>
<Default>
<Format>
<MimeType>application/x-netcdf</MimeType>
</Format>
</Default>
<Supported>
<Format>
<MimeType>application/x-netcdf</MimeType>
</Format>
</Supported>
</ComplexData>
</Input>
<Input minOccurs="0" maxOccurs="1024">
<ows:Identifier>dataset_opendap</ows:Identifier>
<ows:Title>Remote OpenDAP Data URL</ows:Title>
<ows:Abstract>Or provide a remote OpenDAP data URL, for example: http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/ncep.reanalysis2.dailyavgs/surface/mslp.2016.nc</ows:Abstract>
<ows:Metadata xlink:href="https://www.iana.org/assignments/media-types/media-types.xhtml" xlink:title="application/x-ogc-dods" xlink:type="simple"/>
<LiteralData>
<ows:DataType ows:reference="urn:ogc:def:dataType:OGC:1.1:string">string</ows:DataType>
<ows:AnyValue/>
</LiteralData>
</Input>
</DataInputs>
<ProcessOutputs>
<Output>
<ows:Identifier>output</ows:Identifier>
<ows:Title>CF Checker Report</ows:Title>
<ows:Abstract>Summary of the CF compliance check</ows:Abstract>
<ComplexOutput>
<Default>
<Format>
<MimeType>text/plain</MimeType>
</Format>
</Default>
<Supported>
<Format>
<MimeType>text/plain</MimeType>
</Format>
</Supported>
</ComplexOutput>
</Output>
</ProcessOutputs>
</ProcessDescription>
</wps:ProcessDescriptions>
通过HTTP GET操作发送的执行请求示例 cfchecker 流程如下所示。
https://pavics.ouranos.ca/twitcher/ows/proxy/hummingbird/wps?
service=WPS&
version=1.0.0&
request=Execute&
identifier=cfchecker&
DataInputs=dataset_opendap=http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/ncep.reanalysis2.dailyavgs/surface/mslp.2016.nc
通过HTTP POST操作发送的执行请求示例 cfchecker 流程如下所示。
<wps:Execute version="1.0.0" service="WPS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/wps/1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:wcs="http://www.opengis.net/wcs/1.1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd">
<ows:Identifier>cfchecker</ows:Identifier>
<wps:DataInputs>
<wps:Input>
<ows:Identifier>cf_version</ows:Identifier>
<wps:Data>
<wps:LiteralData>auto</wps:LiteralData>
</wps:Data>
</wps:Input>
<wps:Input>
<ows:Identifier>dataset_opendap</ows:Identifier>
<wps:Data>
<wps:LiteralData>http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/ncep.reanalysis2.dailyavgs/surface/mslp.2016.nc</wps:LiteralData>
</wps:Data>
</wps:Input>
</wps:DataInputs>
<wps:ResponseForm/>
</wps:Execute>
示例执行请求的响应如下所示。
<wps:ExecuteResponse xmlns:gml="http://www.opengis.net/gml" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:wps="http://www.opengis.net/wps/1.0.0" 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_response.xsd" service="WPS" version="1.0.0" xml:lang="en-US" serviceInstance="https://pavics.ouranos.ca:443/wps?service=WPS&request=GetCapabilities" statusLocation="https://pavics.ouranos.ca:443/wpsoutputs/hummingbird/0e370b90-9316-11ec-8f55-0242ac120018.xml">
<wps:Process wps:processVersion="3.0.5">
<ows:Identifier>cfchecker</ows:Identifier>
<ows:Title>CF Checker by CEDA</ows:Title>
<ows:Abstract>The NetCDF Climate Forcast Conventions compliance checker by CEDA. </ows:Abstract>
</wps:Process>
<wps:Status creationTime="2022-02-21T12:59:28Z">
<wps:ProcessSucceeded>PyWPS Process CF Checker by CEDA finished</wps:ProcessSucceeded>
</wps:Status>
<wps:ProcessOutputs>
<wps:Output>
<ows:Identifier>output</ows:Identifier>
<ows:Title>CF Checker Report</ows:Title>
<ows:Abstract>Summary of the CF compliance check</ows:Abstract>
<wps:Reference xlink:href="https://pavics.ouranos.ca:443/wpsoutputs/hummingbird/0e370b90-9316-11ec-8f55-0242ac120018/cfchecker_output_RpMAsU.txt" mimeType="text/plain"/>
</wps:Output>
</wps:ProcessOutputs>
</wps:ExecuteResponse>
在WPS前创建OGC API-进程代理¶
为了演示如何在WPS前面创建实现OGC API流程的代理,我们使用 pygeoapi +一个PYTHON服务器实现了许多OGC API标准。
安装PYOGIAPI¶
首先,按照中所述安装pygeapi pygeoapi 主页。
以下是一系列步骤。
python3 -m venv pygeoapi
cd pygeoapi
. bin/activate
git clone https://github.com/geopython/pygeoapi.git
cd pygeoapi
pip3 install -r requirements.txt
python3 setup.py install
cp pygeoapi-config.yml example-config.yml
vi example-config.yml # edit as required
export PYGEOAPI_CONFIG=example-config.yml
export PYGEOAPI_OPENAPI=example-openapi.yml
pygeoapi openapi generate $PYGEOAPI_CONFIG > $PYGEOAPI_OPENAPI
pygeoapi serve
# in another terminal
curl http://localhost:5000 # or open in a web browser
安装了pygeapi后,请验证您是否可以访问 landing page 以及 process list 。
登录页面的屏幕截图如下所示。列出的路径中将包括进程资源,通过该资源可以检索进程列表。

流程列表的屏幕截图如下所示。进程列表将显示名为“Hello World”的单个进程。

单击流程名称可转到流程描述。这个 description Hello World流程的声明该流程接受两个字符串作为输入,一个名为‘name’,另一个名为‘Message’。

流程描述的JSON编码可在http://localhost:5000/processes/hello-world?f=json获得
查看流程描述后,我们可以使用cURL或Postman等Web工具创建处理作业。使用Postman发送的请求和响应的屏幕截图如下所示。

为方便起见,下面提供了请求的有效负载。
{
"inputs": {
"message": "An optional message.",
"name": "World"
}
}
创建代理cfcheck进程¶
现在我们已经安装了pygeapi,让我们在pygeapi中创建进程,该进程将通过实现OGC API进程的接口公开cfcheck。
首先,我们将新流程添加到示例配置文件中,该配置文件位于 resources 元素。
resources:
proxy-cfchecker:
type: process
processor:
name: ProxyCFChecker
然后,我们将新流程添加到Example-Openapi.yml配置文件。
/processes/proxy-cfchecker:
get:
description: An example process that checks the validity of a NetCDF-CF file.
operationId: describeProxy-cfcheckerProcess
parameters:
- $ref: '#/components/parameters/f'
responses:
'200':
$ref: '#/components/responses/200'
default:
$ref: '#/components/responses/default'
summary: Get process metadata
tags:
- proxy-cfchecker
/processes/proxy-cfchecker/execution:
post:
description: An example process that checks the validity of a NetCDF-CF file.
operationId: executeProxy-cfcheckerJob
requestBody:
content:
application/json:
example:
inputs:
dataset_opendap: http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/ncep.reanalysis2.dailyavgs/surface/mslp.2016.nc
schema:
$ref: http://schemas.opengis.net/ogcapi/processes/part1/1.0/openapi/schemas/execute.yaml
description: Mandatory execute request JSON
required: true
responses:
'200':
$ref: '#/components/responses/200'
'201':
$ref: http://schemas.opengis.net/ogcapi/processes/part1/1.0/openapi/responses/ExecuteAsync.yaml
'404':
$ref: http://schemas.opengis.net/ogcapi/processes/part1/1.0/openapi/responses/NotFound.yaml
'500':
$ref: http://schemas.opengis.net/ogcapi/processes/part1/1.0/openapi/responses/ServerError.yaml
default:
$ref: '#/components/responses/default'
summary: Process Proxy CFChecker execution
tags:
- proxy-cfchecker
我们还将新流程的标记添加到Example-Openapi.yml配置文件中。
tags:
- description: An example process that checks the validity of a NetCDF-CF file.
name: proxy-cfchecker
接下来,我们将新进程添加到 resources 元素。
resources:
proxy-cfchecker:
type: process
processor:
name: ProxyCFChecker
接下来,我们将新流程添加到plugin.py配置文件的 process 元素。
'process': {
'ProxyCFChecker': 'pygeoapi.process.proxy_cfchecker.ProxyCFCheckerProcessor'
}
完成配置后,我们接下来实施该过程。
要完成-添加一个指向Python代码的链接。
现在,让我们通过执行以下命令来重新构建PYOGIAPI python3 setup.py install 从命令行,然后通过执行以下命令来运行pygeapi pygeoapi serve 从命令行。
现在,我们可以看到Proxy-cfcheck进程列在进程列表中。

打开Proxy-cfcheck的描述,我们可以看到它接受的输入。

现在,我们可以通过使用cURL或Postman等工具发送请求来创建处理作业。

为方便起见,下面提供了请求的有效负载。
{
"inputs": {
"dataset_opendap": "http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/ncep.reanalysis2.dailyavgs/surface/mslp.2016.nc"
}
}
确认¶
WPS电子学习模块的这一部分由 Climate Intelligence (CLINT) 项目。