­

GeoServer-Manager應用:java編碼實現發布矢量數據或柵格數據至GeoServer

簡介與下載

GeoServer-Manager是使用Java編寫的面向GeoServer的客戶端庫,通過GeoServer的REST管理介面與GeoServer交互。提供了訪問GeoServer並管理(增刪改查)其中工作區、數據存儲、圖層、圖層組、樣式等的介面函數。
其為github上的開源項目,最近一次更新在五年前。
項目源碼: //github.com/geosolutions-it/geoserver-manager.
jar庫://maven.geo-solutions.it/it/geosolutions/geoserver-manager/1.7.0/geoserver-manager-1.7.0.jar

依賴

在maven項目的pom.xml中配置依賴。
依賴庫除了geoserver-manager以外,還需要geoserver-manager用到的一些外部依賴。

   <repositories>
        <repository>
            <id>GeoSolutions</id>
            <url>//maven.geo-solutions.it/</url>
        </repository>
    </repositories>
    
    <dependencies>
         <dependency>
            <groupId>it.geosolutions</groupId>
            <artifactId>geoserver-manager</artifactId>
            <version>1.7.0</version>
        </dependency>
        
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.30</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-nop</artifactId>
            <version>1.7.30</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.11</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
        </dependency>
        <dependency>
            <groupId>org.jdom</groupId>
            <artifactId>jdom</artifactId>
            <version>1.1.3</version>
        </dependency>
    </dependencies>

編碼發布矢量數據

此處以shp格式為例。

import it.geosolutions.geoserver.rest.GeoServerRESTManager;
import it.geosolutions.geoserver.rest.GeoServerRESTPublisher;
import it.geosolutions.geoserver.rest.decoder.RESTDataStore;
import it.geosolutions.geoserver.rest.encoder.datastore.GSShapefileDatastoreEncoder;

import java.io.File;
import java.net.URL;

public class shpTest {
    public static void main(String[] args) throws Exception {
        //GeoServer連接配置
        String url = "//localhost:8080/geoserver";
        String userName = "admin";
        String passWord = "geoserver";

        String workSpace = "test";     //創建的工作區名稱
        String storeName = "shpTest"; //創建的數據存儲名稱

        //與GeoServer連接,進行管理
        GeoServerRESTManager manager = new GeoServerRESTManager(new URL(url), userName, passWord);
        GeoServerRESTPublisher publisher = manager.getPublisher();
        //創建工作區
        boolean createWorkSpace = publisher.createWorkspace(workSpace);
        System.out.println("create ws " + createWorkSpace);
         
        //待發布shp數據路徑與矢量數據包路徑
        String filePath = "F:\\GeoServerDatabase\\Community\\Community.shp";
        String zipPath = "F:\\GeoServerDatabase\\Community\\Community.zip";

        //創建shp數據存儲
        GSShapefileDatastoreEncoder gsShapefileDatastoreEncoder= new GSShapefileDatastoreEncoder(storeName,new URL("file:" + filePath));
        boolean createStore = manager.getStoreManager().create(workSpace, gsShapefileDatastoreEncoder);
        System.out.println("create shp store " + createStore);

        //發布shp圖層(如果沒有目標數據存儲則會先自動創建該命名數據存儲再發布)
        boolean publish = manager.getPublisher().publishShp(workSpace, storeName, "Community",new File(zipPath));
        System.out.println("publish shp " + publish);

        //讀取目標矢量數據存儲
        //RESTDataStore restDataStore = manager.getReader().getDatastore(workSpace, storeName);
    }
}

編碼發布柵格數據

此處以GeoTiff格式為例。

import it.geosolutions.geoserver.rest.GeoServerRESTManager;
import it.geosolutions.geoserver.rest.GeoServerRESTPublisher;
import it.geosolutions.geoserver.rest.decoder.RESTCoverageStore;
import it.geosolutions.geoserver.rest.encoder.coverage.GSCoverageEncoder;
import static it.geosolutions.geoserver.rest.encoder.GSResourceEncoder.ProjectionPolicy.REPROJECT_TO_DECLARED;

import java.io.File;
import java.net.URL;

public class tiffTest {
    public static void main(String[] args) throws Exception {
        //GeoServer連接配置
        String url = "//localhost:8080/geoserver";
        String userName = "admin";
        String passWord = "geoserver";

        String workSpace = "test";     //創建的工作區名稱
        String storeName = "tiffTest"; //創建的數據存儲名稱

        //與GeoServer連接,進行管理
        GeoServerRESTManager manager = new GeoServerRESTManager(new URL(url), userName, passWord);
        GeoServerRESTPublisher publisher = manager.getPublisher();
        
        //創建工作區
        boolean createWorkSpace = publisher.createWorkspace(workSpace);
        System.out.println("create ws " + createWorkSpace);
        
        //初始化和構造柵格數據儲存
        String srs = "EPSG";//SRS空間參考系統 crs坐標參考系統
        GSCoverageEncoder gsCoverageEncoder = new GSCoverageEncoder();
        gsCoverageEncoder.setName("test");
        gsCoverageEncoder.setTitle("test");
        gsCoverageEncoder.setSRS(srs);
        gsCoverageEncoder.setNativeFormat("GeoTIFF");
        gsCoverageEncoder.addSupportedFormats("GEOTIFF");
        gsCoverageEncoder.addKeyword("geoTiff");
        gsCoverageEncoder.addKeyword("WCS");
        gsCoverageEncoder.setNativeCRS(srs);
        gsCoverageEncoder.setRequestSRS(srs);
        gsCoverageEncoder.setResponseSRS(srs);
        gsCoverageEncoder.setProjectionPolicy(REPROJECT_TO_DECLARED);
        gsCoverageEncoder.setLatLonBoundingBox(-180, -90, 180, 90, "EPSG:4326");
        //創建柵格數據存儲
        boolean createStore = manager.getPublisher().createCoverage(workSpace,storeName,gsCoverageEncoder);
        System.out.println("Coverage store " + createStore);
        
        //待發布GeoTIFF數據路徑
        String filePath = "F:\\GeoServerDatabase\\test.tif";
        //發布GeoTIFF(如果沒有目標數據存儲則會先自動創建該命名柵格數據存儲再發布)
        boolean publish = manager.getPublisher().publishGeoTIFF(workSpace, storeName,new File(filePath));
        System.out.println("publish Coverage " + publish);
        
        //讀取目標柵格數據存儲
        //RESTCoverageStore restCoverageStore = manager.getReader().getCoverageStore(workSpace, storeName);

    }
}