配置OpenSearch模块¶
OpenSearch模块需要知道在哪个数据库上执行搜索。
遵循以下步骤:
设置一个标准PostGIS数据库,指向上面从SQL文件创建的数据库和模式。记下商店的全名(例如。
test:metadata
在哪里?test
是工作区和metadata
是商店名称)。除了填充连接参数外,请记住将“公开主键”设置为true。创建“基于JDBC的OpenSearch Store”类型的新存储,并在其“Store”参数中配置基本PostGIS存储的完全限定名。
进入“OS-EO”服务配置页面,配置“OpenSearch”存储
全局可查询项(适用于STAC API以定义所有集合的可查询字段)可使用OpenSearch特定元数据下的文本框中的逗号分隔列表进行配置
高级:添加产品类¶
OpenSearch模块的设计是“数据驱动的”,这意味着只要向产品和集合表中添加新的列,就可以实现新的搜索属性。
特别是,这两个表都有一个“基于前缀”的约定,将属性链接到各自的产品类型,并且引擎将仅为特定产品宣传与其相关的属性。例如,在光学产品中,将列出以“opt”开头的属性,而不是以“sar”开头的属性。
以下是开箱即用的产品类别表:
名字 |
前缀 |
命名空间 |
描述 |
---|---|---|---|
eop_generic |
EOP公司 |
所有EO产品共享的基本属性。永远不要删除此类。 |
|
视力的 |
选择 |
光学产品特性 |
|
雷达 |
合成孔径雷达 |
雷达产品特性 |
|
高度测量 |
中高音 |
测高产品特性 |
|
大气 |
自动取款机 |
大气产品特性 |
|
四肢 |
线性矩阵不等式 |
肢体产品特性 |
|
过磷酸钙 |
过磷酸钙 |
SSP产品属性 |
各种特性有不同的用途:
这个 name 在集合中用于定义传感器的类型(eoSensorType列)
这个 前缀 在product表中用作列名的前缀,以便将列名与特定的产品类型关联,在REST API的JSON表示中显示为这样,在XML输出中也显示为前缀
这个 命名空间 在XML输出中与前缀一起使用(例如。,
xmlns:opt="http://www.opengis.net/opt/2.1"
)
可以添加新的产品类别,也可以更改内置的产品类别,但应注意保持产品类别和数据库的一致性。在对数据库结构进行任何更改后,请记住“重置”Geoserver配置,使其重新扫描表结构。
Html模板¶
有关集合和产品的Freemarker模板,请参阅 $GEOSERVER_DATA_DIRECTORY/templates/os-eo
:
generic-header.ftl 接收搜索结果、查询、组织、标题、更新(日期)、生成器,并为其编码通用的Header Atom HTML描述。
generic-footer.ftl 使用</feed>结束标记很简单。
product.ftl 接收OpenSearch产品、更新(日期)、dcDate(日期)产品,并对其Atom HTML描述进行编码。
collection.ftl 接收OpenSearch集合,更新(日期)、dcDate(日期)、提供并对其Atom HTML描述进行编码。
上面链接的默认模板报告产品/集合的时间范围,并链接到其他相关的OpenSearch资源(元数据、自我链接、快速查看)。
可以在数据目录中设置特定于集合的模板,将集合标识符加到文件名上,例如 collection-SENTINEL2.ftl
或 product-SENTINEL2.ftl
。
模板可以使用 oseoLink
函数来构建指向回OpenSearch服务的链接。该函数接收以下参数:
第一个参数是
path
下的分段oseo
服务路径。其他参数是可选的,是几个键和值,用于编码链接的查询字符串。
元数据模板¶
有关集合和产品的Freemarker元数据模板,请参阅 $GEOSERVER_DATA_DIRECTORY/templates/os-eo
:
product-metadata.ftl 接收OpenSearch产品并对其Atom HTML描述进行编码。
collection-metadata.ftl 接收OpenSearch集合并对其Atom HTML描述进行编码。
上面链接的默认模板分别为集合生成ISO元数据表,为产品生成EO O&M产品元数据表。
模板可以使用 oseoLink
函数来构建指向回OpenSearch服务的链接。该函数接收以下参数:
第一个参数是
path
下的分段oseo
服务路径。其他参数是可选的,是几个键和值,用于编码链接的查询字符串。
模板还可以使用 gml
生成几何的GML 3.2表示的函数(请记住,必须强制不转义输出,使用 ?no_esc
,以及 minx
, miny
, maxx
, maxy
可用于提取边框角点值的。所有这些函数都需要一个几何图形作为输入。
最后,模板可以使用 loadJSON
函数从Geoserver数据目录内的文件中读取JSON。JSON文件的路径可以是绝对路径,例如。 "${loadJSON('/path/to/read.json')}"
,或者一个纯文件名,如果JSON文件存在于Geoserver根目录中,例如。 "${loadJSON('read.json')}"
。
该函数返回一个可以使用 ?eval_json
自由标记内置功能: <#assign loadedJSON = "${loadJSON('readAndEval.json')}">
<#assign evalJSON = loadedJSON?eval_json>
有关编写模板的更多信息,请参阅 templates guide 。
GeoJSON输出模板¶
该模块支持根据<OGC OpenSearch-EO GeoJSON(-LD)响应编码对集合和产品进行GeoJSON编码 Standard`https://docs.opengeospatial.org/is/17-047r1/17-047r1.html`>_.
给出输出中所需的结构,就不可能使用简单的GeoJSON编码器。相反,该模块使用两个专用的 features templates 用户可以对其进行定制以匹配数据库结构。
默认模板是Geoserver分发的一部分,并在启动时自动复制到数据目录,以便进行自定义:
$GEOSERVER_DATA_DIR/templates/os-eo/products.json is the products template
$GEOSERVER_DATA_DIR/templates/os-eo/collections.json is the collections template
默认模板针对 default PostGIS database structure 并且可以被定制以包括在最终的数据库修改之后的新属性。
还可以提供特定于集合的模板,这些模板将包含该集合唯一的指令和映射。特定于集合的模板可以放在与上面相同的模板目录中,称为 collections-<COLLECTION_ID>.json
或 products-<COLLECTION_ID>.json
哪里 <COLLECTION_ID>
集合标识符。例如,如果集合的名称为 SENTINEL2
特定于它的产品模板将被命名为 products-SENTINEL2.json
,而集合模板将命名为 collections-SENTINEL2.json
。
有关编写模板的更多信息,请参阅 templates guide 。