// 示例 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); });