# 服务

全空间一张图自身提供了用户认证授权、应用配置、存储、图幅管理等服务。

可以直接访问全空间一张图管理平台的开发扩展-接口文档页面查看,默认用户名为 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()来获取。