架构设计
三层结构
┌────────────────────────────────────────────────────────┐
│ indoor-nav(应用层) │
│ 页面路由 / 历史记录 / 业务数据 / 布局 │
├────────────────────────────────────────────────────────┤
│ @indoor-map/fmap-react(组件层) │
│ FMapProvider / FMapView / 搜索 / 导航面板 / 历史记录 │
├────────────────────────────────────────────────────────┤
│ @indoor-map/fmap-js(封装层) │
│ FMap / FMapSearch / FMapNavigation / FMapMarker / ... │
├────────────────────────────────────────────────────────┤
│ 蜂鸟视图 Fengmap SDK(全局 script,不打包) │
└────────────────────────────────────────────────────────┘职责划分原则:
- fmap-js:只依赖 fengmap SDK,提供纯 JS 的业务封装,不依赖 React。
- fmap-react:只依赖 fmap-js 与 Ant Design,提供通用 UI 组件。
- indoor-nav:纯业务逻辑与页面布局,所有地图能力都来自组件层。
核心数据流
FMapProvider创建FMap实例,地图加载完成后创建FMapSearch/FMapNavigation/FMapMarker/FMapFloor/FMapLocation等子模块。- 子组件通过
useFMap()获取实例,FMapView负责挂载地图容器并处理点击事件。 - 搜索/导航结果通过 Props 回调向上传递,业务层负责状态管理(如历史记录写入 localStorage)。
FMapState提供可订阅的状态快照(当前楼层、缩放、视角等),useFMapState在 React 侧消费。
架构图
