组合 / 拆分 / 导出
分类代号:C.5 本章共 6 个接口
把多张 DWG 组合成一张、把一张大图按图框 / 图层拆成多张、把图纸导出为 PDF / DXF 或离线瓦片包——这一章就是"图纸经纪人"。
共同特点:这 6 个接口都相对重,后端会真实创建新图档 / 新文件。测试环境请用临时 mapid,不要对生产图做实验。
快速索引
| 序号 | SDK 方法 | URL |
|---|---|---|
| 36 | cmd_compose_new_map / cmdComposeNewMap |
POST /api/v1/map/cmd/composeNewMap/_null/v1 |
| 37 | cmd_split_map / cmdSplitMap |
POST /api/v1/map/cmd/cmdSplitMap/_null/v1 |
| 38 | cmd_export_layout / cmdExportLayout |
POST /api/v1/map/cmd/exportLayout/_null/v1 |
| 39 | cmd_export_pdf / cmdExportPdf |
POST /api/v1/map/cmd/exportPdf/{mapid}/{version} |
| 40 | cmd_export_dxf / cmdExportDxf |
POST /api/v1/map/cmd/exportDxf/{mapid}/{version} |
| 41 | cmd_save_offline_tile_db / cmdSaveOfflineTileDb |
POST /api/v1/map/cmd/saveOfflineTileDb/_null/v1 |
36 · 组合新地图 composeNewMap
把多张已有 DWG 按几何变换(偏移 + 旋转)拼成一张。
请求参数
| 字段 | 类型 | 说明 |
|---|---|---|
maps |
array | 组合清单:[{mapid, version, dx?, dy?, angle?}] |
newMapid |
string | 新图 mapid |
newVersion |
string | 新图 version(可省) |
bounds |
string | 可选:组合后的 bbox 限定 |
响应
成功:{ "status": true, "mapid": "...", "fileid": "...", "version": "v1" }
失败(实采:源文件不存在):
{
"error": "file is not exist, ",
"status": false
}
Python
svc.cmd_compose_new_map(
maps=[
{"mapid": "part_a", "version": "v1", "dx": 0, "dy": 0},
{"mapid": "part_b", "version": "v1", "dx": 1000.0, "dy": 0, "angle": 0},
],
newMapid="assembled_map",
)
Node.js
await svc.cmdComposeNewMap({
maps: [
{ mapid: 'part_a', version: 'v1', dx: 0, dy: 0 },
{ mapid: 'part_b', version: 'v1', dx: 1000, dy: 0, angle: 0 },
],
newMapid: 'assembled_map',
});
37 · 拆分子图 cmdSplitMap
按图框线 / 按图层把一张大图拆成多张小图。
请求参数
| 字段 | 类型 | 说明 |
|---|---|---|
mapid / version |
string | 源图 |
splitType |
string | frame(按图框)/ layer(按图层) |
framelayer |
string | 仅 splitType=frame 时:图框线所在图层 |
clipBounds |
string | 也可以直接给一系列 bbox 列表拆 |
outNamePrefix |
string | 新图 mapid 前缀,默认用源 mapid + 序号 |
响应
成功:{ "status": true, "maps": [{mapid, version, bounds}, ...] }
失败(实采:frame 拆分未给 clipBounds):
{ "error": "clipBounds is empty" }
38 · 导出布局为 DWG exportLayout
从 DWG 的布局空间(paper space)单独导出一张新 DWG。CAD 里经常一个文件多个布局(A3、A2、首页),这个接口能一次性把某个布局变成独立图档。
请求参数
| 字段 | 类型 | 说明 |
|---|---|---|
mapid / version |
string | 源图 |
layoutIndex |
int | 布局序号(0 起) |
layoutName |
string | 或直接用布局名,优先级高于 layoutIndex |
newMapid |
string | 可选:直接导入为新地图 |
newVersion |
string | 可选:新地图 version |
响应(实采:sys_zp/v1, layoutIndex=0)
{
"fileid": "pf68817b9655",
"status": true
}
fileid 指向后端缓存里的新 DWG 文件,可以接着调用 open_map(mapid=...) 打开,或用 exportDxf / exportPdf 进一步出图。
Python
res = svc.cmd_export_layout(mapid="sys_zp", version="v1", layoutIndex=0)
assert res["status"]
print(res["fileid"]) # 'pf68817b9655'
39 · 导出 PDF exportPdf
把指定图纸输出为 PDF。支持按地图 bbox 截图 + 指定纸张。
请求参数
| 字段 | 类型 | 说明 |
|---|---|---|
bounds / bbox |
string | 要导出的 bbox:[minx,miny,maxx,maxy] |
width / height |
number | 纸张尺寸(mm),常用 A4=297×210 |
scale |
number | 比例尺(可选) |
darkMode |
bool | 是否暗色渲染 |
outName |
string | 自定义输出文件名 |
layer |
string | 仅导出某 style / layer |
响应(实采:sys_zp/v1, 297×210 mm)
{
"path": "download/d5f939154c.pdf",
"status": true
}
完整下载 URL 是 http://127.0.0.1:27660/{path}?token=<jwt>。
Python
res = svc.cmd_export_pdf(
mapid="sys_zp", version="v1",
width=297, height=210,
)
url = svc.base_gateway() + res["path"] + f"?token={svc.token}"
Node.js
const res = await svc.cmdExportPdf({
mapid: 'sys_zp', version: 'v1',
width: 297, height: 210,
});
const url = `${svc.baseGateway()}${res.path}?token=${svc.token}`;
40 · 导出 DXF exportDxf
把当前图档(或其子集)导出为 ASCII DXF 文件。
请求参数
| 字段 | 类型 | 说明 |
|---|---|---|
bounds / bbox |
string | 裁剪 bbox |
layer |
string | 限定 style / layer |
dxfVersion |
string | DXF 版本 tag:AC1009 (R12), AC1018 (R2004) 等 |
outName |
string | 自定义输出文件名 |
响应
成功:{ "status": true, "path": "download/xxx.dxf" }
失败(实采:当前地图没有可导出图元):
{
"error": "Invalid Symbol Table name",
"status": false
}
Python
res = svc.cmd_export_dxf(
mapid="sys_zp", version="v1",
dxfVersion="AC1018",
bounds="[587661158,3103885970,587661256,3103886087]",
)
41 · 离线瓦片包 saveOfflineTileDb
把指定地图范围预切并打成 .mbtiles / .sqlitedb 离线包,方便前端离线展示。
请求参数
| 字段 | 类型 | 说明 |
|---|---|---|
mapid / version |
string | 源图 |
minzoom / maxzoom |
int | zoom 范围 |
bounds |
string | 要切的 bbox |
ismvt |
bool | true 切 MVT(.mbtiles),false 切栅格 PNG |
outName |
string | 输出文件名 |
响应
成功:{ "status": true, "path": "download/xxx.mbtiles" }
失败(实采:缺 bounds):
{ "error": "param error" }
Python
res = svc.cmd_save_offline_tile_db(
mapid="sys_zp", version="v1",
minzoom=0, maxzoom=6,
bounds="[587661158,3103885970,587661256,3103886087]",
ismvt=True,
outName="sys_zp_offline.mbtiles",
)
组合示例:DWG → PDF 一把梭
# 1. 上传并打开 DWG
up = svc.upload_map("project.dwg", mapid="proj", version="v1")
svc.open_map(
mapid="proj", version="v1",
fileid=up["fileid"], uploadname=up["uploadname"],
mapopenway=vjmap.MapOpenWay.GeomRender,
)
# 2. 导出第 0 号布局
lay = svc.cmd_export_layout(mapid="proj", version="v1", layoutIndex=0,
newMapid="proj_layout0", newVersion="v1")
# 3. 打开刚生成的布局图并导 PDF
svc.open_map(mapid="proj_layout0", version="v1",
fileid=lay["fileid"], uploadname="proj_layout0.dwg",
mapopenway=vjmap.MapOpenWay.GeomRender)
pdf = svc.cmd_export_pdf(mapid="proj_layout0", version="v1",
width=297, height=210)
print(svc.base_gateway() + pdf["path"])