1.处理思路
2.文件数据
将DXF,GeoJSON,shape文件或调用接口生成数据表
参考: JAVA-GDAL,将SHP/GEOJSON/DXF转换成数据库数据(mysql, pgsql)
3.发布图层,样式等
引入Geoserver-Manager包,这个相对使用GeoserverAPI方便
<dependency>
<groupId>it.geosolutions</groupId>
<artifactId>geoserver-manager</artifactId>
<version>1.7.0</version>
</dependency>
简单代码示例
连接geoserver服务器
GeoServerRESTManager manager =
new GeoServerRESTManager(new URL(geoUrl), geoUserName, geoPassword);
建立工作空间
GeoServerRESTPublisher publisher = manager.getPublisher();
GeoServerRESTReader reader = manager.getReader();
if (!reader.existsWorkspace(wokeSpaceName)) {
publisher.createWorkspace(wokeSpaceName);
}
创建数据集
RESTDataStore restStore = manager.getReader().getDatastore(wsName, dbName);
if (restStore == null) {
GSPostGISDatastoreEncoder store = new GSPostGISDatastoreEncoder(dbName);
store.setDatabaseType(databaseType);
store.setHost(sqlHost);
store.setPort(sqlPort);
store.setUser(sqlUser);
store.setPassword(sqlPwd);
store.setDatabase(sqlDatabase);
store.setSchema(schema);
store.setConnectionTimeout(300);
store.setMaxConnections(20);
store.setMinConnections(1);
store.setExposePrimaryKeys(true);
manager.getStoreManager().create(wsName, store);
}
发布/更新图层
RESTLayer layer = geoServerRESTManager.getReader().getLayer(wsName, layerName);
GSFeatureTypeEncoder fte = new GSFeatureTypeEncoder();
fte.setTitle(titleName);
fte.setName(layerName);
fte.setSRS("EPSG:4326");
GSLayerEncoder layerEncoder = new GSLayerEncoder();
if (StringUtils.isNotBlank(styleId)) {
layerEncoder.setDefaultStyle("style_" + styleId);
} else {
layerEncoder.setDefaultStyle("generic");// 默认样式
}
if (layer != null) {
manager.getPublisher().configureLayer(wsName, layerName, layerEncoder);
} else {
manager.getPublisher().publishDBLayer(wsName, dbName, fte, layerEncoder);
}
发布/更新样式
引入pom依赖
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-geojson</artifactId>
<version>28.0</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-shapefile</artifactId>
<version>28.0</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-epsg-hsql</artifactId>
<version>28.0</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-xml</artifactId>
<version>28.0</version>
</dependency>
引入样式Factory
static StyleFactory styleFactory = CommonFactoryFinder.getStyleFactory();
static FilterFactory filterFactory = CommonFactoryFinder.getFilterFactory();
创建sld
SLDTransformer transformer = new SLDTransformer();
transformer.setEncoding(Charset.forName("GBK"));
FeatureTypeStyle fts = styleFactory.createFeatureTypeStyle();
for (LayerStyleDetail detail : details) {
//创建rule写入sld, 这里代码过多就省略不展示了
//fts.rules().add(rule);
}
Style style = styleFactory.createStyle();
style.setName("style_name");
style.featureTypeStyles().add(fts);
StyledLayerDescriptorImpl sld = new StyledLayerDescriptorImpl();
UserLayer userLayer = new UserLayerImpl();
userLayer.setUserStyles(new Style[]{style});
sld.addStyledLayer(userLayer);
String url = fileRoot + name + ".sld";
FileUtils.createFile(url);
File sldFile = FileUtils.getFile(url);
FileOutputStream outputStream = new FileOutputStream(sldFile);
transformer.transform(sld, outputStream);
outputStream.close();
发布更新
GeoServerRESTStyleManager styleManager = manager.getStyleManager();
if (styleManager.existsStyle(wsName, name)) {
return styleManager.updateStyleInWorkspace(wsName, sldFile, name);
} else {
return styleManager.publishStyleInWorkspace(wsName, sldFile, name);
}