java将shp文件发布为geoserver服务

1、引入geoserver依赖

        <!--geoserver依赖-->
        <dependency>
            <groupId>nl.pdok</groupId>
            <artifactId>geoserver-manager</artifactId>
            <version>1.7.0-pdok2</version>
        </dependency>

2、思路
(1)创建geoserver连接对象
(2)创建工作区,有则不创建
(3)创建数据源和发布图层服务

3、代码

/**
     * 将shapefile文件发布为geoserver服务
     *
     * @return
     */
    public boolean publishShp(){
        String url = "http://192.168.10.190:8080/geoserver";    //geoserver的地址
        String un = "admin";         //geoserver的账号
        String pw = "geoserver";     //geoserver的密码

        String workspace = "shapefile";     //工作区名称
        String storename = "posttt";     //数据源名称
        String layername = "temp";     //发布的图层名称,此名称必须和压缩包的名称一致

        //shp文件压缩包,必须是zip压缩包,且shp文件(.shp、.dbf、.shx等)外层不能有文件夹,且压缩包名称需要与shp图层名称一致
        String zipFilePath = "D:\\data\\shapefile\\1125shpfile\\temp.zip";

        try {
            //  1、获取geoserver连接对象
            GeoServerRESTManager manager = null;

            try {
                manager = new GeoServerRESTManager(new URL(url) , un , pw);
                System.out.println("连接geoserver服务器成功");
            }catch (Exception e){
                e.printStackTrace();
                System.out.println("geoserver服务器连接失败");
                return false;
            }

            GeoServerRESTReader reader = manager.getReader();
            GeoServerRESTPublisher publisher = manager.getPublisher();
            GeoServerRESTStoreManager storeManager = manager.getStoreManager();

            //  2、判断是否有工作区,没有则创建
            boolean b2 = reader.existsWorkspace(workspace);
            if(!b2){
                boolean b = publisher.createWorkspace(workspace);
                if(!b){
                    System.out.println("工作区创建失败");
                    return false;
                }
            }

            //  3、判断是否有数据源,没有则创建
            //  4、发布图层,如果存在就不发布
            //  创建数据源 和 发布图层服务可以一步进行
            RESTDataStore datastore = reader.getDatastore(workspace, storename);
            RESTLayer layer = reader.getLayer(workspace, layername);
            if(layer==null && datastore==null){
                File file = new File(zipFilePath);
                // 进行发布;参数依次为:工作区名称、数据源名称、图层名称、shp文件压缩文件对象、坐标系
                boolean b = publisher.publishShp(workspace , storename , layername , file , "EPSG:4326");
                if(!b){
                    System.out.println("shp图层发布失败");
                    return false;
                }
            }

            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
你可以使用 GeoTools 库来实现将 SHP 文件发布为 GeoJSON 格式的服务。下面是一个示例代码: ```java import org.geoserver.catalog.Catalog; import org.geoserver.catalog.CoverageStoreInfo; import org.geoserver.catalog.DataStoreInfo; import org.geoserver.catalog.FeatureTypeInfo; import org.geoserver.catalog.NamespaceInfo; import org.geoserver.catalog.StoreInfo; import org.geoserver.catalog.WorkspaceInfo; import org.geoserver.catalog.impl.CatalogImpl; import org.geoserver.data.util.IOUtils; import org.geoserver.platform.GeoServerExtensions; import org.geoserver.wfs.WFSServiceImpl; import org.geotools.data.DataStore; import org.geotools.data.DataStoreFinder; import org.geotools.data.FeatureSource; import org.geotools.data.FeatureStore; import org.geotools.data.Transaction; import org.geotools.data.simple.SimpleFeatureCollection; import org.geotools.data.simple.SimpleFeatureSource; import org.geotools.data.simple.SimpleFeatureStore; import org.geotools.feature.FeatureCollection; import org.geotools.geojson.feature.FeatureJSON; import org.geotools.geometry.jts.ReferencedEnvelope; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.opengis.feature.Property; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.filter.Filter; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.HashMap; import java.util.Map; @RestController @RequestMapping("/geojson") public class GeoJSONController { private Catalog catalog; public GeoJSONController() { this.catalog = new CatalogImpl(); } @RequestMapping(value = "/{workspace}/{datastore}/{layer}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<String> getGeoJSON(@PathVariable("workspace") String workspaceName, @PathVariable("datastore") String datastoreName, @PathVariable("layer") String layerName, HttpServletRequest request) { try { WorkspaceInfo workspace = catalog.getWorkspaceByName(workspaceName); DataStoreInfo dataStore = catalog.getDataStoreByName(datastoreName, workspace); FeatureTypeInfo featureType = catalog.getFeatureTypeByName(workspaceName, layerName); DataStore datastore = DataStoreFinder.getDataStore(dataStore.getConnectionParameters()); SimpleFeatureSource featureSource = datastore.getFeatureSource(featureType.getName()); FeatureCollection<SimpleFeatureType, SimpleFeature> collection = featureSource.getFeatures(); SimpleFeatureCollection features = (SimpleFeatureCollection) collection; // Convert SimpleFeatureCollection to GeoJSON FeatureJSON featureJSON = new FeatureJSON(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); featureJSON.writeFeatureCollection(features, outputStream); return ResponseEntity.ok(outputStream.toString()); } catch (Exception e) { return ResponseEntity.status(500).body("Error: " + e.getMessage()); } } } ``` 在此代码中,我们首先获取了指定的工作空间、数据存储和要素类型。然后,我们使用 `DataStoreFinder` 类创建一个 `DataStore` 实例,并从中获取要素源。接下来,我们使用 GeoTools 库的 `FeatureJSON` 类将 `SimpleFeatureCollection` 转换为 GeoJSON 字符串,并返回该字符串作为响应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值