springboot 发布 geoserver

955 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情

springboot 发布 geoserver

下载地址: geoserver.org/download/

image.png

image.png

下载以后解压

image.png

将war复制到tomcat文件夹下启动

image.png

用户名: admin 密码: geoserver

springboot + genserver

pom.xml

<dependency>
    <groupId>it.geosolutions</groupId>
    <artifactId>geoserver-manager</artifactId>
    <version>1.7.0</version>
</dependency>

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

<!-- 注意这里仓库需要指定 -->
<repositories>
    <repository>
        <id>GeoSolutions</id>
        <url>https://maven.geo-solutions.it/</url>
    </repository>
</repositories>

增加一个配置文件

geoserver:
  url: http://localhost:9090/geoserver
  username: admin
  password: geoserver
  workspacename: geoserver
  storename: geoserver

配置文件映射类

@Data
@Configuration
//@PropertySource(value ={"classpath:geoserver.yml"})
//@ConfigurationProperties(prefix = "geoserver")
public class GeoServerProperties {
   @Value("${geoserver.url}")
   private String url;
   @Value("${geoserver.username}")
   private String username;
   @Value("${geoserver.password}")
   private String password;

   @Value("${geoserver.workspacename}")
   private String workspaceName;
   @Value("${geoserver.storename}")
   private String storeName;

}

创建 geoserver bean

@Configuration
public class GeoServerConfig {
   @Autowired
   private GeoServerProperties geoServerProperties;
   @Bean
   public GeoServerRESTManager geoServerRESTManagerFactory() {
      try {
         return new GeoServerRESTManager(new URL(geoServerProperties.getUrl()), geoServerProperties.getUsername(),
               geoServerProperties.getPassword());
      } catch (Exception ex) {
         ex.printStackTrace();
         return null;
      }
   }
}

创建services

public interface IGeoServerService {

    //    Boolean GeoserverPublishTiffData( String workspaceName, String storeName,String fileName) throws IOException;
    public Boolean publishTiffData(String fileName) throws IOException;
}
@Service
public class GeoServerServiceImpl implements IGeoServerService {

    @Autowired
    private GeoServerProperties geoServerProperties;

    @Autowired
    private GeoServerRESTManager geoServerRESTManager;

    /**
     * 发布tif格式数据
     *
     * @throws IOException
     */
    @Override
//    public Boolean GeoserverPublishTiffData(String workspaceName, String storeName, String fileName) throws IOException {
    public Boolean publishTiffData( String fileName) throws IOException {
//        String workspaceName = "myFirstWorkspaceOfTif";
//        String store_name = "myFirstStoreOfTif";
//        String fileName = "W:\bianbianbian\auxhist3_d02_2021-07-18_12_00_00.tif";

        GeoServerRESTPublisher publisher = geoServerRESTManager.getPublisher();
        GeoServerRESTReader reader = geoServerRESTManager.getReader();
        /**
         * 获取reader 和 publisher的另一种方式
         * GeoServerRESTPublisher geoServerRESTPublisher = new GeoServerRESTPublisher(url, username, passwd);
         * GeoServerRESTReader geoServerRESTReader = new GeoServerRESTReader(url, username, passwd);
         *
         */
        // 检查workspace 若不存在,创建workspace
        List<String> workspaceNames = reader.getWorkspaceNames();
        if (!workspaceNames.contains(geoServerProperties.getWorkspaceName())) {
            boolean publisherWorkspace = publisher.createWorkspace(geoServerProperties.getWorkspaceName());
            System.out.println("create workspace_name : " + publisherWorkspace);
        } else {
            System.out.println("workspace已经存在了,workspace_name name :" + geoServerProperties.getWorkspaceName());
        }
        /*
        //store是否存在,不存在则新建并发布数据。
        RESTDataStoreList datastoresList = reader.getDatastores(workspace_name);
        List<String> datastoreNameList = datastoresList.getNames();
        boolean storeNull = !datastoreNameList.contains(store_name);
        if (storeNull) {
            boolean result = publisher.publishGeoTIFF(workspace_name, store_name, new File(file_name));
            //converageName可以理解为图层名字 方法重载的两种方式
            // boolean result = publisher.publishGeoTIFF(workspace_name, store_name, "coverageName*", new File(file_name));
            System.out.println("数据发布是否成功:" + result);
        } else {
            System.out.println("数据已经发布过了,不能重复发布!");
        }*/
        RESTDataStore restStore = reader.getDatastore(geoServerProperties.getWorkspaceName(), geoServerProperties.getStoreName());
        if (restStore == null) {
            GSGeoTIFFDatastoreEncoder gsGeoTIFFDatastoreEncoder = new GSGeoTIFFDatastoreEncoder(geoServerProperties.getStoreName());
            gsGeoTIFFDatastoreEncoder.setWorkspaceName(geoServerProperties.getWorkspaceName());
            gsGeoTIFFDatastoreEncoder.setUrl(new URL("file:" + fileName));

            boolean createStore = geoServerRESTManager.getStoreManager().create(geoServerProperties.getWorkspaceName(), gsGeoTIFFDatastoreEncoder);
            System.out.println("create store (TIFF文件创建状态) : " + createStore);

            boolean publish = publisher.publishGeoTIFF(geoServerProperties.getWorkspaceName(), geoServerProperties.getStoreName(),
                    "adv", new File(fileName),"EPSG:3857",
                    GSResourceEncoder.ProjectionPolicy.NONE,"style:polygon",null);
            System.out.println("publish (TIFF文件发布状态) : " + publish);
            return publish;
        } else {
            System.out.println("数据存储已经存在了,store:" + geoServerProperties.getStoreName());
            return Boolean.FALSE;
        }
    }
  }

测试一下

@RunWith(SpringRunner.class)
@SpringBootTest
public class GeoServerConfigTest {

    @Autowired
    private IGeoServerService geoServerService;

    @Test
    public void testPublishTif() throws Exception {
        String fileName = "W:\bianbianbian\auxhist3_d02_2021-07-18_12_00_00.tif";
        Boolean aBoolean = geoServerService.publishTiffData(fileName);
        System.out.println(aBoolean);
    }
}

image.png

完美收官!!!