# 上传创建地图
# 上传创建过程介绍
1、上传图形
uploadMap(file: File)
(1) 获取文件md5值,根据文件的md5去服务端判断文件是否已上传,如果已上传返回文件id(此步非必须)
(2) 上传文件至服务端后台,返回文件id(
fileid
)和建议
的一个mapid
值2、创建图形
OpenMap
根据上传图形返回的文件id(
fileid
), 用户可设置创建图形的mapid
值(也可以使用上传图形返回的建议的mapid,防止mapid重复)去创建图形。如果
mapid
值在后台不存在,第一次调用OpenMap
时,会根据文件id(fileid
)去创建对应的mapid
地图。如果
mapid
在后台已存在(如第二次调用OpenMap
时),会直接打开此地图。
# 通过唯杰地图云端管理平台上传图形
打开 唯杰地图云端管理平台 (opens new window) 点击右边的上传图形选择一个图进行上传
# 通过前端SDK上传图形
// 创建服务对象
let svc = new vjmap.Service(env.serviceUrl, env.accessToken)
// 选择文件获取file对象(略)
// 上传图形
let res = await svc.uploadMap(file);
// res.mapid = 'xxx'; // 可修改返回建议`mapid`值
// 创建图形
let data = await svc.openMap(res);
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
具体实现可查看示例
上传新图形(基于ElementUI实现) (opens new window)
# 通过URL地址直接打开图形
通过这种方式无需上传图形,后台会根据URL地址自动下载图形,并创建打开地图。
// --通过网络路径打开地图--传入DWG路径的http路径打开DWG图
// js代码
// 新建地图服务对象,传入服务地址和token
let svc = new vjmap.Service(env.serviceUrl, env.accessToken)
// 打开地图
// 地图ID (如果换成了您自定义的url地址,记得修改此名称id,改成您想要的唯一的名称即可)
const mapid = "gym";
// 地图url地址,注意:url地址后四个字母必须为.dwg。如果实际中的地址四4位不是.dwg可以随便加个参数如 url?param=xxx&filetype=.dwg
const httpDwgUrl = "https://vjmap.com/static/assets/data/gym.dwg" ;
let res = await svc.openMap({
// (第一次打开此地图ID时,会根据fileid去获取dwg路径打开,之后会读取缓存打开)
mapid: mapid, // 地图ID
fileid: httpDwgUrl,
// httpUsePost: true, // 如果是复杂的url地址,建议用post请求,请把httpUsePost设置为true, 默认false
mapopenway: vjmap.MapOpenWay.GeomRender, // 以几何数据渲染方式打开
style: vjmap.openMapDarkStyle() // div为深色背景颜色时,这里也传深色背景样式
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
具体示例可查看 通过网络路径打开地图 (opens new window)
# 通过后端REST请求上传图形
具体可查看文档 地图服务Rest接口
# 上传图形
服务地址 | /api/v1/map/uploads |
请求类型 | Post |
请求参数 | 参数说明 | 参数示例 |
---|---|---|
fileToUpload | 文件二进制内容 |
# 创建或打开图形
服务地址 | /api/v1/map/openmap/{mapid} |
请求类型 | Get或Post |
请求参数 | 参数说明 | 参数示例 |
---|---|---|
version | 文件二进制内容 | |
layer | 样式 | |
geom | 以几何渲染方式打开 | true |
fileid | 文件唯一ID. 地图ID第一次打开时,需传递fileid | cfbe8dc085fb |
imageLeft | 图像左上角坐标x 第一次打开图像类型时有效 | undefined |
imageTop | 图像左上角坐标y 第一次打开图像类型时有效 | |
imageResolution | 图像分辨率 第一次打开图像类型时有效 | |
uploadname | 上传时的文件名 | zp.dwg |
mapfrom | 地图来源参数(协同图形有效) | |
mapdependencies | 地图依赖项(协同图形有效) | |
subfrom | 地图来源参数(子项的设置)(协同图形有效) | |
subdependencies | 地图依赖项(子项的设置)(协同图形有效) | |
stylename | 样式图层名称 | |
layeron | 要开的图层索引列表,格式如[0,1,3] | |
layeroff | 要关的图层索引列表,格式如[2,4] | |
clipbounds | 地图裁剪范围,范围如[x1,y1,x2,y2] | |
bkcolor | 背景颜色 | 0 |
lineweight | 线宽,格式如[1,1,1,1,0] | |
expression | 样式表达式 | |
secretKey | 如第一次创建图时要对图加密可设置此key | |
accessKey | 如图设置了密码需访问key |
注:第一次上传图形时,如需设置密码,需设置secretKey
值。计算方式为对密码明文四次md5加密,取加密后的字符串前16位。
如用 nodejs
在后台上传图形并创建打开图示例
// app.js
const fs = require('fs')
const FormData = require('form-data')
const axios = require('axios')
const prompt = require('prompt');
(async ()=>{
const defaultServiceUrl = 'https://vjmap.com/server/api/v1';
const defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJJRCI6MiwiVXNlcm5hbWUiOiJhZG1pbjEiLCJOaWNrTmFtZSI6ImFkbWluMSIsIkF1dGhvcml0eUlkIjoiYWRtaW4iLCJCdWZmZXJUaW1lIjo4NjQwMCwiZXhwIjo0ODEzMjY3NjM3LCJpc3MiOiJ2am1hcCIsIm5iZiI6MTY1OTY2NjYzN30.cDXCH2ElTzU2sQU36SNHWoTYTAc4wEkVIXmBAIzWh6M';
let formData = new FormData();
let { filepath } = await prompt.get('filepath'); // 请输入要上传的文件路径
if (!filepath) return;
let file = fs.createReadStream(filepath)
formData.append('fileToUpload', file);
let len = await new Promise((resolve, reject) => {
return formData.getLength((err, length) => (err ? reject(err) : resolve(length)));
});
let res = await axios({
url: `${defaultServiceUrl}/map/uploads?token=${defaultAccessToken}`,
method: 'POST',
data: formData,
headers: {
...formData.getHeaders(),
'Content-Length': len,
},
});
/*
{
fileid: 'c036d8ca23eb',
mapid: 'c036d8ca23eb', // mapid是建议的mapid,如果之前上传打开过,则为之前的mapid
uploadname: 'base1.dwg'
}
*/
console.log(res.data);
// 上传只是把图上传到了服务器, 您新建地图的时候的,第一次的时候openMap要传上传的fileid,然后给新建的图取个mapid打开就可以了,以后就可以直接通过mapid打开图了
let { mapid } = await prompt.get('mapid'); // 请输入要上传的文件路径
if (!mapid) {
// 如果没有输入mapid,则用上传的时候返回的默认mapid
mapid = res.data.mapid;
}
let url = `${defaultServiceUrl}/map/openmap/${res.data.mapid}?version=&layer=&geom=true&fileid=${res.data.fileid}&uploadname=${res.data.uploadname}&mapfrom=&mapdependencies=&subfrom=&subdependencies=&stylename=&layeron=&layeroff=&clipbounds=&bkcolor=0&lineweight=&expression=`;
// 如需设置密码,如密码是123456
// md5四次加密 strMd5是字符串md5值计算方法,请自行实现
// let secretKey = strMd5(strMd5(strMd5(strMd5("123456")))).substr(0, 16);
// url += "&secretKey=" + secretKey
let result = await axios({
url: url,
method: 'GET',
headers: {
token: defaultAccessToken,
},
});
console.log(result)
})();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60