# 服务
全空间一张图自身提供了用户认证授权、应用配置、存储、图幅管理等服务。
可以直接访问全空间一张图管理平台的开发扩展-接口文档页面查看,默认用户名为 admin,密码为 cloud123.mapgis。
# getRequest()
@mapgis/web-app-framework
包中 service 基于 VUE_APP_API_BASE_URL提供了getRequest()接口,可让所有的插件包以相同的方式跟服务端交互,其实它是对 axios (opens new window) 的一个封装。
import axios from 'axios'
// create axios instance
const createAxiosInstance = function(baseApi) {
const axiosInstance = axios.create({
baseURL: baseApi,
timeout: 20000
})
axiosInstance.defaults.withCredentials = true
axiosInstance.interceptors.request.use(...interceptorsRequest)
axiosInstance.interceptors.response.use(...interceptorsResponse)
return axiosInstance
}
# 使用
import { getRequest } from '@mapgis/web-app-framework'
getRequest().get(...)
getRequest().post(...)
// or
getRequest()({
url: `xxx`,
method: 'get'
})
getRequest()({
url: `xxx`,
method: 'post',
xxx
})
# 配置管理服务
# 公共配置
获取的是当前角色关联的应用的公共配置,比如应用基础配置、行政区划配置,图幅信息配置、非空间数据配置。
PUT /psmap/rest/services/system/ResourceServer/configs 修改单个公共配置
GET /psmap/rest/services/system/ResourceServer/configs/{name} 获取单个公共配置
@mapgis/web-app-framework
提供了对公共配置的获取接口,可直接使用:
import { api, baseConfigInstance } from '@mapgis/web-app-framework'
// 获取应用基础配置
baseConfigInstance.config // 建议直接使用baseConfigInstance对象
api.getConfig('base') // 或者通过请求获取
// 获取行政区划配置
api.getConfig('district')
# 应用配置
提供配置应用需要的接口。
GET /psmap/rest/services/system/ResourceServer/app/config 获取应用配置信息
PUT /psmap/rest/services/system/ResourceServer/app/config 修改应用配置信息
GET /psmap/rest/services/system/ResourceServer/app/themes 获取主题集合
GET /psmap/rest/services/system/ResourceServer/app/widgets 获取微件集合
GET /psmap/rest/services/system/ResourceServer/app/widgetConfig 获取应用的单个微件配置
PUT /psmap/rest/services/system/ResourceServer/app/widgetConfig 修改应用的单个微件配置
@mapgis/web-app-framework
提供了对微件配置的获取和修改接口,可直接使用:
import { api } from '@mapgis/web-app-framework'
// 获取add-data微件的配置
api.getWidgetConfig('add-data')
// 修改add-data微件的配置。
api.saveWidgetConfig({name: 'add-data', config: JSON.stringify({...})})
# 文件存储管理服务
提供文件上传和图片上传功能,返回的结构中存在 url 属性,指向文件访问的路径,可与 AppMixin 中的 baseUrl
拼接形成完整的 URL。
POST /psmap/rest/services/system/ResourceServer/files 上传文件
POST /psmap/rest/services/system/ResourceServer/files/pictures 上传图片
axios
.post(
`${this.baseUrl}/psmap/rest/services/system/ResourceServer/files/pictures`,
file,
{
headers: {
'Content-Type': 'multipart/form-data',
Authorization: JSON.parse(localStorage.getItem('access_token'))
}
}
)
.then(res => {
resolve(res)
})
.catch(Error => {
reject(Error)
})
# 图幅管理服务
提供图幅获取的接口,图幅号跟比例尺、参考系有关。
GET /psmap/rest/manager/app/mapSheet/no 查询图幅号,支持关键字和分页
# 查询图幅号接口详情
查询图幅号带有图幅号缓存功能,当查询的图幅号不存在时,会自动从给定的 url 服务器进行请求并保存下来。
# 请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
scale | true | String | 比例尺 |
rect | true | String | 范围,获取到的所有图幅位于该范围下 |
originSrs | true | String | 源参考系 |
destSrs | true | String | 目的参考系 |
gdbp | true | String | 裁剪矢量图层,可用于精确获取该图层范围内的图幅号 |
url | true | String | 获取图幅号的接口地址 |
keyword | true | String | 查询关键字,默认为空串 |
pageNumber | true | String | 页码,从 0 开始 |
pageSize | true | String | 每页的数量 |
# 调用样例
http://localhost:8013/psmap/rest/manager/app/mapSheet/no?scale=Scale_20w&rect=115.40448659815915,39.097281800000005,117.46520008794508,41.05780257931024&originSrs=WGS1984_度&destSrs=WGS1984_度&gdbp=gdbp://MapGISLocal/北京市/ds/行政区/sfcls/北京市&url=http://develop.smaryun.com:6163/onemap/cliprect/clipList&replace=false
以上参考值可通过如下方式得到:
import { api } from '@mapgis/web-app-framework'
// 获取sheetConfig
const sheetConfig = await api.getConfig('sheet')
// 通过sheetConfig内的ip、port、name去获取地图范围,构造成[xMin, yMin, xMax, yMax],用于查询图幅号
getTotalRect = `http://${sheetConfig.ip}:${sheetConfig.port}/igs/rest/mrms/info/${sheetConfig.name}`
rect = rect.join(',')
// 用于生成图幅号的url
url = `http://${sheetConfig.ip}:${sheetConfig.port}/onemap/cliprect/clipList`
// 下面的接口地址可直接用于发送GET请求,还可以查询关键字、页码和每页的数量
getNos = `/psmap/rest/manager/app/mapSheet/no?scale=${scale}&rect=${rect}&originSrs=${this.baseConfigInstance.config.projectionName}&destSrs=${this.baseConfigInstance.config.projectionName}&gdbp=${sheetConfig.gdbp}&url=${url}`
// 对于获取到的图幅号,我们还可以进一步获取图幅号的坐标范围
no = 'K-50-(28)'
getNoRect = `http://${sheetConfig.ip}:${sheetConfig.port}/onemap/cliprect/getRectByFrameNo?f=json&frameNo=${no}&srsId=${this.baseConfigInstance.config.projectionName}&objSrsId=${this.baseConfigInstance.config.projectionName}`
// 它会返回类似下面的结果
{"XMin":117.0,"YMin":40.666666666666664,"XMax":118.0,"YMax":41.333333333333336}
# 返回结果
{
"content": [
"K50G088029",
"J50G012030",
"K50G093030",
"K50G088030",
"K50G083030",
"J50G011030",
"J50G010030",
"J50G009030",
"J50G008030",
"J50G007030",
"J50G006030",
"J50G005030",
"J50G004030",
"J50G003030",
"J50G002030",
"J50G001030",
"K50G096030",
"K50G095030",
"K50G094030",
"K50G087030",
"K50G086030"
],
"totalElements": 755
}
# 非空间数据管理服务
提供非空间数据文件获取和下载的接口,目前只支持 ftp 协议。
GET /api/non-spatial/files 查询文件
GET /api/non-spatial/download/url 获取文件下载url
# 查询文件接口详情
查询文件目前支持的文件类型有 doc、docx、xls、xlsx、ppt、pptx、jpg、png、mp4、avi、pcx、ogg、pdf。
# 查询文件请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
protocol | false | String | 协议类型,默认值为 ftp,当前仅支持 ftp |
url | true | String | 服务地址,默认端口号 21,例如:ftp://192.168.21.191 或者 ftp://192.168.21.191:21 |
path | true | String | 数据路径,可跟 url 形成文件完整目录,url/path |
username | false | String | 用户名,默认为空串 |
password | false | String | 密码,默认为空串 |
pageNumber | true | String | 页码,从 0 开始 |
pageSize | true | String | 每页的数量 |
# 调用样例
http://192.168.17.59:8015/api/non-spatial/files?pageNumber=0&pageSize=5&path=文档资料&protocol=ftp&url=ftp://192.168.21.191:21
# 返回结果
{
"content": [
{
"id": "aaa",
"name": "aaa",
"type": "docx",
"url": "ftp://192.168.21.191:21\\文档资料\\aaa.docx"
},
{
"id": "bbb",
"name": "bbb",
"type": "pptx",
"url": "ftp://192.168.21.191:21\\文档资料\\bbb.pptx"
},
{
"id": "ccc",
"name": "ccc",
"type": "docx",
"url": "ftp://192.168.21.191:21\\文档资料\\ccc.docx"
},
{
"id": "ddd",
"name": "ddd",
"type": "doc",
"url": "ftp://192.168.21.191:21\\文档资料\\ddd.doc"
},
{
"id": "eee",
"name": "eee",
"type": "xls",
"url": "ftp://192.168.21.191:21\\文档资料\\eee.xls"
}
],
"totalElements": 12
}
# 获取文件下载 url 接口详情
# 请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
protocol | false | String | 协议类型,默认值为 ftp,当前仅支持 ftp |
url | true | String | 服务地址,默认端口号 21,例如:ftp://192.168.21.191 或者 ftp://192.168.21.191:21 |
path | true | String | 数据路径,可跟 url 形成文件完整目录,url/path |
username | false | String | 用户名,默认为空串 |
password | false | String | 密码,默认为空串 |
name | true | String | 文件名 |
type | true | String | 文件类型 |
# 调用样例
http://192.168.17.59:8015/api/non-spatial/download/url?name=aaa&path=文档资料&protocol=ftp&type=docx&url=ftp://192.168.21.191:21
# 返回结果
{
"path": "/file/non-spatial/文档资料/aaa.docx"
}
这样在微件内部就可以通过 ${this.baseUrl}{path}
来进行下载了。
# 微件资源服务
# 重新获取微件配置
在应用加载时会统一加载每个微件的配置,然后提供给每个微件使用 this.widgetInfo.config,可能有时候我们需要刷新配置,这个时候可以通过应用配置服务来获取:
import { api } from '@mapgis/web-app-framework'
// 获取data-catalog微件的配置
api.getWidgetConfig('data-catalog')
# 获取微件内图像
有些微件带有一些固有的图像资源存放在自身微件目录的 images 文件夹内,可通过如下方式进行获取:
<img :src="`${appAssetsUrl}${widgetInfo.uri}/images/${resourceImage}`" />
# 获取配置内的外部资源
有些微件配置或通用配置在后台支持图像或文件的上传设置,这样在配置内会包含所上传文件在服务端的路径,以/file/开头,要获取它们,可通过如下方式:
# 图像类
只要混入了 AppMixin(对于微件来说,已自动混入),可以基于 baseUrl+资源 url 进行访问
<img :src="`${baseUrl}${resourceUrl}`" />
# 其他资源类
可以通过前面的 getRequest()来获取。