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