一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情。
springboot 发布 geoserver
下载地址: geoserver.org/download/
下载以后解压
将war复制到tomcat文件夹下启动
用户名: 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);
}
}
完美收官!!!