01_upload_and_open.py
"""示例 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()