使用geoserver-manager发布服务

一 下载 geoserver-manager

  1. 在<repositorys>标签中添加仓库地址,用于下载包到本地仓库
 <repository>
      <id>GeoSolutions</id>
      <url>http://maven.geo-solutions.it/</url>
 </repository>
  1. 在<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;
    }

}

注:补充样式\color{red}{(SLD)},要服务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>

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容