"""示例 1:上传 DWG → 打开地图 → 获取元数据。 运行: python 01_upload_and_open.py 依赖: sdk/python/vjmap.py 环境变量(或 vjmap-service/tests/.env)里配置 VJMAP_API / VJMAP_TOKEN DWG 文件路径由 VJMAP_TEST_DWG_DIR + VJMAP_TEST_DWG_NAME 决定(可给绝对路径) """ from __future__ import annotations import json import time from pathlib import Path from _common import make_client, sample_dwg def main() -> None: svc = make_client() dwg: Path = sample_dwg() print(f"[1/4] 上传 DWG: {dwg.name}") up = svc.upload_map(dwg) print(" -> fileid =", up.get("fileid")) print(" -> uploadname =", up.get("uploadname")) mapid = f"demo_{int(time.time())}" print(f"[2/4] 打开地图 mapid={mapid}") opened = svc.open_map( mapid, fileid=up["fileid"], uploadname=up["uploadname"], mapopenway="GeomRender", # SDK 换算为 body geom:true ) if opened.get("status") == "working": # GeomRender 首次打开是异步的:轮询 listmaps 到 finish 后再打开一次拿完整参数 w = svc.wait_map_open_finish(mapid, opened["version"]) if w["status"] != "finish": raise SystemExit(f"几何库生成失败: {w.get('error')}") opened = svc.open_map(mapid, w.get("version") or opened["version"]) version = opened.get("version", "v1") print(" -> version =", version, "; bounds =", opened.get("bounds")) print(f"[3/4] 获取 metadata") meta = svc.metadata(mapid, version=version) # meta["layers"] 可能是 JSON 字符串(需先 parse),直接 len() 会数成字符数 layers_raw = meta.get("layers") or [] layers = json.loads(layers_raw) if isinstance(layers_raw, str) else layers_raw print(" -> name =", meta.get("name"), "; layers =", len(layers)) print(f"[4/4] 清理:关闭并删除地图") svc.close_map(mapid, version=version) svc.delete_map(mapid, version=version) print(" -> OK") print("\n=== opened JSON 节选 ===") print(json.dumps({k: opened.get(k) for k in ("mapid", "version", "bounds", "layers")}, ensure_ascii=False, indent=2)) if __name__ == "__main__": main()