2016-06-08 1 views
0

geoserver을 사용 중입니다. CSV 데이터 유형을 레이어로 추가하기 위해 ContentDataStore 플러그인을 확장했습니다. 실제로 geoserver rest api, HTTPUtils.put 메서드를 사용하고 있습니다. 이 작업을 수행하면 geoserver web application에서 수동으로 생성 된 것과 달리 데이터 저장소가 boundingbox없이 정의됩니다. 따라서 정의 된 boundingbox가 없으므로 wms-getCapabilities 메서드를 사용하려고하면 예외가 발생합니다.Geoserver는 생성시 데이터 저장소/레이어의 경계 상자/referencedEnvelope를 동적으로 설정합니다.

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 클래스의 데이터 저장소/계층에 대한 BoundingBox의를 정의하는 방법이있다. 지금까지 데이터 저장소를 만드는 동안 정의 할 수있는 방법을 찾지 못했습니다.

미리 감사드립니다.

답변

0

답변을 찾았습니다. 나는 2 개의 과목을 바꿨다. 첫 번째 것은 xxxFeatureSource이며 (ContentDataStore 플러그인에 있음)이고 두 번째 것은 DataStoreFileResource입니다.

xxxFeatureSource에서 ReferencedEnvelope getBoundsInternal() 메서드를 오버라이드하고 내 boundingBox를 계산하는 코드를 구현했습니다.

DataStoreFileResource이 줄을 추가했습니다. 오른쪽 ftInfo.setNativeBoundingBox(bounds) 후 공극 handlePut() 방법으로

ftInfo.setLatLonBoundingBox(bounds); 

.

이제 GeoServer 나머지 API를 통해 데이터 저장소를 추가 한 후에 getCapabilities 메소드를 사용할 수 있습니다.

다른 사람들에게도 도움이되기를 바랍니다.

관련 문제