workspaces = manager.getReader().getWorkspaceNames();
+ if (!workspaces.contains(workspace)) {
+ boolean createWorkspace = publisher.createWorkspace(workspace);
+ logger.info("create workspace : " + createWorkspace);
+ return createWorkspace;
+ } else {
+ logger.info("workspace已经存在了,workspace :" + workspace);
+ return true;
+ }
+ }catch (MalformedURLException e) {
+ e.printStackTrace();
+ }
+ return false;
+ }
+
+ /**
+ * 判断存储是否存在
+ * @param store 存储名
+ * @return boolean
+ */
+ public static boolean shpJudgeDatabase(String store) {
+ try {
+ URL u = new URL(url);
+ GeoServerRESTManager manager = new GeoServerRESTManager(u, geoUsername, geoPassword);
+ GeoServerRESTPublisher publisher = manager.getPublisher();
+ RESTDataStore restStore = manager.getReader().getDatastore(shpWorkspace, store);
+ if (restStore == null) {
+ logger.info("数据存储不存在,可以创建!");
+ return true;
+ } else {
+ logger.info("数据存储已经存在了,store:" + store);
+ }
+
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ }
+ return false;
+ }
+
+
+ /**
+ * 方法一
+ * 直接发布shp文件到geoServer
+ * 将shp.zip通过http传递过去
+ * 不主动设置样式和编码
+ *
+ *
+ * @param fileUrl 本地文件地址 zip格式
+ * @param geocode 地理编码
+ * @return boolean
+ */
+ public static boolean releaseShpByHttp(String fileUrl, String geocode) {
+ try {
+ File zipFile = new File(fileUrl);
+ //存储名/图层名
+// String storeName = FileUtil.getFileNameNoEx(zipFile.getName());
+ String storeName = zipFile.getName();
+ GeoServerRESTReader reader = new GeoServerRESTReader(url, geoUsername, geoPassword);
+ GeoServerRESTPublisher publisher = new GeoServerRESTPublisher(url, geoUsername, geoPassword);
+
+ RESTLayer layer = reader.getLayer(shpWorkspace, storeName);
+ if (layer == null) {
+ if (publisher.publishShp(shpWorkspace, storeName, storeName, zipFile, geocode)) {
+ logger.info("图层发布成功:" + storeName);
+ return true;
+ } else {
+ logger.info("图层发布失败:" + storeName);
+ }
+ } else {
+ logger.info("图层已经发布过了:" + storeName);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ logger.error(e.getMessage());
+ }
+ return false;
+
+ }
+
+
+ /**
+ * 方法二
+ * 向geoServer上传shp,并设置存储、图层名、样式和坐标系
+ *
+ * @param zipFilePath 压缩文件夹位置 完整文件地址
+ * @param storeName 存储、图层名 英文
+ * @param styleType 图层样式 shp工作空间下的对应样式
+ * @param coordinateSystem 坐标系 EPSG:4326
+ * @return boolean
+ */
+ public boolean publishShp(String zipFilePath, String storeName, String styleType, String coordinateSystem) {
+ if (coordinateSystem == null) {
+ coordinateSystem = GeoServerRESTPublisher.DEFAULT_CRS;
+ }
+ try {
+ //创建发布类,放入用户名密码和url
+ GeoServerRESTPublisher geoServerRESTPublisher = new GeoServerRESTPublisher(url, geoUsername, geoPassword);
+ boolean b = geoServerRESTPublisher.publishShp(shpWorkspace, storeName,
+ new NameValuePair[]{new NameValuePair("charset", "GBK")},
+ //图层名称 指定用于发布资源的方法
+ storeName, GeoServerRESTPublisher.UploadMethod.FILE,
+ //zip图集的地址,直接压缩不要文件夹 坐标系 样式
+ new File(zipFilePath).toURI(), coordinateSystem, styleType);
+ if (b) {
+ return true;
+ }
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+
+ return false;
+ }
+
+
+ /**
+ * 判断图层是否已经存在,不存在则创建并发布
+ * @param workspace 工作区
+ * @param storeName 数据存储
+ * @param tableName 表名
+ * @param spaceType 坐标系 EPSG:4326
+ */
+ public Boolean addLayer(String workspace,String storeName,String tableName,String style,String spaceType){
+ if(workspace == null){
+ workspace = shpWorkspace;
+ }
+ if(StringUtils.isEmpty(storeName)){
+ storeName = shpStorename;
+ }
+ try {
+ GeoServerRESTManager geoServerRESTManager = new GeoServerRESTManager(new URL(url), geoUsername, geoPassword);
+ GeoServerRESTPublisher geoServerRESTPublisher = geoServerRESTManager.getPublisher();
+ GeoServerRESTReader geoServerRESTReader=geoServerRESTManager.getReader();
+ RESTDataStore restStore =geoServerRESTReader.getDatastore(shpWorkspace, storeName);
+ if (restStore == null) {
+ GSPostGISDatastoreEncoder store = new GSPostGISDatastoreEncoder(storeName);
+ store.setHost("localhost");
+ store.setPort(5432);
+ store.setUser("postgres");
+ store.setPassword("123456");
+ store.setDatabase("postgres");
+ store.setSchema("public");
+ store.setConnectionTimeout(300);
+ store.setMaxConnections(20);
+ store.setMinConnections(1);
+ store.setExposePrimaryKeys(true);
+ boolean isCreateStore = geoServerRESTManager.getStoreManager().create(shpWorkspace, store);
+ }
+ // URL u = new URL(url);
+ //GeoServerRESTManager manager = new GeoServerRESTManager(u, geoUsername, geoPassword);
+ RESTLayer layer = geoServerRESTReader.getLayer(shpWorkspace, tableName);
+ GSFeatureTypeEncoder pds = new GSFeatureTypeEncoder();
+ System.out.println(pds.toString());
+ pds.setTitle(tableName);
+ pds.setName(tableName);
+ pds.setSRS(spaceType);
+ pds.setDescription(tableName);
+ GSLayerEncoder layerEncoder = new GSLayerEncoder();
+ if (!StringUtils.isEmpty(style)){
+ layerEncoder.setDefaultStyle(shpWorkspace,style);
+ }
+ if(layer == null){//图层不存在
+ boolean b = geoServerRESTPublisher.unpublishFeatureType(shpWorkspace, storeName, tableName);
+ geoServerRESTPublisher.removeLayer(shpWorkspace,tableName);
+ boolean publish = geoServerRESTPublisher.publishDBLayer(shpWorkspace, storeName, pds, layerEncoder);
+ System.out.println("图层发布publish : " + publish);
+ return publish;
+ }else {
+
+ geoServerRESTPublisher.unpublishFeatureType(shpWorkspace, storeName, tableName);
+ geoServerRESTPublisher.removeLayer(shpWorkspace,tableName);
+ boolean publish = geoServerRESTPublisher.publishDBLayer(shpWorkspace, storeName, pds, layerEncoder);
+ System.out.println("图层发布publish : " + publish);
+ return publish;
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return false;
+ }
+
+ public Boolean removeLayer(String tableName) throws Exception{
+ GeoServerRESTManager geoServerRESTManager = new GeoServerRESTManager(new URL(url), geoUsername, geoPassword);
+ GeoServerRESTPublisher geoServerRESTPublisher = geoServerRESTManager.getPublisher();
+ geoServerRESTPublisher.unpublishFeatureType(shpWorkspace, shpStorename, tableName);
+ boolean b = geoServerRESTPublisher.removeLayer(shpWorkspace, tableName);
+ return b;
+ }
+
+ public Map getLayer( String tableName, String spaceType) throws Exception{
+ String[] split = spaceType.split(":");
+ // String substring = spaceType.substring(spaceType.length() - 4);
+ String rootUrl = url + "/gwc/service/tms/1.0.0/"+shpWorkspace+":"+tableName+"@EPSG:"+split[1]+"@";
+ String[] formats = {"pbf","utfgrid","png","jpeg","geojson","topojson"};
+ List