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资源是使用模板创建的,尤其是:
该HTML表示形式是使用 Freemarker templates
GeoJSON表示是使用GeoJSON构建的 features templates
默认模板针对 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输出:
$GEOSERER_DATA_DIR/templates/ogc/stac/collections.json is the collections template
$GEOSERER_DATA_DIR/templates/ogc/stac/items.json is the items template
在使用STAC的情况下,JSON模板也驱动数据库查询,通过解释模板将公开的STAC属性重新映射到数据库属性。建议保持属性映射尽可能简单,以允许在通过STAC API访问数据库时使用原生SQL查询和索引。
对于项和集合,还可以提供特定于集合的模板,该模板将包含该集合唯一的指令和映射。使用命名约定,可以将特定于集合的模板放置在与上面相同的模板目录中 items-<COLLECTION_ID>.json
或 collections-<COLLECTION_ID>.json
,在哪里 <COLLECTION_ID>
集合标识符。例如,如果集合的名称为 SENTINEL2
:
其特定于集合的模板名为
collections-SENTINEL2.json
特定于它的Items模板命名为
items-SENTINEL2.json
字段片段¶
当在STAC服务的上下文中处理GET请求的JSON输出时,模块支持基于 field fragments specification 。根据现行规范:
如果没有
fields
如果指定了查询参数,则返回项的所有属性。如果一个
fields
属性,则只返回该项的默认值(具有有效的STAC实体所必需的值):id
、类型
、几何
、bbox
、Links`、``assets
、Properties.Datetime
、Properties.created
。如果
fields
值被指定,Geoserver将始终返回默认属性,如果用户没有将它们作为排除的目标。例.assets
将始终存在,即使没有显式摘录 (fields=-assets,...
)。如果指定了ONLY INCLUDE,则这些属性将添加到默认属性集中(SET UNION操作)。
如果仅指定了EXCLUDE,则会从默认属性集和包含属性的并集中减去这些属性(设置差异操作)。如果任何排除的属性在默认属性集中,这将导致实体不是有效项,但Geoserver不会引发错误消息。
如果包含属性,例如
properties
,但排除一个或多个嵌套属性,例如-properties.datetime
,则排除的嵌套属性将不会出现在属性中。如果属性被排除,例如
-properties.nestedObj
,但包含多个嵌套属性之一,例如properties.nestedObject.attribute
,那么nestedObject
将仅与包含的属性一起显示在输出中。