唯杰地图 logo唯杰地图
VJMAP
EN

01_upload_and_open.py

vjmap-service/examples/python/01_upload_and_open.py 2.3 KB64 行
原文
"""示例 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()