Python 应用
BICMap-Python 通过 pywebview 桌面容器 + JS Bridge,让 Python 代码直接控制 BicMap JS SDK 进行地图展示与数据渲染,无需编写任何前端代码。
三层架构
项目采用三层分离设计:视图容器层 → 桥接通信层 → 地图渲染层。
| 层 | 角色 | 职责 |
|---|---|---|
BicMapView | 视图容器层 | WebView 窗口 + HTTP 静态服务器 + 截图 IO |
BicMapClient(view.bridge) | 桥接通信层 | 参数序列化 → JS 注入 → 回调解析 → 用户通知 |
bridge-adapter.mjs | JS 执行层 | 路由分发(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 |
layer | GeoJSON 数据源、填充图层、线图层 |
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。

