JAVA-自动发布GeoServer图层,样式等

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);
}

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答您的问题。首先需要了解一下GeoServer的架构和工作原理,以及shapefile图层的相关知识。 GeoServer是一个基于Java的开源地理信息系统软件,它可以将地理空间数据发布为Web服务。它的工作原理是将地理空间数据存储在数据库中,然后将数据通过WMS、WFS等协议发布为Web服务。 shapefile是一种常见的地理信息数据格式,它由三个文件组成:.shp、.dbf和.shx文件。其中.shp文件包含了地理要素的几何形状信息,.dbf文件包含了地理要素的属性信息,.shx文件是用来提高访问速度的索引文件。 为了自动发布shapefile图层,可以考虑编写一个插件来实现。具体步骤如下: 1. 创建一个新的GeoServer插件项目,并添加依赖项。 2. 实现一个自定义的发布工具,用来将shapefile文件上传到GeoServer中,并创建对应的图层。 3. 实现一个自定义的数据存储,用来管理shapefile图层的数据。 4. 实现一个自定义的样式管理器,用来管理shapefile图层样式。 5. 扩展GeoServer的REST API,以便我们能够在UI中访问我们的自定义插件。 6. 编写一些测试用例,确保我们的插件能够正常工作。 以上是大致的步骤,具体实现方法需要根据您的需求进行调整。如果您需要更详细的信息,可以参考GeoServer官方文档中的扩展开发部分,或者在CSDN上搜索相关的教程和例子。 希望能对您有所帮助,如果您还有其他问题,可以随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值