STAC扩展

OpenSeach for EO子系统还公开了一个 STAC 服务,作为符合OGC API的功能实现 STAC API

STAC API的登录页从Geoserver主页链接,可在以下位置获得 $HOST:$PORT/geoserver/ogc/stac 。该API公开EO内容的OpenSearch,并根据需要对其进行重组:

  • 集合表会映射到STAC集合

  • Products表映射到STAC Items

鉴于名称和结构的差异,STAC资源是使用模板创建的,尤其是:

默认模板针对 default PostGIS database structure 并且可以被定制以包括在最终的数据库修改之后的新属性。

所有内置模板都被复制到数据目录中进行定制,并放置在 $GEOSERER_DATA_DIR/templates/ogc/stac 文件夹:

  • collection.ftl

  • collection_include.ftl

  • collections.ftl

  • collections.json

  • item.ftl

  • item_include.ftl

  • Items-content.ftl

  • Items-empty.ftl

  • Items-footer.ftl

  • Items-header.ftl

  • items.json

  • landingPage.ftl

  • Queryables-collection.ftl

  • Queryables-common.ftl

  • Queryables-global.ftl

  • Search-content.ftl

  • Search-empty.ftl

  • Search-footer.ftl

  • Search-header.ftl

专门针对JSON输出:

在使用STAC的情况下,JSON模板也驱动数据库查询,通过解释模板将公开的STAC属性重新映射到数据库属性。建议保持属性映射尽可能简单,以允许在通过STAC API访问数据库时使用原生SQL查询和索引。

对于项和集合,还可以提供特定于集合的模板,该模板将包含该集合唯一的指令和映射。使用命名约定,可以将特定于集合的模板放置在与上面相同的模板目录中 items-<COLLECTION_ID>.jsoncollections-<COLLECTION_ID>.json ,在哪里 <COLLECTION_ID> 集合标识符。例如,如果集合的名称为 SENTINEL2

  • 其特定于集合的模板名为 collections-SENTINEL2.json

  • 特定于它的Items模板命名为 items-SENTINEL2.json

字段片段

当在STAC服务的上下文中处理GET请求的JSON输出时,模块支持基于 field fragments specification 。根据现行规范:

  • 如果没有 fields 如果指定了查询参数,则返回项的所有属性。

  • 如果一个 fields 属性,则只返回该项的默认值(具有有效的STAC实体所必需的值): id类型几何bboxLinks`、``assetsProperties.DatetimeProperties.created

  • 如果 fields 值被指定,Geoserver将始终返回默认属性,如果用户没有将它们作为排除的目标。例. assets 将始终存在,即使没有显式摘录 (fields=-assets,... )。

  • 如果指定了ONLY INCLUDE,则这些属性将添加到默认属性集中(SET UNION操作)。

  • 如果仅指定了EXCLUDE,则会从默认属性集和包含属性的并集中减去这些属性(设置差异操作)。如果任何排除的属性在默认属性集中,这将导致实体不是有效项,但Geoserver不会引发错误消息。

  • 如果包含属性,例如 properties ,但排除一个或多个嵌套属性,例如 -properties.datetime ,则排除的嵌套属性将不会出现在属性中。

  • 如果属性被排除,例如 -properties.nestedObj ,但包含多个嵌套属性之一,例如 properties.nestedObject.attribute ,那么 nestedObject 将仅与包含的属性一起显示在输出中。