Skip to content

Python 应用

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

三层架构

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

角色职责
BicMapView视图容器层WebView 窗口 + HTTP 静态服务器 + 截图 IO
BicMapClientview.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