Geoserver在创建时动态设置数据存储区/图层的边界框/ referencedEnvelope

时间:2016-06-08 11:25:31

标签: java geoserver

我正在使用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类中的数据存储区/层定义边界框。到目前为止,我在创建数据存储区时找不到任何定义方法。

提前致谢

1 个答案:

答案 0 :(得分:0)

我找到了答案。我换了两节课。第一个是xxxFeatureSource,它扩展了ContentFeatureSource(它位于ContentDataStore插件中),第二个是DataStoreFileResource

xxxFeatureSource中,我覆盖了ReferencedEnvelope getBoundsInternal()方法并实现了计算我的boundingBox的代码。

DataStoreFileResource我添加了这一行;

ftInfo.setLatLonBoundingBox( bounds );

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

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

希望它也有助于其他人。