基于开源geoserver-manager发布自定义的数据源和图层(java)
调用方法:
String zookeeper="node111:2181,node112:2181,node113:2181";
GeoServerUtil.createWorkspace("hsg");
GeoServerUtil.publisher.removeWorkspace("hsg",true);
GeoServerUtil.removeDatastore("geowave","out_tk_1_2");
GeoServerUtil.createSproutDatastore("geowave","out_tk_1_2",zookeeper,"out_tk_1_2",true);
GeoServerUtil.publisher.publishLayer_sprout("geowave","out_tk_1_2","out_tk_1_2","EPSG:4326","DistributedRender-Polygon");
GeoServerUtil.createSproutDatastore("geowave","hsg_tk12",zookeeper,"hsg_tk12",false);
GeoServerUtil.publisher.publishLayer_sprout("geowave","hsg_tk12","hsg_tk12","EPSG:4326","DistributedRender-Polygon");
System.out.println("OK!");
扩展开源geoserver-manager项目的数据源定义:
it.geosolutions.geoserver.rest.encoder.datastore.
GSSproutDatastoreEncoder.java
package it.geosolutions.geoserver.rest.encoder.datastore;
import it.geosolutions.geoserver.rest.decoder.RESTDataStore;
import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils;
public class GSSproutDatastoreEncoder extends GSAbstractDatastoreEncoder {
static final String TYPE = "SproutDataStore";
final static boolean DEFAULT_ENABLED = true;
static final String zookeeper = "node111:2181,node112:2181,node113:2181";
static final String gwNamespace = "out_tk_1_2";
static final boolean IsSpark = false;
public GSSproutDatastoreEncoder(String name) {
super(name);
// Set mandatory parameter
setType(TYPE);
setEnabled(DEFAULT_ENABLED);
//
setZookeeper(zookeeper);
setNamespace(gwNamespace);
setIsSpark(IsSpark);
}
public GSSproutDatastoreEncoder(RESTDataStore store) {
super(store);
// Check mandatory parameter validity
ensureValidZookeeper(store.getConnectionParameters().get("zookeeper"));
ensureValidNamespace(store.getConnectionParameters().get("gwNamespace"));
}
protected String getValidType() {
return TYPE;
}
//
public void setZookeeper(String zookeeper) {
ensureValidZookeeper(zookeeper);
connectionParameters.set("zookeeper", zookeeper);
}
public void setNamespace(String gwNamespace) {
ensureValidNamespace(gwNamespace);
connectionParameters.set("gwNamespace", gwNamespace);
}
public void setIsSpark(boolean IsSpark) {
connectionParameters.set("IsSpark", Boolean.toString(IsSpark));
}
//
public String getZookeeper() {
return ElementUtils.contains(connectionParameters.getRoot(), "zookeeper").getTextTrim();
}
public String getNamespace() {
return ElementUtils.contains(connectionParameters.getRoot(), "gwNamespace").getTextTrim();
}
public boolean getIsSpark() {
return Boolean.parseBoolean(ElementUtils.contains(connectionParameters.getRoot(), "IsSpark").getTextTrim());
}
//
private static void ensureValidZookeeper(String Zookeeper) {
if (Zookeeper == null || Zookeeper.length() == 0) {
throw new IllegalArgumentException(
"Zookeeper cannot be null or empty");
}
}
private static void ensureValidNamespace(String gwNamespace) {
if (gwNamespace == null || gwNamespace.length() == 0) {
throw new IllegalArgumentException(
"gwNamespace cannot be null or empty");
}
}
}
在
it.geosolutions.geoserver.rest.
GeoServerRESTPublisher类中添加如下方法:
//创建自定义的数据源
public boolean createSproutDatastore(String workspace,
GSSproutDatastoreEncoder datastoreEncoder) {
String sUrl = restURL + "/rest/workspaces/" + workspace + "/datastores/";
String xml = datastoreEncoder.toString();
String result = HTTPUtils.postXml(sUrl, xml, gsuser, gspass);
return result != null;
}
public boolean publishLayer_sprout(String workspace, String storename, String layername, String srs,
String defaultStyle) {
final GSFeatureTypeEncoder fte = new GSFeatureTypeEncoder();
fte.setProjectionPolicy(ProjectionPolicy.FORCE_DECLARED);
fte.addKeyword("features");
fte.setTitle(layername);
fte.setName(layername);
fte.setSRS(srs); // srs=null?"EPSG:4326":srs);
final GSLayerEncoder layerEncoder = new GSLayerEncoder();
layerEncoder.setDefaultStyle(defaultStyle);
return publishDBLayer(workspace, storename, fte, layerEncoder);
}