- 在<repositorys>标签中添加仓库地址,用于下载包到本地仓库
<repository>
<id>GeoSolutions</id>
<url>http://maven.geo-solutions.it/</url>
</repository>
- 在<dependencies>引入依赖包
<dependency>
<groupId>it.geosolutions</groupId>
<artifactId>geoserver-manager</artifactId>
<version>1.7.0</version>
</dependency>
二 连接postGIS发布服务
/**
* geoserver 工具
*/
public class GeoServerUtils {
final String geoserverUrl = "http://localhost:8081/geoserver";
final String geoserverUsername = "admin";
final String geoserverPassword = "geoserver";
GeoServerRESTPublisher publisher= null;
GeoServerRESTReader reader= null;
GeoServerRESTManager manager = null;
{
try {
publisher= new GeoServerRESTPublisher(geoserverUrl, geoserverUsername, geoserverPassword);
reader= new GeoServerRESTReader(geoserverUrl, geoserverUsername, geoserverPassword);
manager = new GeoServerRESTManager(new URL(geoserverUrl), geoserverUsername, geoserverPassword);
}catch (Exception e){
e.printStackTrace();
}
}
//创建工作空间
public boolean createWorkspace(String workspaceName){
try {
if (!reader.existsWorkspace(workspaceName)){ //判断是否存在工作空间,如果不存在则创建
publisher.createWorkspace(workspaceName);
}
return true;
}catch (Exception e){
e.printStackTrace();
return false;
}
}
//创建样式
public boolean createLayerStyle(String workspaceName,String sldFilePath){
//设置样式
boolean existsStyle = reader.existsStyle("devPolygon1"); //判断该样式是否存在,如果不存在则创建
String styleName = null;
if (!existsStyle){
//String sldFilePath = "D:\\data222\\style\\devPolygon333.xml";
File sldFile = new File(sldFilePath);
String[] split = sldFile.getName().split(".xml");
styleName = split[0];
boolean createStyle = publisher.publishStyleInWorkspace(workspaceName,sldFile,styleName);
if (createStyle){
System.out.println("创建成功");
}else {
System.out.println("创建失败");
}
return createStyle;
}else {
System.out.println("样式已存在");
return false;
}
}
//创建数据源
public boolean createPostGISDataStore(String workspaceName,String dataStoreName){
try {
GSPostGISDatastoreEncoder postgis = new GSPostGISDatastoreEncoder(dataStoreName);
postgis.setHost("127.0.0.1");
postgis.setPort(5432);
postgis.setUser("postgres");
postgis.setPassword("root0110");
postgis.setDatabase("common"); //数据库名称
postgis.setExposePrimaryKeys(true);
boolean result = manager.getStoreManager().create(workspaceName, postgis);
return result;
}catch (Exception e){
e.printStackTrace();
return false;
}
}
/**
* 发布图层
* @param workspaceName 工作空间名称
* @param dataStoreName 数据源名称
* @param styleName 样式名称
* @param tableName 数据源中表名称
* @param layerName 发布图层名称
* @param layerAlias 发布图层别名
* @param crsCode 发布图层坐标系代码
* @return
* @throws ErrorException
*/
public boolean publisherLayer(String workspaceName,String dataStoreName,String styleName, String tableName,String layerName, String layerAlias, int crsCode) throws ErrorException {
if (!reader.existsWorkspace(workspaceName)){
throw new ErrorException(String.format("工作区:%s 不存在", workspaceName));
}
if (!reader.existsStyle(workspaceName,styleName)){
throw new ErrorException(String.format("在工作区: %s 中, %s 服务样式不存在"+ workspaceName,styleName));
}
if (!reader.existsDatastore(workspaceName,dataStoreName)){
throw new ErrorException(String.format("在工作区: %s 中, %s 数据源不存在"+ workspaceName,dataStoreName));
}
//图层设置
GSFeatureTypeEncoder gsFeatureTypeEncoder = new GSFeatureTypeEncoder();
gsFeatureTypeEncoder.setNativeName(tableName); //表名
gsFeatureTypeEncoder.setName(layerName); // 图层名称
gsFeatureTypeEncoder.setTitle(layerAlias);// 图层别名
gsFeatureTypeEncoder.setSRS("EPSG:" + crsCode); //坐标系
GSLayerEncoder styleEncoder = new GSLayerEncoder(); //设置样式
styleEncoder.setDefaultStyle(workspaceName,styleName);
boolean publishDBLayerResult = publisher.publishDBLayer(workspaceName, dataStoreName, gsFeatureTypeEncoder, styleEncoder);
return publishDBLayerResult;
}
}
注:补充样式
,要服务OGC标准。
<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor version="1.0.0"
xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
xmlns="http://www.opengis.net/sld"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NamedLayer>
<Name>testStyleName</Name>
<UserStyle>
<Title>testStyleName</Title>
<Abstract>testStyleName style</Abstract>
<FeatureTypeStyle>
<!--配置该样式对应的属性-->
<Rule>
<!--该样式针对的是面-->
<Name>Polygon</Name>
<Title>Red Polygon</Title>
<ogc:Filter>
<ogc:And>
<ogc:PropertyIsEqualTo>
<ogc:Function name="dimension">
<ogc:Function name="geometry"/>
</ogc:Function>
<ogc:Literal>2</ogc:Literal>
</ogc:PropertyIsEqualTo>
<ogc:PropertyIsEqualTo>
<!--过滤的属性字段-->
<ogc:PropertyName>address</ogc:PropertyName>
<!--属性字段对应的值-->
<ogc:Literal>BeiJing</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:And>
</ogc:Filter>
<!--标注样式设置-->
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#0000ff</CssParameter>
<CssParameter name="fill-opacity">0</CssParameter>
</Fill>
<Stroke>
<CssParameter name="stroke">#0000ff</CssParameter>
<CssParameter name="stroke-width">1</CssParameter>
</Stroke>
</PolygonSymbolizer>
<TextSymbolizer>
<Label>
<!--标注显示的属性字段-->
<ogc:PropertyName>XZQNAME</ogc:PropertyName>
</Label>
<Font>
<CssParameter name="font-family">Times new roman</CssParameter>
<CssParameter name="font-size">10</CssParameter>
<CssParameter name="font-style">normal</CssParameter>
</Font>
<LabelPlacement>
<PointPlacement>
<AnchorPoint>
<AnchorPointX>0.5</AnchorPointX>
<AnchorPointY>0.5</AnchorPointY>
</AnchorPoint>
</PointPlacement>
</LabelPlacement>
<Fill>
<CssParameter name="fill">#0000ff</CssParameter>
</Fill>
</TextSymbolizer>
</Rule>
<VendorOption name="ruleEvaluation">first</VendorOption>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>