唯杰地图 logo唯杰地图
VJMAP
EN

01_upload_and_open.js

vjmap-service/examples/nodejs/01_upload_and_open.js 2.0 KB57 行
原文
// 示例 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);
});