01_upload_and_open.js
// 示例 1:上传 DWG → 打开地图 → 获取元数据。
//
// 运行:
// node 01_upload_and_open.js
'use strict';
const { makeClient, sampleDwg } = require('./_common');
(async () => {
const svc = makeClient();
const dwg = sampleDwg();
console.log(`[1/4] 上传 DWG: ${require('node:path').basename(dwg)}`);
const up = await svc.uploadMap(dwg);
console.log(' -> fileid =', up.fileid);
console.log(' -> uploadname =', up.uploadname);
const mapid = `demo_${Math.floor(Date.now() / 1000)}`;
console.log(`[2/4] 打开地图 mapid=${mapid}`);
let opened = await svc.openMap({
mapid,
fileid: up.fileid,
uploadname: up.uploadname,
mapopenway: 'GeomRender', // SDK 换算为 body geom:true
});
if (opened.status === 'working') {
// GeomRender 首次打开是异步的:轮询 listmaps 到 finish 后再打开一次拿完整参数
const w = await svc.waitMapOpenFinish(mapid, opened.version);
if (w.status !== 'finish') throw new Error(`几何库生成失败: ${w.error}`);
opened = await svc.openMap({ mapid, version: w.version || opened.version });
}
const version = opened.version || 'v1';
console.log(' -> version =', version, '; bounds =', opened.bounds);
console.log('[3/4] 获取 metadata');
const meta = await svc.metadata(mapid, version);
let layersCnt;
try {
const layers = typeof meta.layers === 'string' ? JSON.parse(meta.layers) : meta.layers;
layersCnt = Array.isArray(layers) ? layers.length : '?';
} catch (_) { layersCnt = '?'; }
console.log(' -> name =', meta.name, '; layers =', layersCnt);
console.log('[4/4] 清理:关闭并删除地图');
await svc.closeMap(mapid, version);
await svc.deleteMap(mapid, version);
console.log(' -> OK');
console.log('\n=== opened JSON 节选 ===');
console.log(JSON.stringify({
mapid: opened.mapid, version: opened.version, bounds: opened.bounds,
}, null, 2));
})().catch((e) => {
console.error('失败:', e.body || e.message || e);
process.exit(1);
});