Skip to content

项目架构文档

本文档详细说明了 expo-gaode-map 项目的 Monorepo 架构和代码结构。

Monorepo 架构

expo-gaode-map 采用 Bun workspaces 管理的 Monorepo 架构,提供模块化的功能包:

expo-gaode-map/
├── packages/
│   ├── core/               # expo-gaode-map(核心包)
│   │   ├── src/            # TypeScript 代码
│   │   ├── ios/            # iOS 原生代码
│   │   ├── android/        # Android 原生代码
│   │   └── plugin/         # Config Plugin
│   │
│   ├── search/             # expo-gaode-map-search(独立搜索包,2.2.33 后不再维护)
│   │   ├── src/            # TypeScript 代码
│   │   ├── ios/            # iOS 原生代码
│   │   └── android/        # Android 原生代码
│   │
│   ├── navigation/         # expo-gaode-map-navigation(导航包)
│   │   ├── src/            # TypeScript 代码
│   │   ├── ios/            # iOS 原生代码
│   │   └── android/        # Android 原生代码
│   │
│   └── web-api/            # expo-gaode-map-web-api(Web API 包)
│       └── src/            # TypeScript 代码(纯 JS)

├── example/                # 示例应用(使用核心包)
├── example-navigation/     # 导航示例应用
├── website/                # 文档网站

为什么使用 Monorepo?

  1. 按需安装:用户只安装需要的功能模块,减少包体积
  2. 代码共享:核心类型和工具可以在包之间共享
  3. 统一管理:所有包使用相同的开发工具和配置
  4. 版本一致:依赖版本统一管理,避免冲突

核心包(expo-gaode-map)

提供基础的地图显示、定位、覆盖物和搜索功能。详细结构请参考原文档。

独立搜索包仅用于历史项目兼容,2.2.33 是最后一个支持单独集成的版本。新项目请使用 expo-gaode-mapexpo-gaode-map-navigation 内置搜索能力。

高德官方 Android SDK 在 10.0.700 之后将远程依赖由“地图 + 定位”调整为“地图 + 定位 + 搜索”,依赖地址从 com.amap.api:3dmap:latest.integration 调整为 com.amap.api:3dmap-location-search:latest.integration。继续单独维护 search 模块会带来重复合包和依赖冲突成本。

导航包(expo-gaode-map-navigation)

导航包是一个独立的集成包,内置完整的地图、搜索和导航能力。

二进制冲突警告

导航包与核心包(expo-gaode-map)存在二进制冲突,不能同时安装。需要根据项目需求选择其一。

特点

  • 集成地图:内置完整的地图显示功能
  • 路径规划:驾车、步行、骑行、公交路线规划
  • 实时导航:提供导航视图和语音导航
  • 独立服务:支持无地图的独立路径规划

Web API 包(expo-gaode-map-web-api)

Web API 包是纯 JavaScript 实现,通过 HTTP 调用高德 Web 服务 API。

特点

  • 跨平台:纯 JS 实现,无原生依赖
  • 协同工作:从核心包或导航包读取 webKey
  • V5 API:适配最新的路径规划 API
  • 类型安全:完整的 TypeScript 类型定义

功能模块

  • 地理编码服务:地址与坐标互转、批量编码
  • 路径规划服务:驾车、步行、骑行、公交路线规划(V5 API)
  • POI 搜索服务:关键字搜索、周边搜索、详情查询
  • 输入提示服务:POI/公交站点/公交线路提示

SDK 依赖关系

Android

核心包:com.amap.api:3dmap-location-search(地图 + 定位 + 搜索)
搜索包:历史兼容包,2.2.33 后不再维护
导航包:com.amap.api:navi-3dmap(与核心包冲突)
Web API 包:无原生依赖

iOS

核心包:AMapFoundationKit + AMapLocationKit + MAMapKit + AMapSearchKit
搜索包:AMapFoundationKit + AMapSearchKit(历史兼容)
导航包:AMapFoundationKit + AMapNaviKit + MAMapKit + AMapSearchKit
Web API 包:无原生依赖

包之间的关系

方案一:核心包 + 可选 Web API
┌─────────────────────────────────────┐
│         用户应用 (example)           │
└──────┬──────────────┬───────────────┘


┌─────────────┐
│ expo-gaode- │
│    map      │
│ (地图+搜索)  │
└──────┬──────┘


┌─────────────────────────────┐
│    高德地图 SDK              │
└─────────────────────────────┘

方案二:导航包(独立)
┌─────────────────────────────────────┐
│      导航应用 (navigation)           │
└──────────────────┬──────────────────┘


         ┌─────────────────────┐
         │ expo-gaode-map-     │
         │   navigation        │
         │ (集成地图+搜索+导航) │
         └──────────┬──────────┘


         ┌─────────────────────┐
         │ 高德导航 SDK         │
         │  (navi-3dmap)       │
         └─────────────────────┘

通用:Web API 包
┌─────────────────────────────────────┐
│     任一方案的应用                    │
└──────────────────┬──────────────────┘


         ┌─────────────────────┐
         │ expo-gaode-map-     │
         │   web-api           │
         │ (纯 JS,读取 webKey) │
         └──────────┬──────────┘


         ┌─────────────────────┐
         │ 高德 Web 服务 API    │
         └─────────────────────┘

相关文档

Released under the MIT License.