expo-gaode-map-navigation 1.1.5-next.0 → 1.1.5-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/README.md +213 -73
  2. package/android/build.gradle +10 -0
  3. package/android/src/main/cpp/CMakeLists.txt +24 -0
  4. package/android/src/main/cpp/cluster_jni.cpp +848 -0
  5. package/android/src/main/java/expo/modules/gaodemap/map/ExpoGaodeMapModule.kt +616 -92
  6. package/android/src/main/java/expo/modules/gaodemap/map/ExpoGaodeMapOfflineModule.kt +493 -0
  7. package/android/src/main/java/expo/modules/gaodemap/map/ExpoGaodeMapView.kt +230 -14
  8. package/android/src/main/java/expo/modules/gaodemap/map/ExpoGaodeMapViewModule.kt +37 -27
  9. package/android/src/main/java/expo/modules/gaodemap/map/MapPreloadManager.kt +494 -0
  10. package/android/src/main/java/expo/modules/gaodemap/map/companion/BitmapDescriptorCache.kt +30 -0
  11. package/android/src/main/java/expo/modules/gaodemap/map/companion/IconBitmapCache.kt +37 -0
  12. package/android/src/main/java/expo/modules/gaodemap/map/managers/UIManager.kt +76 -0
  13. package/android/src/main/java/expo/modules/gaodemap/map/modules/LocationManager.kt +15 -3
  14. package/android/src/main/java/expo/modules/gaodemap/map/modules/SDKInitializer.kt +4 -59
  15. package/android/src/main/java/expo/modules/gaodemap/map/overlays/CircleView.kt +9 -12
  16. package/android/src/main/java/expo/modules/gaodemap/map/overlays/CircleViewModule.kt +5 -6
  17. package/android/src/main/java/expo/modules/gaodemap/map/overlays/ClusterView.kt +539 -66
  18. package/android/src/main/java/expo/modules/gaodemap/map/overlays/ClusterViewModule.kt +17 -1
  19. package/android/src/main/java/expo/modules/gaodemap/map/overlays/HeatMapView.kt +165 -33
  20. package/android/src/main/java/expo/modules/gaodemap/map/overlays/HeatMapViewModule.kt +15 -3
  21. package/android/src/main/java/expo/modules/gaodemap/map/overlays/MarkerView.kt +1249 -672
  22. package/android/src/main/java/expo/modules/gaodemap/map/overlays/MarkerViewModule.kt +40 -17
  23. package/android/src/main/java/expo/modules/gaodemap/map/overlays/MultiPointView.kt +177 -22
  24. package/android/src/main/java/expo/modules/gaodemap/map/overlays/MultiPointViewModule.kt +11 -3
  25. package/android/src/main/java/expo/modules/gaodemap/map/overlays/PolygonView.kt +57 -14
  26. package/android/src/main/java/expo/modules/gaodemap/map/overlays/PolygonViewModule.kt +9 -5
  27. package/android/src/main/java/expo/modules/gaodemap/map/overlays/PolylineView.kt +90 -63
  28. package/android/src/main/java/expo/modules/gaodemap/map/overlays/PolylineViewModule.kt +7 -3
  29. package/android/src/main/java/expo/modules/gaodemap/map/services/LocationForegroundService.kt +3 -2
  30. package/android/src/main/java/expo/modules/gaodemap/map/utils/BitmapDescriptorCache.kt +20 -0
  31. package/android/src/main/java/expo/modules/gaodemap/map/utils/ClusterNative.kt +13 -0
  32. package/android/src/main/java/expo/modules/gaodemap/map/utils/ColorParser.kt +20 -0
  33. package/android/src/main/java/expo/modules/gaodemap/map/utils/GeometryUtils.kt +515 -0
  34. package/android/src/main/java/expo/modules/gaodemap/map/utils/LatLngParser.kt +91 -0
  35. package/android/src/main/java/expo/modules/gaodemap/map/utils/PermissionHelper.kt +248 -0
  36. package/android/src/main/java/expo/modules/gaodemap/navigation/ExpoGaodeMapNaviView.kt +13 -3
  37. package/android/src/main/java/expo/modules/gaodemap/navigation/ExpoGaodeMapNaviViewModule.kt +4 -0
  38. package/build/ExpoGaodeMapNaviView.d.ts +7 -7
  39. package/build/ExpoGaodeMapNaviView.js +10 -11
  40. package/build/index.d.ts +1 -1
  41. package/build/index.js +2 -2
  42. package/build/map/ExpoGaodeMapModule.d.ts +2 -201
  43. package/build/map/ExpoGaodeMapModule.js +586 -18
  44. package/build/map/ExpoGaodeMapOfflineModule.d.ts +139 -0
  45. package/build/map/ExpoGaodeMapOfflineModule.js +8 -0
  46. package/build/map/ExpoGaodeMapView.js +66 -58
  47. package/build/map/components/FoldableMapView.d.ts +38 -0
  48. package/build/map/components/FoldableMapView.js +209 -0
  49. package/build/map/components/MapContext.d.ts +12 -0
  50. package/build/map/components/MapContext.js +54 -0
  51. package/build/map/components/MapUI.d.ts +18 -0
  52. package/build/map/components/MapUI.js +29 -0
  53. package/build/map/components/overlays/Circle.js +34 -3
  54. package/build/map/components/overlays/Cluster.d.ts +3 -1
  55. package/build/map/components/overlays/Cluster.js +31 -2
  56. package/build/map/components/overlays/HeatMap.d.ts +3 -1
  57. package/build/map/components/overlays/HeatMap.js +33 -3
  58. package/build/map/components/overlays/Marker.d.ts +1 -1
  59. package/build/map/components/overlays/Marker.js +37 -32
  60. package/build/map/components/overlays/MultiPoint.js +1 -1
  61. package/build/map/components/overlays/Polygon.js +30 -3
  62. package/build/map/components/overlays/Polyline.js +36 -3
  63. package/build/map/index.d.ts +25 -5
  64. package/build/map/index.js +59 -18
  65. package/build/map/types/common.types.d.ts +40 -0
  66. package/build/map/types/common.types.js +0 -4
  67. package/build/map/types/index.d.ts +3 -2
  68. package/build/map/types/map-view.types.d.ts +108 -3
  69. package/build/map/types/native-module.types.d.ts +363 -0
  70. package/build/map/types/native-module.types.js +5 -0
  71. package/build/map/types/offline.types.d.ts +132 -0
  72. package/build/map/types/offline.types.js +5 -0
  73. package/build/map/types/overlays.types.d.ts +137 -24
  74. package/build/map/utils/ErrorHandler.d.ts +110 -0
  75. package/build/map/utils/ErrorHandler.js +421 -0
  76. package/build/map/utils/GeoUtils.d.ts +20 -0
  77. package/build/map/utils/GeoUtils.js +76 -0
  78. package/build/map/utils/OfflineMapManager.d.ts +148 -0
  79. package/build/map/utils/OfflineMapManager.js +217 -0
  80. package/build/map/utils/PermissionUtils.d.ts +91 -0
  81. package/build/map/utils/PermissionUtils.js +255 -0
  82. package/build/map/utils/PlatformDetector.d.ts +102 -0
  83. package/build/map/utils/PlatformDetector.js +186 -0
  84. package/build/types/naviview.types.d.ts +6 -1
  85. package/expo-module.config.json +12 -10
  86. package/ios/ExpoGaodeMapNavigation.podspec +9 -0
  87. package/ios/map/ExpoGaodeMapModule.swift +485 -75
  88. package/ios/map/ExpoGaodeMapOfflineModule.swift +479 -0
  89. package/ios/map/ExpoGaodeMapView.swift +611 -62
  90. package/ios/map/ExpoGaodeMapViewModule.swift +48 -26
  91. package/ios/map/MapPreloadManager.swift +348 -0
  92. package/ios/map/cpp/ClusterEngine.cpp +110 -0
  93. package/ios/map/cpp/ClusterEngine.hpp +20 -0
  94. package/ios/map/cpp/ColorParser.cpp +135 -0
  95. package/ios/map/cpp/ColorParser.hpp +14 -0
  96. package/ios/map/cpp/GeometryEngine.cpp +574 -0
  97. package/ios/map/cpp/GeometryEngine.hpp +159 -0
  98. package/ios/map/cpp/QuadTree.cpp +92 -0
  99. package/ios/map/cpp/QuadTree.hpp +42 -0
  100. package/ios/map/cpp/README.md +55 -0
  101. package/ios/map/cpp/tests/benchmark_js.js +41 -0
  102. package/ios/map/cpp/tests/run.sh +17 -0
  103. package/ios/map/cpp/tests/test_main.cpp +276 -0
  104. package/ios/map/managers/UIManager.swift +72 -1
  105. package/ios/map/modules/LocationManager.swift +123 -166
  106. package/ios/map/overlays/CircleView.swift +16 -32
  107. package/ios/map/overlays/CircleViewModule.swift +12 -12
  108. package/ios/map/overlays/ClusterAnnotation.swift +32 -0
  109. package/ios/map/overlays/ClusterView.swift +331 -45
  110. package/ios/map/overlays/ClusterViewModule.swift +20 -6
  111. package/ios/map/overlays/HeatMapView.swift +135 -32
  112. package/ios/map/overlays/HeatMapViewModule.swift +20 -8
  113. package/ios/map/overlays/MarkerView.swift +613 -130
  114. package/ios/map/overlays/MarkerViewModule.swift +38 -18
  115. package/ios/map/overlays/MultiPointView.swift +168 -10
  116. package/ios/map/overlays/MultiPointViewModule.swift +27 -5
  117. package/ios/map/overlays/PolygonView.swift +62 -23
  118. package/ios/map/overlays/PolygonViewModule.swift +18 -12
  119. package/ios/map/overlays/PolylineView.swift +21 -13
  120. package/ios/map/overlays/PolylineViewModule.swift +18 -12
  121. package/ios/map/utils/ClusterNative.h +96 -0
  122. package/ios/map/utils/ClusterNative.mm +377 -0
  123. package/ios/map/utils/ColorParser.swift +12 -1
  124. package/ios/map/utils/CppBridging.mm +13 -0
  125. package/ios/map/utils/GeometryUtils.swift +34 -0
  126. package/ios/map/utils/LatLngParser.swift +87 -0
  127. package/ios/map/utils/PermissionManager.swift +135 -6
  128. package/package.json +2 -2
  129. package/build/map/ExpoGaodeMap.types.d.ts +0 -41
  130. package/build/map/ExpoGaodeMap.types.js +0 -24
  131. package/build/map/utils/EventManager.d.ts +0 -10
  132. package/build/map/utils/EventManager.js +0 -26
  133. package/build/map/utils/ModuleLoader.d.ts +0 -73
  134. package/build/map/utils/ModuleLoader.js +0 -112
package/README.md CHANGED
@@ -1,62 +1,68 @@
1
1
  # expo-gaode-map-navigation
2
2
 
3
- 高德地图“导航一体化”模块。内置地图渲染能力与导航能力,提供从地图展示到路径规划与实时导航的完整解决方案。
3
+ 高德地图“导航一体化”模块。内置地图渲染能力与导航能力,提供从地图展示到路径规划、实时导航的完整解决方案。
4
4
 
5
- ## 模块定位与使用约束
5
+ ## 特性
6
6
 
7
- - 独立使用:本模块已封装地图相关能力(MapView/覆盖物等)与导航能力,不需要、也不应同时安装核心地图包。
8
- - 禁止共存:请勿与 `expo-gaode-map` 同时安装或链接。两者均包含地图 SDK,Android 上会产生 `3dmap` vs `navi-3dmap` 的二进制冲突。
9
- - 简化依赖:安装本模块即可获得地图 + 导航全量能力,无需额外地图依赖。
10
-
11
- ## 功能特性
12
-
13
- - 🗺️ 地图渲染:内置地图视图与常用覆盖物(标注、折线、多边形、热力图、聚合等)
14
- - 🧭 路径与导航:驾车、步行、骑行等多种出行策略与实时引导
15
- - ⚙️ 策略丰富:最快、最短、避拥堵、少收费、少红绿灯等
16
- - 🚗 复杂路线:支持多途经点、限行考虑、分段规划
17
- - 🌐 Web API 协作:可与 `expo-gaode-map-web-api` 配合,统一通过基础初始化下发 Web Key 后使用
7
+ - 🗺️ **地图渲染**:内置完整地图能力,支持 Marker、Polyline、Polygon、Circle、Cluster、HeatMap 等覆盖物。
8
+ - 🚗 **多模式路径规划**:支持驾车、步行、骑行、电动车、货车、摩托车等多种出行方式。
9
+ - 🧭 **实时导航 UI**:提供 `NaviView` 组件,内置完整的导航界面、语音播报、转向指引、路况显示等。
10
+ - 🛣️ **独立路径规划**:支持“先算路、再导航”的高级模式,可实现多路线对比与选择。
11
+ - ⚙️ **策略丰富**:支持速度优先、避让拥堵、少收费、不走高速等多种算路策略。
12
+ - � **开箱即用**:封装了 Android/iOS 原生导航 SDK,统一 JS 接口。
18
13
 
19
14
  ## 安装
20
15
 
21
- 仅安装本模块(不要安装 `expo-gaode-map`):
16
+ 本模块已包含地图与导航的所有能力,**不需要**、也不应同时安装 `expo-gaode-map`。
22
17
 
23
18
  ```bash
24
19
  # bun
25
20
  bun add expo-gaode-map-navigation
26
21
 
27
- # or yarn
22
+ # yarn
28
23
  yarn add expo-gaode-map-navigation
29
24
 
25
+ # npm
26
+ npm install expo-gaode-map-navigation
30
27
  ```
31
28
 
32
- 如果项目中已安装过核心地图包,请先移除避免冲突:
29
+ **⚠️ 重要提示:**
30
+ 如果项目中已安装 `expo-gaode-map`,请务必先卸载,否则会导致 Android 端二进制冲突(`3dmap` vs `navi-3dmap`)。`expo-gaode-map` 和 `expo-gaode-map-navigation` 由于 SDK 冲突不能同时安装,二选一使用。
33
31
 
34
- ```bash
35
- npm uninstall expo-gaode-map
36
- # or: yarn remove expo-gaode-map
37
- # or: bun remove expo-gaode-map
38
- ```
39
32
 
40
- ## 初始化
33
+ ### Config Plugin 配置(推荐)
41
34
 
42
- 在应用启动阶段初始化 SDK Key(Android/iOS 原生 Key 与可选的 Web API Key):
35
+ `app.json` 中配置,自动设置原生 API Key 和权限:
43
36
 
44
- ```ts
45
- import { ExpoGaodeMapModule } from 'expo-gaode-map-navigation';
37
+ ```json
38
+ {
39
+ "expo": {
40
+ "plugins": [
41
+ [
42
+ "expo-gaode-map-navigation",
43
+ {
44
+ "androidKey": "your-android-key",
45
+ "iosKey": "your-ios-key"
46
+ }
47
+ ]
48
+ ]
49
+ }
50
+ }
51
+ ```
52
+ 配置后重新构建:
46
53
 
47
- ExpoGaodeMapModule.initSDK({
48
- androidKey: 'your-android-key',
49
- iosKey: 'your-ios-key',
50
- webKey: 'your-web-api-key', // 可选;若使用 Web API 包,建议一并下发
51
- });
54
+ ```bash
55
+ npx expo prebuild --clean
56
+ npx expo run:android
57
+ npx expo run:ios
52
58
  ```
53
59
 
54
- 说明:
55
- - 如后续使用 `expo-gaode-map-web-api`,建议同时传入 `webKey`,该包会从本模块运行时读取 `webKey`,实现“无参构造”的简化用法(new GaodeWebAPI())。
56
60
 
57
- ## 地图与导航基础用法
61
+ ## 快速开始
62
+
63
+ ### 1. 显示地图
58
64
 
59
- 地图视图(内置地图能力):
65
+ 使用内置的 `MapView` 组件显示地图:
60
66
 
61
67
  ```tsx
62
68
  import React from 'react';
@@ -70,13 +76,12 @@ export default function BasicMapScreen() {
70
76
  style={{ flex: 1 }}
71
77
  initialCameraPosition={{
72
78
  target: { latitude: 39.909186, longitude: 116.397411 },
73
- zoom: 12,
79
+ zoom: 15,
74
80
  }}
75
81
  >
76
82
  <Marker
77
83
  position={{ latitude: 39.909186, longitude: 116.397411 }}
78
84
  title="天安门"
79
- snippet="北京·东城区"
80
85
  />
81
86
  </MapView>
82
87
  </View>
@@ -84,69 +89,204 @@ export default function BasicMapScreen() {
84
89
  }
85
90
  ```
86
91
 
87
- 路径规划与导航(示例):
92
+ ### 2. 嵌入导航视图
88
93
 
89
- ```ts
90
- import { calculateRoute, DriveStrategy } from 'expo-gaode-map-navigation';
94
+ 使用 `NaviView` 组件直接嵌入导航界面:
95
+
96
+ ```tsx
97
+ import React, { useEffect, useRef } from 'react';
98
+ import { View } from 'react-native';
99
+ import { NaviView, type NaviViewRef } from 'expo-gaode-map-navigation';
100
+
101
+ export default function NavigationScreen() {
102
+ const naviRef = useRef<NaviViewRef>(null);
103
+
104
+ useEffect(() => {
105
+ // 延迟 1 秒后开始导航
106
+ const timer = setTimeout(() => {
107
+ if (naviRef.current) {
108
+ naviRef.current.startNavigation(
109
+ { latitude: 39.909186, longitude: 116.397411 }, // 起点
110
+ { latitude: 39.99, longitude: 116.47 }, // 终点
111
+ 0 // 0: GPS导航, 1: 模拟导航
112
+ );
113
+ }
114
+ }, 1000);
115
+ return () => clearTimeout(timer);
116
+ }, []);
117
+
118
+ return (
119
+ <View style={{ flex: 1 }}>
120
+ <NaviView
121
+ ref={naviRef}
122
+ style={{ flex: 1 }}
123
+ showCamera={true} // 显示摄像头
124
+ enableVoice={true} // 开启语音
125
+ />
126
+ </View>
127
+ );
128
+ }
129
+ ```
130
+
131
+ ## 详细用法
132
+
133
+ ### 路径规划 (API)
134
+
135
+ 使用 `calculateRoute` 方法进行路径计算,不涉及 UI 显示,适合用于获取距离、时间或绘制路线。
136
+
137
+ #### 驾车路径规划
138
+
139
+ ```typescript
140
+ import { calculateRoute, RouteType, DriveStrategy } from 'expo-gaode-map-navigation';
91
141
 
92
142
  const result = await calculateRoute({
93
- type: 'drive',
143
+ type: RouteType.DRIVE,
94
144
  from: { latitude: 39.9, longitude: 116.4 },
95
145
  to: { latitude: 39.91, longitude: 116.41 },
96
- strategy: DriveStrategy.FASTEST,
146
+ strategy: DriveStrategy.FASTEST, // 速度优先
147
+ avoidRoad: '京通快速路', // 避让道路名称
97
148
  });
98
149
 
99
- // 结果包含距离/时长/分步指引等
150
+ console.log(`总距离: ${result.routes[0].distance}米`);
151
+ console.log(`预计耗时: ${result.routes[0].duration}秒`);
100
152
  ```
101
153
 
102
- 说明:
103
- - 地图组件与导航能力均来自 `expo-gaode-map-navigation`,无需、也不应从 `expo-gaode-map` 引入任何 API。
154
+ #### 步行/骑行路径规划
104
155
 
105
- ## 路径规划(原生与 Web API 双方案)
156
+ ```typescript
157
+ import { calculateRoute, RouteType, RideStrategy } from 'expo-gaode-map-navigation';
106
158
 
107
- 本模块同时支持“原生导航引擎路径规划”和“Web API 路径规划”,可按业务场景自由选择或组合使用:
159
+ // 骑行
160
+ const rideResult = await calculateRoute({
161
+ type: RouteType.RIDE,
162
+ from: { latitude: 39.9, longitude: 116.4 },
163
+ to: { latitude: 39.91, longitude: 116.41 },
164
+ strategy: RideStrategy.FASTEST,
165
+ });
108
166
 
109
- - 原生方案(推荐用于移动端实时导航):端侧原生 SDK 能力,更适合实时引导、语音播报、复杂交通路况处理、弱网/离线等。
110
- - Web API 方案(推荐用于快速查询/对比/多端一致):通过 `expo-gaode-map-web-api` 发起 HTTP 请求,便于统一计算逻辑、方案对比或与服务端配合。
167
+ // 步行
168
+ const walkResult = await calculateRoute({
169
+ type: RouteType.WALK,
170
+ from: { latitude: 39.9, longitude: 116.4 },
171
+ to: { latitude: 39.91, longitude: 116.41 },
172
+ multiple: true, // 返回多条路线
173
+ });
174
+ ```
111
175
 
112
- 原生方案示例:
113
- ```ts
114
- import { calculateRoute, DriveStrategy } from 'expo-gaode-map-navigation';
176
+ #### 货车路径规划
115
177
 
116
- const result = await calculateRoute({
117
- type: 'drive',
178
+ ```typescript
179
+ import { calculateRoute, RouteType, TruckSize } from 'expo-gaode-map-navigation';
180
+
181
+ const truckResult = await calculateRoute({
182
+ type: RouteType.TRUCK,
118
183
  from: { latitude: 39.9, longitude: 116.4 },
119
184
  to: { latitude: 39.91, longitude: 116.41 },
120
- strategy: DriveStrategy.FASTEST,
185
+ size: TruckSize.MEDIUM, // 中型货车
186
+ height: 3.5, // 高度 3.5m
187
+ load: 10, // 载重 10吨
121
188
  });
122
-
123
- // result 包含距离/时长/分步指引等原生返回
124
189
  ```
125
190
 
126
- Web API 方案示例(需在初始化时提供 webKey):
127
- ```ts
128
- import { GaodeWebAPI } from 'expo-gaode-map-web-api';
191
+ ### 独立路径规划 (Advanced)
192
+
193
+ “独立路径规划”允许你先计算路线,并在地图上展示多条方案,用户选择其中一条后再开始导航。这通常比直接开始导航体验更好。
194
+
195
+ ```typescript
196
+ import {
197
+ independentDriveRoute,
198
+ selectIndependentRoute,
199
+ startNaviWithIndependentPath,
200
+ DriveStrategy
201
+ } from 'expo-gaode-map-navigation';
202
+
203
+ // 1. 发起算路(不会自动开始导航)
204
+ const result = await independentDriveRoute({
205
+ from: { latitude: 39.9, longitude: 116.4 },
206
+ to: { latitude: 39.91, longitude: 116.41 },
207
+ strategy: DriveStrategy.AVOID_CONGESTION,
208
+ });
129
209
 
130
- // 无参构造:从 expo-gaode-map-navigation 初始化中动态解析 webKey
131
- const api = new GaodeWebAPI();
210
+ // 2. 选择某一条路线(例如 index=1 的路线)
211
+ // 这通常配合地图上的点击事件,高亮显示某条路线
212
+ await selectIndependentRoute({
213
+ routeId: result.routes[1].id
214
+ });
132
215
 
133
- // 驾车路径规划(Web API)
134
- const res = await api.route.driving('116.400000,39.900000', '116.410000,39.910000', {
135
- show_fields: 'cost,navi',
216
+ // 3. 使用当前选中的路线开始导航
217
+ await startNaviWithIndependentPath({
218
+ emulator: true, // 开启模拟导航
136
219
  });
220
+ ```
221
+
222
+ ### 地图组件 (Map)
137
223
 
138
- // res.route.paths[0] 中包含距离/时长/导航步骤等
224
+ 模块导出了完整的地图组件,与 `expo-gaode-map` API 保持一致。
225
+
226
+ ```tsx
227
+ import { MapView, Circle, Polygon } from 'expo-gaode-map-navigation';
228
+
229
+ <MapView style={{ flex: 1 }}>
230
+ {/* 圆形覆盖物 */}
231
+ <Circle
232
+ center={{ latitude: 39.9, longitude: 116.4 }}
233
+ radius={1000}
234
+ fillColor="rgba(0,0,255, 0.3)"
235
+ strokeColor="rgba(0,0,255, 0.5)"
236
+ />
237
+
238
+ {/* 多边形 */}
239
+ <Polygon
240
+ points={[
241
+ { latitude: 39.9, longitude: 116.4 },
242
+ { latitude: 39.91, longitude: 116.41 },
243
+ { latitude: 39.92, longitude: 116.42 },
244
+ ]}
245
+ strokeWidth={2}
246
+ />
247
+ </MapView>
139
248
  ```
140
249
 
141
- 选择建议:
142
- - 实时导航/引导优先原生方案;
143
- - 方案对比、批量测算、多端统一优先 Web API;也可结合两者,在端上落地选择逻辑。
250
+ ## API 参考
251
+
252
+ ### DriveStrategy (驾车策略)
253
+
254
+ | 值 | 说明 |
255
+ |---|---|
256
+ | `FASTEST` (0) | 速度优先(时间最短) |
257
+ | `FEE_FIRST` (1) | 费用优先(少收费) |
258
+ | `SHORTEST` (2) | 距离优先 |
259
+ | `NO_HIGHWAY` (5) | 不走高速 |
260
+ | `AVOID_CONGESTION` (4) | 躲避拥堵 |
261
+ | ... | 更多策略请参考类型定义 |
262
+
263
+ ### NaviView Props
264
+
265
+ | 属性 | 类型 | 说明 |
266
+ |---|---|---|
267
+ | `naviType` | number | 导航类型(0: GPS, 1: 模拟) |
268
+ | `showCrossImage` | boolean | 是否显示路口放大图 |
269
+ | `showCamera` | boolean | 是否显示摄像头 |
270
+ | `showTrafficButton` | boolean | 是否显示路况按钮 |
271
+ | `enableVoice` | boolean | 是否开启语音播报 |
272
+ | `onArrive` | function | 到达目的地回调 |
273
+ | `onNaviInfoUpdate` | function | 导航信息更新(剩余距离、时间等) |
274
+
275
+ ## 注意事项
276
+
277
+ 1. **二进制冲突**:严禁与 `expo-gaode-map` 共存。本模块已包含 `3dmap` SDK。
278
+ 2. **Web API**:如果需要更灵活的 HTTP 算路(如公交跨城规划、Web端展示),推荐配合 `expo-gaode-map-web-api` 使用。
279
+ 3. **权限**:使用导航功能前,请确保应用已获取定位权限(`ACCESS_FINE_LOCATION`)。
280
+
144
281
 
145
- ## Android 注意事项
282
+ ## 📚 文档与资源
146
283
 
147
- - 本模块内部使用 `navi-3dmap` 体系,已包含地图能力;请勿同时引入核心 `3dmap` 体系以免二进制冲突。
148
- - 若历史项目从核心包迁移至本模块,务必移除 `expo-gaode-map` 依赖与其 native 配置(Gradle/CocoaPods 链接等)。
284
+ - [在线文档](https://tomwq.github.io/expo-gaode-map/api/navigation.html)
285
+ - [GitHub 仓库](https://github.com/TomWq/expo-gaode-map/packages/navigation)
286
+ - [示例项目(导航)](https://github.com/TomWq/expo-gaode-map-navigation-example)
287
+ - [高德地图开放平台](https://lbs.amap.com/)
288
+ - [Expo Modules API](https://docs.expo.dev/modules/overview/)
149
289
 
150
- ## 许可
290
+ ## License
151
291
 
152
- MIT
292
+ MIT License
@@ -34,6 +34,16 @@ android {
34
34
  defaultConfig {
35
35
  versionCode 1
36
36
  versionName "1.0.0"
37
+ externalNativeBuild {
38
+ cmake {
39
+ cppFlags "-std=c++17"
40
+ }
41
+ }
42
+ }
43
+ externalNativeBuild {
44
+ cmake {
45
+ path "src/main/cpp/CMakeLists.txt"
46
+ }
37
47
  }
38
48
  lintOptions {
39
49
  abortOnError false
@@ -0,0 +1,24 @@
1
+ cmake_minimum_required(VERSION 3.22.1)
2
+
3
+ project(gaodecluster)
4
+
5
+ set(CMAKE_CXX_STANDARD 17)
6
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
7
+
8
+ add_library(gaodecluster SHARED
9
+ cluster_jni.cpp
10
+ ../../../../shared/cpp/ClusterEngine.cpp
11
+ ../../../../shared/cpp/QuadTree.cpp
12
+ ../../../../shared/cpp/GeometryEngine.cpp
13
+ ../../../../shared/cpp/ColorParser.cpp
14
+ )
15
+
16
+ target_include_directories(gaodecluster PRIVATE
17
+ ../../../../shared/cpp
18
+ )
19
+
20
+ find_library(log-lib log)
21
+
22
+ target_link_libraries(gaodecluster
23
+ ${log-lib}
24
+ )