唯杰地图 logo唯杰地图
VJMAP
EN

组合 / 拆分 / 导出

更新于 2026-04-25约 11 分钟
.md

分类代号: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"])

这篇文档有帮助吗?