首页 > 编程知识 正文

webservice接口调用,autojs源码提取教程

时间:2023-05-06 00:54:08 阅读:165341 作者:2774

虽然可以通过控制台手动发布Geoserver提供的许多服务,但如何在程序中使用代码发布服务? 有两种思路:一种是在后台通过请求rest接口公开,另一种是在前端通过ajax公开。 另一种是xml格式,详见本文,简要介绍GeoServer服务器的内部文件组织和GeoServer自动化服务发布工具的开发思路。 本文主要介绍第一种方法(java语言)如何公开,进入正题。

效果图

1、postgis数据

2 .形状文件数据

一. maven中结构

要在Java内部版本中请求,必须具有地理服务器-管理器类库(api文档)

1、添加依赖

地理解决方案

http://maven.geo-solutions.it/

it.geosolutions

地理服务器管理器

1.7.0

二、几个重要对象

GeoServerRESTManager此对象是最大的管理员,可以检索以下两个对象来创建数据存储区

GeoServerRESTPublisher,发布各种数据并发布用于创建工作区的对象。 主要用于创建对象

获取GeoServerRESTReader、数据存储、图层、样式、图层组等。 主要用于获取信息。

二、demo样本(公开postgis数据和shapfile数据) )。

package com.hpu.geoserver;

import it.geo solutions.geoserver.rest.geoserverrestmanager;

import it.geo solutions.geoserver.rest.geoserverrestpublisher;

import it.geo solutions.geoserver.rest.decoder.rest datastore;

import it.geo solutions.geoserver.rest.decoder.rest layer;

import it.geo solutions.geoserver.rest.encoder.gslayerencoder;

import it.geo solutions.geoserver.rest.encoder.datastore.gspostgisdatastoreencoder;

import it.geo solutions.geoserver.rest.encoder.datastore.gsshapefiledatastoreencoder;

import it.geo solutions.geoserver.rest.encoder.feature.gsfeaturetypeencoder;

import it.geo solutions.geoserver.rest.encoder.coverage.gscoverageencoder;

import java.io.File;

import java.io.IOException;

import Java.net.malformedurlexception;

import java.net.URL;

import java.util.List;

公共类地理服务器位置{

publicstaticvoidmain (string [ ] args ) throws IOException {。

//GeoServer连接配置

string URL=' http://localhost :8080/geoserver ';

String username='admin ';

字符串密码=' geoserver ';

//geoserverpublishpostgisdata (URL,username,passwd );

geoserverpublishshapefiledata (URL,username,passwd );

}

公开postgis的数据

publicstaticvoidgeoserverpublishpostgisdata (string URL,String username,String passwd ) throws IOException{

//postgis连接配置

String postgisHost='localhost ';

int postgisPort=5432; //端口号

String postgisUser='postgres '; //用户名

斯汀

postgisPassword = "postgres" ;//用户密码

String postgisDatabase = "sqlView" ;//数据库名称

String ws = "testNew" ; //待创建和发布图层的工作区名称workspace

String store_name = "testGeoserver" ; //待创建和发布图层的数据存储名称store

String table_name = "roa_4m" ; // 数据库要发布的表名称,后面图层名称和表名保持一致

//判断工作区(workspace)是否存在,不存在则创建

URL u = new URL(url);

GeoServerRESTManager manager = new GeoServerRESTManager(u, username, passwd);

GeoServerRESTPublisher publisher = manager.getPublisher() ;

List workspaces = manager.getReader().getWorkspaceNames();

if(!workspaces.contains(ws)){

boolean createws = publisher.createWorkspace(ws);

System.out.println("create ws : " + createws);

}else {

System.out.println("workspace已经存在了,ws :" + ws);

}

//判断数据存储(datastore)是否已经存在,不存在则创建

RESTDataStore restStore = manager.getReader().getDatastore(ws, store_name);

if(restStore == null){

GSPostGISDatastoreEncoder store = new GSPostGISDatastoreEncoder(store_name);

store.setHost(postgisHost);//设置url

store.setPort(postgisPort);//设置端口

store.setUser(postgisUser);// 数据库的用户名

store.setPassword(postgisPassword);// 数据库的密码

store.setDatabase(postgisDatabase);// 那个数据库;

store.setSchema("public"); //当前先默认使用public这个schema

store.setConnectionTimeout(20);// 超时设置

//store.setName(schema);

store.setMaxConnections(20); // 最大连接数

store.setMinConnections(1); // 最小连接数

store.setExposePrimaryKeys(true);

boolean createStore = manager.getStoreManager().create(ws, store);

System.out.println("create store : " + createStore);

} else {

System.out.println("数据存储已经存在了,store:" + store_name);

}

//判断图层是否已经存在,不存在则创建并发布

RESTLayer layer = manager.getReader()..getLayer(ws, table_name);

if(layer == null){

GSFeatureTypeEncoder pds = new GSFeatureTypeEncoder();

pds.setTitle(table_name);

pds.setName(table_name);

pds.setSRS("EPSG:4326");

GSLayerEncoder layerEncoder = new GSLayerEncoder();

boolean publish = manager.getPublisher().publishDBLayer(ws, store_name, pds, layerEncoder);

System.out.println("publish : " + publish);

}else {

System.out.println("表已经发布过了,table:" + table_name);

}

}

//发布shapefile数据

public static void GeoserverPublishShapefileData(String url,String username,String passwd) throws IOException{

String ws = "testshape" ; //待创建和发布图层的工作区名称workspace

String store_name = "testShapeStore" ; //待创建和发布图层的数据存储名称store

String srs="EPSG:4326";

//压缩文件的完整路径

File zipFile=new File("D:/软件安装/geoserver/GeoServer 2.14.0/data_dir/data/shapefiles/states.zip");

String layername="states";//图层名称

//shp文件所在的位置

String urlDatastore="file:data/shapefiles/states.shp";

//判断工作区(workspace)是否存在,不存在则创建

URL u = new URL(url);

//获取管理对象

GeoServerRESTManager manager = new GeoServerRESTManager(u, username, passwd);

//获取发布对象

GeoServerRESTPublisher publisher = manager.getPublisher() ;

//获取所有的工作空间名称

List workspaces = manager.getReader().getWorkspaceNames();

//判断工作空间是否存在

if(!workspaces.contains(ws)){

//创建一个新的存储空间

boolean createws = publisher.createWorkspace(ws);

System.out.println("create ws : " + createws);

}else {

System.out.println("workspace已经存在了,ws :" + ws);

}

//判断数据存储(datastore)是否已经存在,不存在则创建

URL urlShapefile = new URL(urlDatastore);

RESTDataStore restStore = manager.getReader().getDatastore(ws, store_name);

if(restStore == null){

//创建shape文件存储

GSShapefileDatastoreEncoder store = new GSShapefileDatastoreEncoder(store_name, urlShapefile);

boolean createStore = manager.getStoreManager().create(ws, store);

System.out.println("create store : " + createStore);

} else {

System.out.println("数据存储已经存在了,store:" + store_name);

}

//判断图层是否已经存在,不存在则创建并发布

RESTLayer layer = manager.getReader().getLayer(ws, layername);

if(layer == null){

//发布图层

boolean publish = manager.getPublisher().publishShp(ws, store_name, layername, zipFile, srs);

System.out.println("publish : " + publish);

}else {

System.out.println("表已经发布过了,table:" + store_name);

}

}

}

三、踩的一些坑

1、首先类似于String store_name = "testGeoserver"写成String store_name = "testGeoserver "会报错在geoserver控制台中会报安全错误,空格被解析成分号(;)

2、在发布shapefile时候创建shapefile存储空间路径前面要加“file://”,最方便的方式如下图,直接新建一个数据源在浏览中找到shape文件所在路径位置,直接复制就好

3、这里的压缩文件只能为zip格式,不能是rar格式否则会报错

4、压缩文件的路径为全路径

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。