Geoserver 在创建时动态设置 datastore/layer 的边界框/referencedEnvelope

Geoserver dynamically set bounding box / referencedEnvelope of datastore/layer when creating

我正在使用 geoserver。我扩展了 ContentDataStore 插件以将 csv 数据类型添加为图层。我实际上正在使用 geoserver rest apiHTTPUtils.put 方法。当我这样做时,创建数据存储时没有定义边界框,这与在 geoserver web application 上手动创建时不同。因此,当我尝试使用 wms-getCapabilities 方法时出现异常,因为没有定义边界框。

The getCapabilities query is below:
localhost:8090/geoserver/wms?Service=WMS&Version=1.1.1&Request=GetCapabilities

The inner exception is below:
Caused by: java.lang.NullPointerException
    at org.geoserver.wms.capabilities.GetCapabilitiesTransformer$CapabilitiesTranslator.handleLatLonBBox(GetCapabilitiesTransformer.java:1349)
    at org.geoserver.wms.capabilities.GetCapabilitiesTransformer$CapabilitiesTranslator.handleLayer(GetCapabilitiesTransformer.java:901)
    at org.geoserver.wms.capabilities.GetCapabilitiesTransformer$CapabilitiesTranslator.handleLayerTree(GetCapabilitiesTransformer.java:826)
    ... 90 more

有没有办法为 xxxDataStore or xxxDataStoreFactory 类 中的 datastore/layer 定义边界框。到目前为止,我在创建数据存储区时找不到任何定义方法。

提前致谢

我找到了答案。我改了2类。第一个是 xxxFeatureSource 扩展 ContentFeatureSource (它在 ContentDataStore 插件中),第二个是 DataStoreFileResource.

xxxFeatureSource 中,我重写了 ReferencedEnvelope getBoundsInternal() 方法并实现了计算边界框的代码。

DataStoreFileResource中我添加了这一行;

ftInfo.setLatLonBoundingBox( bounds );

进入 void handlePut() 方法,就在 ftInfo.setNativeBoundingBox( bounds ).

之后

现在我可以在通过 GeoServer rest 添加我的 DataStore 后使用 getCapabilities 方法 api。

希望对其他人也有帮助。