Skip to content

Python 应用 ​

BICMap-Python 通过 pywebview 桌面容器 + JS Bridge,让 Python 代码直接控制 BicMap JS SDK 进行地图展示与数据渲染,无需编写任何前端代码。

三层架构 ​

项目采用三层分离设计:视图容器层 → 桥接通信层 → 地图渲染层。

层角色职责
BicMapView视图容器层WebView 窗口 + HTTP 静态服务器 + 截图 IO
BicMapClient(view.bridge)桥接通信层参数序列化 → JS 注入 → 回调解析 → 用户通知
bridge-adapter.mjsJS 执行层路由分发(ROUTES)→ bicMap SDK 调用 → 事件回传

通信模型为 下行路由 + 上行回调 的对称结构:

  • 下行:view.bridge.marker.add(...) → invoke(ns, action, params) → evaluate_js 注入 → ROUTES[ns][action] 调用 bicMap SDK。
  • 上行:地图事件(click / load / 绘制完成)→ pywebview.api.on_xxx() → BicMapClient → 用户回调。

基本用法 ​

python
from bicmap_view import BicMapView

def on_ready():
    print("地图就绪,开始操作")
    view.bridge.marker.add(116.397428, 39.90923, "天安门")

def on_click(event):
    print(f"点击: lng={event.lng}, lat={event.lat}")

view = BicMapView(title="My Map", width=1024, height=768)
view.bridge.on_ready = on_ready
view.bridge.on_click = on_click
view.start()  # 阻塞,直到用户关闭窗口

view.start() 是阻塞调用,所有地图操作逻辑都应放在 on_ready 回调中执行。

能力一览 ​

通过 view.bridge.xxx() 可访问与 JS SDK 对齐的全部能力:

命名空间能力
顶层fly_to / fit_bounds / get_state / screenshot / clear_layers
geometry点云、矩形、多边形、圆形、折线、宽线,支持 update / remove / show / hide
marker简单标记、方向标记、批量 POI、机器人标记
drawing矩形 / 圆形 / 多边形 / 折线绘制,完成后触发 on_draw_complete
layerGeoJSON 数据源、填充图层、线图层
slam异步加载 SLAM 地图

快速开始 ​

bash
# 1. 创建并激活虚拟环境
python3 -m venv venv
source venv/bin/activate

# 2. 安装依赖
pip install -r requirements.txt

# 3. 启动 Demo
python examples/slam_drawing_demo.py

源码 ​

完整工程源码、API 参考与架构说明请见 GitHub 仓库:Open-X-Humanoid/BICMap-Python。