3.6. OGC API功能
OGC API功能(OAPIF)是新一代OGC协议的第一个实现。它是由 OGC API - Features - Part 1: Core 文件。
在典型安装上可以通过以下方式访问该API http://localhost/qgisserver/wfs3
以下是众所周知的WFS协议和OAPIF之间最重要的区别的非正式快速摘要:
OAPIF基于 REST API
OAPIF必须遵循 OPENAPI 规格
OAPIF支持多种输出格式,但不规定任何输出格式(目前QGIS OAPIF中仅提供GeoJSON和HTML),并且它使用 content negotiation 确定要向客户端提供哪种格式
JSON和HTML是OAPIF中的一等公民
OAPIF是自我记录的(通过
/api
终端)OAPIF完全可导航(通过链接)和可浏览
重要
而QGIS中的OGC API功能实现可以利用 MAP
参数来指定项目文件,则OPENAPI规范不允许额外的查询参数。出于这个原因,强烈建议 MAP
未在URL中显示,并且项目文件在环境中通过其他方式指定(即设置 QGIS_PROJECT_FILE
在环境中通过网络服务器重写规则)。
备注
这个 API Endpoint提供了您的服务的所有受支持参数和输出格式的全面文档。下面的段落将只描述最重要的几个。
3.6.1. 资源表示
QGIS服务器中OGC API功能的实现目前支持以下资源表示(输出)格式:
HTML
JSON
实际提供的格式将取决于内容协商,但可以通过向端点附加格式说明符来显式请求特定格式。
支持的格式说明符扩展名为:
.json
.html
其他格式说明符别名可能由特定端点定义:
.openapi
:别名.json
由 API 终结点.geojson
:别名.json
由 Features 和 Feature 端点
3.6.2. 端点
该API提供了客户端可以检索的端点的列表。系统的设计方式是,每个响应都提供一组链接,以便在所有提供的资源中导航。
QGIS实施提供的终结点包括:
名字 |
路径 |
描述 |
---|---|---|
登录页 |
|
有关服务的一般信息,并提供指向所有可用端点的链接 |
合规性 |
|
关于服务符合标准的信息 |
API |
|
服务提供的端点和返回的文档结构的完整描述 |
收藏 |
|
由该服务提供的所有集合(即‘矢量图层’)的列表 |
集合 |
|
有关集合的信息(名称、元数据、范围等) |
功能 |
|
集合提供的功能列表 |
功能 |
|
有关单个要素的信息 |
与WFS-T(事务性Web功能服务)类似,可以添加、更新和删除功能(CRUD)。各个请求在“/api
”中进行了说明。
登录页
主端点是 Landing Page 。从该页面可以导航到所有可用的服务端点。这个 Landing Page 必须提供指向
API定义(路径
/api
链接关系service-desc
和service-doc
),一致性声明(路径
/conformance
,链接关系conformance
),以及集合(路径
/collections
,链接关系data
)。

图 3.23 服务器OAPIF登录页面
接口定义
这个 API Definition 是对服务提供的API的符合OPENAPI的描述。在其HTML表示形式中,它是一个可浏览的页面,其中准确地列出并记录了所有端点及其响应格式。此端点的路径为 /api
。
API定义提供了服务的全面和权威文档,包括所有支持的参数和返回的格式。
备注
此端点类似于WFS的 GetCapabilities
收藏品列表
集合终结点提供服务中所有可用集合的列表。由于该服务“服务”单个QGIS项目,因此集合是当前项目中的矢量层(如果它们在项目属性中发布为WFS)。此端点的路径为 /collections/
。

图 3.24 服务器OAPIF集合列表页面
收集详细信息
虽然集合终结点不提供有关每个可用集合的详细信息,但该信息可在 /collections/{collectionId}
终端。典型信息包括范围、描述、CRSS和其他元数据。
该HTML表示还提供了具有可用功能的可浏览地图。

图 3.25 服务器OAPIF集合详细信息页
功能列表
此终结点提供知道集合ID的集合中所有要素的列表。此终结点的路径为 /collections/{collectionId}/items
。
该HTML表示还提供了具有可用功能的可浏览地图。
备注
此端点类似于 GetFeature
在WFS 1和WFS 2中。

图 3.26 服务器OAPIF功能列表页面
功能详细信息
此端点提供有关单个要素的所有可用信息,包括要素属性及其几何图形。此端点的路径为 /collections/{collectionId}/items/{itemId}
。
该HTML表示还提供了带有要素几何图形的可浏览地图。

图 3.27 服务器OAPIF功能详细信息页面
3.6.3. 分页
在OGCAPI中通过以下方式实现对一长串功能的分页 next
和 prev
链接,QGIS服务器通过将 limit
和 offset
作为查询字符串参数。
URL示例:
http://localhost/qgisserver/wfs3/collection_one/items.json?offset=10&limit=10
备注
的最大可接受值 limit
可以使用 QGIS_SERVER_API_WFS3_MAX_LIMIT
服务器配置设置(请参阅: 环境变量 )。
3.6.4. 特征过滤
可以通过指定一个或多个筛选器来筛选/搜索集合中可用的功能。
日期和时间过滤器
可以通过指定具有日期和/或日期时间属性的 datetime
查询字符串中的参数。默认情况下,第一个日期/日期时间字段用于筛选。此行为可以通过在 部分的层属性对话框中。
中详细介绍了日期和时间筛选语法。 接口定义 除了支持单个值之外,还支持范围(包括开始值和结束值)。
URL示例:
仅返回日期维度匹配的要素 2019-01-01
http://localhost/qgisserver/wfs3/collection_one/items.json?datetime=2019-01-01
仅返回日期时间维度匹配的要素 2019-01-01T01:01:01
http://localhost/qgisserver/wfs3/collection_one/items.json?datetime=2019-01-01T01:01:01
仅返回日期时间维度在范围内的要素 2019-01-01T01:01:01
- 2019-01-01T12:00:00
http://localhost/qgisserver/wfs3/collection_one/items.json?datetime=2019-01-01T01:01:01/2019-01-01T12:00:00
边界框过滤器
边框空间过滤器可以使用 bbox
参数:
逗号分隔元素的顺序为:
左下角,WGS 84经度
左下角,WGS 84纬度
右上角,WGS 84经度
右上角,WGS 84纬度
备注
OGC规范还允许6项BBox说明符,其中第三项和第六项是Z组件,QGIS服务器还不支持这一点。
URL示例:
http://localhost/qgisserver/wfs3/collection_one/items.json?bbox=-180,-90,180,90
如果 CRS 不是边界框的 WGS 84 ,则可以使用可选参数指定不同的CRS bbox-crs
。CRS格式标识符必须位于 OGC URI 格式:
URL示例:
http://localhost/qgisserver/wfs3/collection_one/items.json?bbox=913191,5606014,913234,5606029&bbox-crs=http://www.opengis.net/def/crs/EPSG/9.6.2/3857
属性过滤器
属性筛选器可以与边界框筛选器组合使用,它们的一般形式为: <attribute name>=<attribute value>
。多个筛选器可以使用 AND
接线员。
URL示例:
过滤属性包含的所有要素 name
等于“我的价值”
http://localhost/qgisserver/wfs3/collection_one/items.json?attribute_one=my%20value
部分匹配还可以通过使用 *
(“STAR”)运营商:
URL示例:
过滤属性包含的所有要素 name
以“Value”结尾
http://localhost/qgisserver/wfs3/collection_one/items.json?attribute_one=*value
3.6.5. 特征排序
方法按字段值对结果集进行排序。 sortby
查询参数。
默认情况下,结果按升序排序。若要按降序对结果进行排序,请使用布尔标志 (sortdesc
)可以设置为:
http://localhost/qgisserver/wfs3/collection_one/items.json?sortby=name&sortdesc=1
3.6.6. 属性选择
对象返回的要素属性 功能列表 通过将逗号分隔的属性名称列表添加到可选的 properties
查询字符串参数。
URL示例:
仅返回 name
属性
http://localhost/qgisserver/wfs3/collection_one/items.json?properties=name
3.6.7. 自定义HTML页
该HTML表示使用一组HTML模板来生成响应。该模板由一个名为 inja 。可以通过覆盖模板来自定义模板(请参阅: 模板覆盖 )。模板可以访问可用于的相同数据 JSON
模板可以使用表示法和几个附加功能:
自定义模板函数
path_append( path )
:将目录路径追加到当前urlpath_chomp( n )
:从当前url路径中删除指定数量的目录组件“n”。json_dump( )
:打印传递给模板的JSON数据static( path )
:返回指定静态路径的完整URL。例如:“Static(”/Style/Black.css“)”带有根路径“http://localhost/qgisserver/wfs3”将返回“http://localhost/qgisserver/wfs3/static/style/black.css”.links_filter( links, key, value )
:从链接列表中返回过滤的链接content_type_name( content_type )
:从内容类型返回短名称,例如“Text/html”将返回“html”nl2br( text )
:返回所有换行符都被“<br>”标记替换的输入文本starts_with( string, prefix )
:如果字符串以提供的字符串前缀开头,则返回TRUE,否则返回FALSE
模板覆盖
模板和静态资产存储在QGIS服务器默认API资源目录的子目录中 (/usr/share/qgis/resources/server/api/
在Linux系统上),可以通过更改环境变量来自定义基本目录 QGIS_SERVER_API_RESOURCES_DIRECTORY
。
典型的Linux安装将具有以下目录树:
/usr/share/qgis/resources/server/api/
└── ogc
├── schema.json
├── static
│ ├── jsonFormatter.min.css
│ ├── jsonFormatter.min.js
│ └── style.css
└── templates
└── wfs3
├── describeCollection.html
├── describeCollections.html
├── footer.html
├── getApiDescription.html
├── getFeature.html
├── getFeatures.html
├── getLandingPage.html
├── getRequirementClasses.html
├── header.html
├── leaflet_map.html
└── links.html
要覆盖模板,可以将整个树复制到其他位置和点 QGIS_SERVER_API_RESOURCES_DIRECTORY
到新的地点。