Geoserver REST API 网址:https://docs.geoserver.org/stable/en/user/rest/index.html#rest
一, 发布shp
1.1 新增数据存储
该API的参数说明(建议选择external,直接引用本地文件,避免打包上传):
method | 说明 |
---|---|
url | 服务链接的数据形式,使用网络链接 |
file | 压缩包形式上传,使用formdata上传数据 |
external | 本地已存在的文件,传入路径 |
代码调用方式:
/**
* @method 新建数据存储
* @param {string} workspace_name 工作区名称
* @param {stirng} store_name 数据源名称
* @param {string} file_path 文件路径
* @returns
*/
async function create_datastore(workspace_name, store_name, file_path) {
try{
// const request = require('request-promise');
let result = await request({
method: 'PUT',
uri: config.geoserver_url + `/rest/workspaces/${workspace_name}/datastores/${store_name}/external.shp`,
headers: {
'Content-Type': 'text/plain',
'Authorization': config.geoserver_auth
},
body: file_path,
// json: true //不能加这个,否则会报500
});
return result;
}catch(err) {
if(err) throw err;
}
}
1.2 数据源设置
注意:connectionParameters里的参数,会把之前已存在的配置,如url等完全覆盖,如需增加配置,注意先获取entry,然后进行push,最后调用更新接口。
获取entry属性的接口如下:
/rest/workspaces/${workspace_name}/datastores/${store_name}
取响应数据中的['dataStore']['connectionParameters']['entry']
即为所需
部分参数所对应项:
entry.push({"@key":"charset","$":"UTF-8"}); //字符集设置
entry.push({"@key":"create spatial index","$":"true"}); //如果缺少空间索引或者空间索引过时,重新建立空间索引
entry.push({"@key":"memory mapped buffer","$":"true"}); //使用内存映射的缓冲区
entry.push({"@key":"cache and reuse memory maps","$":"true"}); //高速缓存和重用内存映射
1.3 发布图层
新版geoserver在创建数据源后,会自动进行图层的发布,但在layer preview里预览,会直接下载wms文件进行报错,此时可以通过更改featureType来进行发布更新
featureTypeName一般是文件名,body设置坐标系即可(注意是featureType,不是FeatureTypeInfo)
二, 发布Geotiff
2.1 直接发布
发布georiff时,创建coveragestores即可,新版geoserver会自动进行发布
代码调用方式:
/**
* @method 新建数据存储
* @param {string} workspace_name 工作区名称
* @param {stirng} store_name 数据源名称
* @param {string} file_path 文件路径
* @returns null
*/
async function create_datastore(workspace_name, store_name, file_path) {
try{
// 获取工作区
let workspace = await get_workspace(workspace_name);
if(!workspace) {
await request({
method: 'POST',
uri: config.geoserver_url + `/rest/workspaces`,
headers: {
'Content-Type': 'application/json',
'Authorization': config.geoserver_auth
},
body: {
workspace: {
name: workspace_name
}
},
json: true
});
}
await request({
method: 'PUT',
uri: config.geoserver_url + `/rest/workspaces/${workspace_name}/coveragestores/${store_name}/external.geotiff?charset=UTF-8`,
headers: {
'Content-Type': 'text/plain',
'Authorization': config.geoserver_auth
},
body: file_path, //路径不能存在中文,否则会报500,原因还未知
// json: true //不能加这个,否则会报500
});
return;
}catch(err) {
// console.log('创建资源错误')
if(err) throw err;
}
}