expo-gaode-map-navigation 2.0.18 → 2.0.19

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 (261) hide show
  1. package/android/build.gradle +4 -25
  2. package/build/ExpoGaodeMapNaviView.js +2 -1
  3. package/build/ExpoGaodeMapNaviView.js.map +1 -1
  4. package/build/ExpoGaodeMapNavigationModule.d.ts +1 -1
  5. package/build/ExpoGaodeMapNavigationModule.d.ts.map +1 -1
  6. package/build/ExpoGaodeMapNavigationModule.js.map +1 -1
  7. package/build/map/ExpoGaodeMapModule.d.ts +3 -2
  8. package/build/map/ExpoGaodeMapModule.d.ts.map +1 -1
  9. package/build/map/ExpoGaodeMapModule.js +3 -1
  10. package/build/map/ExpoGaodeMapModule.js.map +1 -1
  11. package/build/map/ExpoGaodeMapOfflineModule.js +1 -1
  12. package/build/map/ExpoGaodeMapOfflineModule.js.map +1 -1
  13. package/build/map/ExpoGaodeMapView.js +2 -8
  14. package/build/map/ExpoGaodeMapView.js.map +1 -1
  15. package/build/map/components/FoldableMapView.d.ts +3 -2
  16. package/build/map/components/FoldableMapView.d.ts.map +1 -1
  17. package/build/map/components/FoldableMapView.js +2 -1
  18. package/build/map/components/FoldableMapView.js.map +1 -1
  19. package/build/map/components/MapUI.js +2 -1
  20. package/build/map/components/MapUI.js.map +1 -1
  21. package/build/map/components/overlays/Circle.d.ts +1 -1
  22. package/build/map/components/overlays/Circle.d.ts.map +1 -1
  23. package/build/map/components/overlays/Circle.js +2 -1
  24. package/build/map/components/overlays/Circle.js.map +1 -1
  25. package/build/map/components/overlays/Cluster.d.ts +1 -1
  26. package/build/map/components/overlays/Cluster.d.ts.map +1 -1
  27. package/build/map/components/overlays/Cluster.js +2 -1
  28. package/build/map/components/overlays/Cluster.js.map +1 -1
  29. package/build/map/components/overlays/HeatMap.d.ts +1 -1
  30. package/build/map/components/overlays/HeatMap.d.ts.map +1 -1
  31. package/build/map/components/overlays/HeatMap.js +2 -1
  32. package/build/map/components/overlays/HeatMap.js.map +1 -1
  33. package/build/map/components/overlays/Marker.d.ts +1 -1
  34. package/build/map/components/overlays/Marker.d.ts.map +1 -1
  35. package/build/map/components/overlays/Marker.js +2 -5
  36. package/build/map/components/overlays/Marker.js.map +1 -1
  37. package/build/map/components/overlays/MultiPoint.d.ts +1 -2
  38. package/build/map/components/overlays/MultiPoint.d.ts.map +1 -1
  39. package/build/map/components/overlays/MultiPoint.js +2 -1
  40. package/build/map/components/overlays/MultiPoint.js.map +1 -1
  41. package/build/map/components/overlays/Polygon.d.ts +1 -1
  42. package/build/map/components/overlays/Polygon.d.ts.map +1 -1
  43. package/build/map/components/overlays/Polygon.js +2 -1
  44. package/build/map/components/overlays/Polygon.js.map +1 -1
  45. package/build/map/components/overlays/Polyline.d.ts +1 -1
  46. package/build/map/components/overlays/Polyline.d.ts.map +1 -1
  47. package/build/map/components/overlays/Polyline.js +2 -1
  48. package/build/map/components/overlays/Polyline.js.map +1 -1
  49. package/build/map/search/ExpoGaodeMapSearchModule.d.ts +1 -1
  50. package/build/map/search/ExpoGaodeMapSearchModule.d.ts.map +1 -1
  51. package/build/map/search/ExpoGaodeMapSearchModule.js.map +1 -1
  52. package/build/map/types/common.types.d.ts +1 -1
  53. package/build/map/types/common.types.d.ts.map +1 -1
  54. package/build/map/types/common.types.js.map +1 -1
  55. package/build/map/types/map-view.types.d.ts +2 -2
  56. package/build/map/types/map-view.types.d.ts.map +1 -1
  57. package/build/map/types/map-view.types.js.map +1 -1
  58. package/build/map/utils/GeoUtils.d.ts +1 -1
  59. package/build/map/utils/GeoUtils.d.ts.map +1 -1
  60. package/build/map/utils/GeoUtils.js +2 -2
  61. package/build/map/utils/GeoUtils.js.map +1 -1
  62. package/build/route-geometry.d.ts.map +1 -1
  63. package/build/route-geometry.js +24 -8
  64. package/build/route-geometry.js.map +1 -1
  65. package/build/src/ExpoGaodeMapNaviView.d.ts +67 -0
  66. package/build/src/ExpoGaodeMapNaviView.d.ts.map +1 -0
  67. package/build/src/ExpoGaodeMapNaviView.js +138 -0
  68. package/build/src/ExpoGaodeMapNaviView.js.map +1 -0
  69. package/build/src/ExpoGaodeMapNavigation.types.d.ts +2 -0
  70. package/build/src/ExpoGaodeMapNavigation.types.d.ts.map +1 -0
  71. package/build/src/ExpoGaodeMapNavigation.types.js +3 -0
  72. package/build/src/ExpoGaodeMapNavigation.types.js.map +1 -0
  73. package/build/src/ExpoGaodeMapNavigationModule.d.ts +4 -0
  74. package/build/src/ExpoGaodeMapNavigationModule.d.ts.map +1 -0
  75. package/build/src/ExpoGaodeMapNavigationModule.js +27 -0
  76. package/build/src/ExpoGaodeMapNavigationModule.js.map +1 -0
  77. package/build/src/index.d.ts +47 -0
  78. package/build/src/index.d.ts.map +1 -0
  79. package/build/src/index.js +48 -0
  80. package/build/src/index.js.map +1 -0
  81. package/build/src/map/ExpoGaodeMapModule.d.ts +256 -0
  82. package/build/src/map/ExpoGaodeMapModule.d.ts.map +1 -0
  83. package/build/src/map/ExpoGaodeMapModule.js +813 -0
  84. package/build/src/map/ExpoGaodeMapModule.js.map +1 -0
  85. package/build/src/map/ExpoGaodeMapOfflineModule.d.ts +145 -0
  86. package/build/src/map/ExpoGaodeMapOfflineModule.d.ts.map +1 -0
  87. package/build/src/map/ExpoGaodeMapOfflineModule.js +24 -0
  88. package/build/src/map/ExpoGaodeMapOfflineModule.js.map +1 -0
  89. package/build/src/map/ExpoGaodeMapView.d.ts +23 -0
  90. package/build/src/map/ExpoGaodeMapView.d.ts.map +1 -0
  91. package/build/src/map/ExpoGaodeMapView.js +173 -0
  92. package/build/src/map/ExpoGaodeMapView.js.map +1 -0
  93. package/build/src/map/components/FoldableMapView.d.ts +39 -0
  94. package/build/src/map/components/FoldableMapView.d.ts.map +1 -0
  95. package/build/src/map/components/FoldableMapView.js +171 -0
  96. package/build/src/map/components/FoldableMapView.js.map +1 -0
  97. package/build/src/map/components/MapContext.d.ts +13 -0
  98. package/build/src/map/components/MapContext.d.ts.map +1 -0
  99. package/build/src/map/components/MapContext.js +18 -0
  100. package/build/src/map/components/MapContext.js.map +1 -0
  101. package/build/src/map/components/MapUI.d.ts +19 -0
  102. package/build/src/map/components/MapUI.d.ts.map +1 -0
  103. package/build/src/map/components/MapUI.js +24 -0
  104. package/build/src/map/components/MapUI.js.map +1 -0
  105. package/build/src/map/components/overlays/Circle.d.ts +13 -0
  106. package/build/src/map/components/overlays/Circle.d.ts.map +1 -0
  107. package/build/src/map/components/overlays/Circle.js +20 -0
  108. package/build/src/map/components/overlays/Circle.js.map +1 -0
  109. package/build/src/map/components/overlays/Cluster.d.ts +12 -0
  110. package/build/src/map/components/overlays/Cluster.d.ts.map +1 -0
  111. package/build/src/map/components/overlays/Cluster.js +16 -0
  112. package/build/src/map/components/overlays/Cluster.js.map +1 -0
  113. package/build/src/map/components/overlays/HeatMap.d.ts +12 -0
  114. package/build/src/map/components/overlays/HeatMap.d.ts.map +1 -0
  115. package/build/src/map/components/overlays/HeatMap.js +46 -0
  116. package/build/src/map/components/overlays/HeatMap.js.map +1 -0
  117. package/build/src/map/components/overlays/Marker.d.ts +16 -0
  118. package/build/src/map/components/overlays/Marker.d.ts.map +1 -0
  119. package/build/src/map/components/overlays/Marker.js +125 -0
  120. package/build/src/map/components/overlays/Marker.js.map +1 -0
  121. package/build/src/map/components/overlays/MultiPoint.d.ts +9 -0
  122. package/build/src/map/components/overlays/MultiPoint.d.ts.map +1 -0
  123. package/build/src/map/components/overlays/MultiPoint.js +15 -0
  124. package/build/src/map/components/overlays/MultiPoint.js.map +1 -0
  125. package/build/src/map/components/overlays/Polygon.d.ts +12 -0
  126. package/build/src/map/components/overlays/Polygon.d.ts.map +1 -0
  127. package/build/src/map/components/overlays/Polygon.js +20 -0
  128. package/build/src/map/components/overlays/Polygon.js.map +1 -0
  129. package/build/src/map/components/overlays/Polyline.d.ts +12 -0
  130. package/build/src/map/components/overlays/Polyline.d.ts.map +1 -0
  131. package/build/src/map/components/overlays/Polyline.js +20 -0
  132. package/build/src/map/components/overlays/Polyline.js.map +1 -0
  133. package/build/src/map/components/overlays/index.d.ts +8 -0
  134. package/build/src/map/components/overlays/index.d.ts.map +1 -0
  135. package/build/src/map/components/overlays/index.js +8 -0
  136. package/build/src/map/components/overlays/index.js.map +1 -0
  137. package/build/src/map/index.d.ts +35 -0
  138. package/build/src/map/index.d.ts.map +1 -0
  139. package/build/src/map/index.js +48 -0
  140. package/build/src/map/index.js.map +1 -0
  141. package/build/src/map/search/ExpoGaodeMapSearch.types.d.ts +340 -0
  142. package/build/src/map/search/ExpoGaodeMapSearch.types.d.ts.map +1 -0
  143. package/build/src/map/search/ExpoGaodeMapSearch.types.js +19 -0
  144. package/build/src/map/search/ExpoGaodeMapSearch.types.js.map +1 -0
  145. package/build/src/map/search/ExpoGaodeMapSearchModule.d.ts +74 -0
  146. package/build/src/map/search/ExpoGaodeMapSearchModule.d.ts.map +1 -0
  147. package/build/src/map/search/ExpoGaodeMapSearchModule.js +48 -0
  148. package/build/src/map/search/ExpoGaodeMapSearchModule.js.map +1 -0
  149. package/build/src/map/search/index.d.ts +156 -0
  150. package/build/src/map/search/index.d.ts.map +1 -0
  151. package/build/src/map/search/index.js +171 -0
  152. package/build/src/map/search/index.js.map +1 -0
  153. package/build/src/map/types/common.types.d.ts +199 -0
  154. package/build/src/map/types/common.types.d.ts.map +1 -0
  155. package/build/src/map/types/common.types.js +33 -0
  156. package/build/src/map/types/common.types.js.map +1 -0
  157. package/build/src/map/types/index.d.ts +13 -0
  158. package/build/src/map/types/index.d.ts.map +1 -0
  159. package/build/src/map/types/index.js +7 -0
  160. package/build/src/map/types/index.js.map +1 -0
  161. package/build/src/map/types/location.types.d.ts +358 -0
  162. package/build/src/map/types/location.types.d.ts.map +1 -0
  163. package/build/src/map/types/location.types.js +93 -0
  164. package/build/src/map/types/location.types.js.map +1 -0
  165. package/build/src/map/types/map-view.types.d.ts +340 -0
  166. package/build/src/map/types/map-view.types.d.ts.map +1 -0
  167. package/build/src/map/types/map-view.types.js +6 -0
  168. package/build/src/map/types/map-view.types.js.map +1 -0
  169. package/build/src/map/types/native-module.types.d.ts +395 -0
  170. package/build/src/map/types/native-module.types.d.ts.map +1 -0
  171. package/build/src/map/types/native-module.types.js +5 -0
  172. package/build/src/map/types/native-module.types.js.map +1 -0
  173. package/build/src/map/types/offline.types.d.ts +133 -0
  174. package/build/src/map/types/offline.types.d.ts.map +1 -0
  175. package/build/src/map/types/offline.types.js +5 -0
  176. package/build/src/map/types/offline.types.js.map +1 -0
  177. package/build/src/map/types/overlays.types.d.ts +456 -0
  178. package/build/src/map/types/overlays.types.d.ts.map +1 -0
  179. package/build/src/map/types/overlays.types.js +6 -0
  180. package/build/src/map/types/overlays.types.js.map +1 -0
  181. package/build/src/map/types/route-playback.types.d.ts +28 -0
  182. package/build/src/map/types/route-playback.types.d.ts.map +1 -0
  183. package/build/src/map/types/route-playback.types.js +2 -0
  184. package/build/src/map/types/route-playback.types.js.map +1 -0
  185. package/build/src/map/utils/ErrorHandler.d.ts +121 -0
  186. package/build/src/map/utils/ErrorHandler.d.ts.map +1 -0
  187. package/build/src/map/utils/ErrorHandler.js +470 -0
  188. package/build/src/map/utils/ErrorHandler.js.map +1 -0
  189. package/build/src/map/utils/GeoUtils.d.ts +21 -0
  190. package/build/src/map/utils/GeoUtils.d.ts.map +1 -0
  191. package/build/src/map/utils/GeoUtils.js +78 -0
  192. package/build/src/map/utils/GeoUtils.js.map +1 -0
  193. package/build/src/map/utils/OfflineMapManager.d.ts +153 -0
  194. package/build/src/map/utils/OfflineMapManager.d.ts.map +1 -0
  195. package/build/src/map/utils/OfflineMapManager.js +217 -0
  196. package/build/src/map/utils/OfflineMapManager.js.map +1 -0
  197. package/build/src/map/utils/PermissionUtils.d.ts +92 -0
  198. package/build/src/map/utils/PermissionUtils.d.ts.map +1 -0
  199. package/build/src/map/utils/PermissionUtils.js +252 -0
  200. package/build/src/map/utils/PermissionUtils.js.map +1 -0
  201. package/build/src/map/utils/PlatformDetector.d.ts +103 -0
  202. package/build/src/map/utils/PlatformDetector.d.ts.map +1 -0
  203. package/build/src/map/utils/PlatformDetector.js +178 -0
  204. package/build/src/map/utils/PlatformDetector.js.map +1 -0
  205. package/build/src/map/utils/lazyNativeViewManager.d.ts +3 -0
  206. package/build/src/map/utils/lazyNativeViewManager.d.ts.map +1 -0
  207. package/build/src/map/utils/lazyNativeViewManager.js +11 -0
  208. package/build/src/map/utils/lazyNativeViewManager.js.map +1 -0
  209. package/build/src/route-geometry.d.ts +13 -0
  210. package/build/src/route-geometry.d.ts.map +1 -0
  211. package/build/src/route-geometry.js +154 -0
  212. package/build/src/route-geometry.js.map +1 -0
  213. package/build/src/route-planning.d.ts +21 -0
  214. package/build/src/route-planning.d.ts.map +1 -0
  215. package/build/src/route-planning.js +67 -0
  216. package/build/src/route-planning.js.map +1 -0
  217. package/build/src/types/coordinates.types.d.ts +25 -0
  218. package/build/src/types/coordinates.types.d.ts.map +1 -0
  219. package/build/src/types/coordinates.types.js +6 -0
  220. package/build/src/types/coordinates.types.js.map +1 -0
  221. package/build/src/types/independent.types.d.ts +385 -0
  222. package/build/src/types/independent.types.d.ts.map +1 -0
  223. package/build/src/types/independent.types.js +2 -0
  224. package/build/src/types/independent.types.js.map +1 -0
  225. package/build/src/types/index.d.ts +6 -0
  226. package/build/src/types/index.d.ts.map +1 -0
  227. package/build/src/types/index.js +7 -0
  228. package/build/src/types/index.js.map +1 -0
  229. package/build/src/types/native-module.types.d.ts +74 -0
  230. package/build/src/types/native-module.types.d.ts.map +1 -0
  231. package/build/src/types/native-module.types.js +3 -0
  232. package/build/src/types/native-module.types.js.map +1 -0
  233. package/build/src/types/naviview.types.d.ts +562 -0
  234. package/build/src/types/naviview.types.d.ts.map +1 -0
  235. package/build/src/types/naviview.types.js +2 -0
  236. package/build/src/types/naviview.types.js.map +1 -0
  237. package/build/src/types/route.types.d.ts +414 -0
  238. package/build/src/types/route.types.d.ts.map +1 -0
  239. package/build/src/types/route.types.js +137 -0
  240. package/build/src/types/route.types.js.map +1 -0
  241. package/build/src/web-api-fallback.d.ts +5 -0
  242. package/build/src/web-api-fallback.d.ts.map +1 -0
  243. package/build/src/web-api-fallback.js +160 -0
  244. package/build/src/web-api-fallback.js.map +1 -0
  245. package/build/src/web-route-following.d.ts +3 -0
  246. package/build/src/web-route-following.d.ts.map +1 -0
  247. package/build/src/web-route-following.js +178 -0
  248. package/build/src/web-route-following.js.map +1 -0
  249. package/build/types/native-module.types.d.ts +2 -2
  250. package/build/types/native-module.types.d.ts.map +1 -1
  251. package/build/types/native-module.types.js.map +1 -1
  252. package/build/types/naviview.types.d.ts +1 -1
  253. package/build/types/naviview.types.d.ts.map +1 -1
  254. package/build/types/naviview.types.js.map +1 -1
  255. package/build/web-api-fallback.d.ts.map +1 -1
  256. package/build/web-api-fallback.js +0 -1
  257. package/build/web-api-fallback.js.map +1 -1
  258. package/ios/map/ExpoGaodeMapView.swift +145 -3
  259. package/ios/map/managers/UIManager.swift +3 -0
  260. package/package.json +10 -7
  261. package/plugin/build/withGaodeMap.js +19 -14
@@ -1,32 +1,11 @@
1
- apply plugin: 'com.android.library'
1
+ plugins {
2
+ id 'com.android.library'
3
+ id 'expo-module-gradle-plugin'
4
+ }
2
5
 
3
6
  group = 'expo.modules.gaodemap.navigation'
4
7
  version = '2.0.13'
5
8
 
6
- def expoModulesCorePlugin = new File(project(":expo-modules-core").projectDir.absolutePath, "ExpoModulesCorePlugin.gradle")
7
- apply from: expoModulesCorePlugin
8
- applyKotlinExpoModulesCorePlugin()
9
- useCoreDependencies()
10
- useExpoPublishing()
11
-
12
- def useManagedAndroidSdkVersions = false
13
- if (useManagedAndroidSdkVersions) {
14
- useDefaultAndroidSdkVersions()
15
- } else {
16
- buildscript {
17
- ext.safeExtGet = { prop, fallback ->
18
- rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
19
- }
20
- }
21
- project.android {
22
- compileSdkVersion safeExtGet("compileSdkVersion", 36)
23
- defaultConfig {
24
- minSdkVersion safeExtGet("minSdkVersion", 24)
25
- targetSdkVersion safeExtGet("targetSdkVersion", 36)
26
- }
27
- }
28
- }
29
-
30
9
  logger.warn("[expo-gaode-map-navigation] Thank you for using expo-gaode-map-navigation ❤️")
31
10
  logger.warn("[expo-gaode-map-navigation] If you enjoy using expo-gaode-map-navigation, please consider sponsoring this project: https://github.com/TomWq")
32
11
 
@@ -1,3 +1,4 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
1
2
  import * as React from 'react';
2
3
  import { Image, PermissionsAndroid, Platform, StatusBar, } from 'react-native';
3
4
  import { createLazyNativeViewManager } from './map/utils/lazyNativeViewManager';
@@ -130,7 +131,7 @@ export const ExpoGaodeMapNaviView = React.forwardRef((props, ref) => {
130
131
  }), []);
131
132
  // 暴露 API 给外部 ref
132
133
  React.useImperativeHandle(ref, () => apiRef, [apiRef]);
133
- return (<NativeView ref={nativeRef} {...restProps} androidStatusBarPaddingTop={resolvedAndroidStatusBarPaddingTop} mapViewModeType={resolvedMapViewModeType} carImage={resolvedCarImage} startPointImage={resolvedStartPointImage} wayPointImage={resolvedWayPointImage} endPointImage={resolvedEndPointImage} {...platformSpecificImageProps} onNavigationInfoUpdate={onNaviInfoUpdate} onNavigationStarted={onNaviStart} onNavigationEnded={onNaviEnd} onArriveDestination={onArrive} onRouteRecalculate={onReCalculate} onNavigationText={onPlayVoice} onNavigationVisualStateUpdate={onNaviVisualStateChange} onLaneInfoUpdate={onLaneInfoUpdate} onTrafficStatusesUpdate={onTrafficStatusesUpdate}/>);
134
+ return (_jsx(NativeView, { ref: nativeRef, ...restProps, androidStatusBarPaddingTop: resolvedAndroidStatusBarPaddingTop, mapViewModeType: resolvedMapViewModeType, carImage: resolvedCarImage, startPointImage: resolvedStartPointImage, wayPointImage: resolvedWayPointImage, endPointImage: resolvedEndPointImage, ...platformSpecificImageProps, onNavigationInfoUpdate: onNaviInfoUpdate, onNavigationStarted: onNaviStart, onNavigationEnded: onNaviEnd, onArriveDestination: onArrive, onRouteRecalculate: onReCalculate, onNavigationText: onPlayVoice, onNavigationVisualStateUpdate: onNaviVisualStateChange, onLaneInfoUpdate: onLaneInfoUpdate, onTrafficStatusesUpdate: onTrafficStatusesUpdate }));
134
135
  });
135
136
  ExpoGaodeMapNaviView.displayName = 'ExpoGaodeMapNaviView';
136
137
  export default ExpoGaodeMapNaviView;
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoGaodeMapNaviView.js","sourceRoot":"","sources":["../src/ExpoGaodeMapNaviView.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport type {\n Coordinates,\n ExpoGaodeMapNaviViewProps,\n NaviArriveEvent,\n NaviEndEvent,\n NaviInfoUpdateEvent,\n NaviLaneInfoEvent,\n NaviStartEvent,\n NaviTrafficStatusesEvent,\n NaviVisualStateEvent,\n PlayVoiceEvent,\n ReCalculateEvent,\n} from './types';\nimport {\n Image,\n PermissionsAndroid,\n Platform,\n StatusBar,\n type NativeSyntheticEvent,\n} from 'react-native';\nimport { createLazyNativeViewManager } from './map/utils/lazyNativeViewManager';\n\nfunction normalizeNaviImageSource(source?: ExpoGaodeMapNaviViewProps['carImage']): string | undefined {\n if (source == null) {\n return undefined;\n }\n if (typeof source === 'string') {\n return source;\n }\n return Image.resolveAssetSource(source)?.uri;\n}\n\nasync function ensureAndroidNavigationNotificationPermission(enabled: boolean): Promise<void> {\n if (!enabled || Platform.OS !== 'android' || Platform.Version < 33) {\n return;\n }\n\n try {\n const permission = PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS;\n const granted = await PermissionsAndroid.check(permission);\n if (!granted) {\n await PermissionsAndroid.request(permission);\n }\n } catch (error) {\n console.warn(\n '[expo-gaode-map-navigation] Failed to request POST_NOTIFICATIONS permission automatically.',\n error\n );\n }\n}\n\n/**\n * ExpoGaodeMapNaviView Ref 类型\n */\nexport interface ExpoGaodeMapNaviViewRef {\n /**\n * 开始导航\n */\n startNavigation: (start: Coordinates | null, end: Coordinates, type: number) => Promise<void>;\n /**\n * 在当前嵌入式导航视图中,使用独立路径组启动导航\n *\n * - 依赖当前 ExpoGaodeMapNaviView 实例\n * - 适合“路线选择页 -> 进入嵌入式导航页”这类页面内流程\n * - 若不依赖嵌入式导航视图,可改用模块级 startNaviWithIndependentPath(...)\n */\n startNavigationWithIndependentPath: (\n token: number,\n options?: {\n routeId?: number;\n routeIndex?: number;\n naviType?: number;\n }\n ) => Promise<void>;\n \n /**\n * 停止导航\n */\n stopNavigation: () => Promise<void>;\n\n /**\n * 播放自定义 TTS\n */\n playCustomTTS: (text: string, forcePlay?: boolean) => Promise<void>;\n}\n\ninterface NativeExpoGaodeMapNaviViewRef {\n startNavigation: (\n startLatitude: number,\n startLongitude: number,\n endLatitude: number,\n endLongitude: number\n ) => Promise<void>;\n startNavigationWithIndependentPath: (\n token: number,\n routeId?: number,\n routeIndex?: number,\n naviType?: number\n ) => Promise<void>;\n stopNavigation: () => Promise<void>;\n playCustomTTS: (text: string, forcePlay?: boolean) => Promise<void>;\n}\n\ninterface NativeExpoGaodeMapNaviViewProps\n extends ExpoGaodeMapNaviViewProps {\n ref?: React.Ref<NativeExpoGaodeMapNaviViewRef>;\n onNavigationInfoUpdate?: (event: NativeSyntheticEvent<NaviInfoUpdateEvent>) => void;\n onNavigationStarted?: (event: NativeSyntheticEvent<NaviStartEvent>) => void;\n onNavigationEnded?: (event: NativeSyntheticEvent<NaviEndEvent>) => void;\n onArriveDestination?: (event: NativeSyntheticEvent<NaviArriveEvent>) => void;\n onRouteRecalculate?: (event: NativeSyntheticEvent<ReCalculateEvent>) => void;\n onNavigationText?: (event: NativeSyntheticEvent<PlayVoiceEvent>) => void;\n onNavigationVisualStateUpdate?: (event: NativeSyntheticEvent<NaviVisualStateEvent>) => void;\n onLaneInfoUpdate?: (event: NativeSyntheticEvent<NaviLaneInfoEvent>) => void;\n // Unified traffic-segment event used by the library traffic bar and any\n // consumer that wants to render a fully custom traffic beam.\n onTrafficStatusesUpdate?: (event: NativeSyntheticEvent<NaviTrafficStatusesEvent>) => void;\n}\n\nconst getNativeView = createLazyNativeViewManager<\n NativeExpoGaodeMapNaviViewProps\n>('ExpoGaodeMapNaviView');\n\n/**\n * 高德导航视图组件\n *\n * 使用高德官方的导航界面,提供完整的导航体验,包括:\n * - 路线规划和显示\n * - 实时导航信息(距离、时间、道路名称)\n * - 转向箭头和提示\n * - 路况信息\n * - 摄像头提示\n * - 语音播报\n *\n * @example\n * ```tsx\n * import { ExpoGaodeMapNaviView } from 'expo-gaode-map-navigation';\n *\n * function NavigationScreen() {\n * return (\n * <ExpoGaodeMapNaviView\n * style={{ flex: 1 }}\n * naviType={0} // GPS 导航\n * showCamera={true}\n * enableVoice={true}\n * onNaviInfoUpdate={(e) => {\n * console.log('剩余距离:', e.nativeEvent.pathRetainDistance);\n * }}\n * onArrive={() => {\n * console.log('到达目的地!');\n * }}\n * />\n * );\n * }\n * ```\n */\nexport const ExpoGaodeMapNaviView = React.forwardRef<ExpoGaodeMapNaviViewRef, ExpoGaodeMapNaviViewProps>((props, ref) => {\n const nativeRef = React.useRef<NativeExpoGaodeMapNaviViewRef | null>(null);\n const hasRequestedAndroidNotificationPermissionRef = React.useRef(false);\n const NativeView = React.useMemo(() => getNativeView(), []);\n const {\n onNaviInfoUpdate,\n onNaviStart,\n onNaviEnd,\n onArrive,\n onReCalculate,\n onPlayVoice,\n onNaviVisualStateChange,\n onLaneInfoUpdate,\n onTrafficStatusesUpdate,\n isNightMode,\n mapViewModeType,\n carImage,\n fourCornersImage,\n carCompassImage,\n startPointImage,\n wayPointImage,\n endPointImage,\n cameraImage,\n androidStatusBarPaddingTop,\n ...restProps\n } = props;\n\n const resolvedAndroidStatusBarPaddingTop =\n Platform.OS === 'android' &&\n androidStatusBarPaddingTop == null &&\n props.showUIElements !== false &&\n props.hideNativeTopInfoLayout !== true\n ? (StatusBar.currentHeight ?? 0)\n : androidStatusBarPaddingTop;\n const resolvedCarImage = normalizeNaviImageSource(carImage);\n const resolvedFourCornersImage = normalizeNaviImageSource(fourCornersImage);\n const resolvedCarCompassImage = normalizeNaviImageSource(carCompassImage);\n const resolvedStartPointImage = normalizeNaviImageSource(startPointImage);\n const resolvedWayPointImage = normalizeNaviImageSource(wayPointImage);\n const resolvedEndPointImage = normalizeNaviImageSource(endPointImage);\n const resolvedCameraImage = normalizeNaviImageSource(cameraImage);\n const resolvedMapViewModeType = mapViewModeType ?? (isNightMode == null ? undefined : (isNightMode ? 1 : 0));\n const platformSpecificImageProps =\n Platform.OS === 'android'\n ? {\n fourCornersImage: resolvedFourCornersImage,\n }\n : {\n carCompassImage: resolvedCarCompassImage,\n cameraImage: resolvedCameraImage,\n };\n\n React.useEffect(() => {\n if (Platform.OS !== 'android') {\n return;\n }\n\n if (!props.androidBackgroundNavigationNotificationEnabled) {\n hasRequestedAndroidNotificationPermissionRef.current = false;\n return;\n }\n\n if (hasRequestedAndroidNotificationPermissionRef.current) {\n return;\n }\n\n hasRequestedAndroidNotificationPermissionRef.current = true;\n void ensureAndroidNavigationNotificationPermission(true);\n }, [props.androidBackgroundNavigationNotificationEnabled]);\n \n // 创建 API 引用\n const apiRef: ExpoGaodeMapNaviViewRef = React.useMemo(() => ({\n startNavigation: async (start: Coordinates | null, end: Coordinates, type: number) => {\n if (!nativeRef.current) throw new Error('ExpoGaodeMapNaviView not initialized');\n // 将对象解构为单独的参数传递给原生层\n const startLat = start?.latitude ?? 0;\n const startLng = start?.longitude ?? 0;\n const endLat = end.latitude;\n const endLng = end.longitude;\n return nativeRef.current.startNavigation(startLat, startLng, endLat, endLng);\n },\n startNavigationWithIndependentPath: async (token, options) => {\n if (!nativeRef.current) throw new Error('ExpoGaodeMapNaviView not initialized');\n return nativeRef.current.startNavigationWithIndependentPath(\n token,\n options?.routeId,\n options?.routeIndex,\n options?.naviType\n );\n },\n stopNavigation: async () => {\n if (!nativeRef.current) throw new Error('ExpoGaodeMapNaviView not initialized');\n return nativeRef.current.stopNavigation();\n },\n playCustomTTS: async (text, forcePlay = false) => {\n if (!nativeRef.current) throw new Error('ExpoGaodeMapNaviView not initialized');\n return nativeRef.current.playCustomTTS(text, forcePlay);\n },\n }), []);\n \n // 暴露 API 给外部 ref\n React.useImperativeHandle(ref, () => apiRef, [apiRef]);\n \n return (\n <NativeView\n ref={nativeRef}\n {...restProps}\n androidStatusBarPaddingTop={resolvedAndroidStatusBarPaddingTop}\n mapViewModeType={resolvedMapViewModeType}\n carImage={resolvedCarImage}\n startPointImage={resolvedStartPointImage}\n wayPointImage={resolvedWayPointImage}\n endPointImage={resolvedEndPointImage}\n {...platformSpecificImageProps}\n onNavigationInfoUpdate={onNaviInfoUpdate}\n onNavigationStarted={onNaviStart}\n onNavigationEnded={onNaviEnd}\n onArriveDestination={onArrive}\n onRouteRecalculate={onReCalculate}\n onNavigationText={onPlayVoice}\n onNavigationVisualStateUpdate={onNaviVisualStateChange}\n onLaneInfoUpdate={onLaneInfoUpdate}\n onTrafficStatusesUpdate={onTrafficStatusesUpdate}\n />\n );\n});\n\nExpoGaodeMapNaviView.displayName = 'ExpoGaodeMapNaviView';\n\nexport default ExpoGaodeMapNaviView;\n"]}
1
+ {"version":3,"file":"ExpoGaodeMapNaviView.js","sourceRoot":"","sources":["../src/ExpoGaodeMapNaviView.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport type {\n Coordinates,\n ExpoGaodeMapNaviViewProps,\n NaviArriveEvent,\n NaviEndEvent,\n NaviInfoUpdateEvent,\n NaviLaneInfoEvent,\n NaviStartEvent,\n NaviTrafficStatusesEvent,\n NaviVisualStateEvent,\n PlayVoiceEvent,\n ReCalculateEvent,\n} from './types';\nimport {\n Image,\n PermissionsAndroid,\n Platform,\n StatusBar,\n type NativeSyntheticEvent,\n} from 'react-native';\nimport { createLazyNativeViewManager } from './map/utils/lazyNativeViewManager';\n\nfunction normalizeNaviImageSource(source?: ExpoGaodeMapNaviViewProps['carImage']): string | undefined {\n if (source == null) {\n return undefined;\n }\n if (typeof source === 'string') {\n return source;\n }\n return Image.resolveAssetSource(source)?.uri;\n}\n\nasync function ensureAndroidNavigationNotificationPermission(enabled: boolean): Promise<void> {\n if (!enabled || Platform.OS !== 'android' || Platform.Version < 33) {\n return;\n }\n\n try {\n const permission = PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS;\n const granted = await PermissionsAndroid.check(permission);\n if (!granted) {\n await PermissionsAndroid.request(permission);\n }\n } catch (error) {\n console.warn(\n '[expo-gaode-map-navigation] Failed to request POST_NOTIFICATIONS permission automatically.',\n error\n );\n }\n}\n\n/**\n * ExpoGaodeMapNaviView Ref 类型\n */\nexport interface ExpoGaodeMapNaviViewRef {\n /**\n * 开始导航\n */\n startNavigation: (start: Coordinates | null, end: Coordinates, type: number) => Promise<void>;\n /**\n * 在当前嵌入式导航视图中,使用独立路径组启动导航\n *\n * - 依赖当前 ExpoGaodeMapNaviView 实例\n * - 适合“路线选择页 -> 进入嵌入式导航页”这类页面内流程\n * - 若不依赖嵌入式导航视图,可改用模块级 startNaviWithIndependentPath(...)\n */\n startNavigationWithIndependentPath: (\n token: number,\n options?: {\n routeId?: number;\n routeIndex?: number;\n naviType?: number;\n }\n ) => Promise<void>;\n \n /**\n * 停止导航\n */\n stopNavigation: () => Promise<void>;\n\n /**\n * 播放自定义 TTS\n */\n playCustomTTS: (text: string, forcePlay?: boolean) => Promise<void>;\n}\n\ninterface NativeExpoGaodeMapNaviViewRef {\n startNavigation: (\n startLatitude: number,\n startLongitude: number,\n endLatitude: number,\n endLongitude: number\n ) => Promise<void>;\n startNavigationWithIndependentPath: (\n token: number,\n routeId?: number,\n routeIndex?: number,\n naviType?: number\n ) => Promise<void>;\n stopNavigation: () => Promise<void>;\n playCustomTTS: (text: string, forcePlay?: boolean) => Promise<void>;\n}\n\ninterface NativeExpoGaodeMapNaviViewProps\n extends ExpoGaodeMapNaviViewProps {\n ref?: React.Ref<NativeExpoGaodeMapNaviViewRef>;\n onNavigationInfoUpdate?: (event: NativeSyntheticEvent<NaviInfoUpdateEvent>) => void;\n onNavigationStarted?: (event: NativeSyntheticEvent<NaviStartEvent>) => void;\n onNavigationEnded?: (event: NativeSyntheticEvent<NaviEndEvent>) => void;\n onArriveDestination?: (event: NativeSyntheticEvent<NaviArriveEvent>) => void;\n onRouteRecalculate?: (event: NativeSyntheticEvent<ReCalculateEvent>) => void;\n onNavigationText?: (event: NativeSyntheticEvent<PlayVoiceEvent>) => void;\n onNavigationVisualStateUpdate?: (event: NativeSyntheticEvent<NaviVisualStateEvent>) => void;\n onLaneInfoUpdate?: (event: NativeSyntheticEvent<NaviLaneInfoEvent>) => void;\n // Unified traffic-segment event used by the library traffic bar and any\n // consumer that wants to render a fully custom traffic beam.\n onTrafficStatusesUpdate?: (event: NativeSyntheticEvent<NaviTrafficStatusesEvent>) => void;\n}\n\nconst getNativeView = createLazyNativeViewManager<\n NativeExpoGaodeMapNaviViewProps\n>('ExpoGaodeMapNaviView');\n\n/**\n * 高德导航视图组件\n *\n * 使用高德官方的导航界面,提供完整的导航体验,包括:\n * - 路线规划和显示\n * - 实时导航信息(距离、时间、道路名称)\n * - 转向箭头和提示\n * - 路况信息\n * - 摄像头提示\n * - 语音播报\n *\n * @example\n * ```tsx\n * import { ExpoGaodeMapNaviView } from 'expo-gaode-map-navigation';\n *\n * function NavigationScreen() {\n * return (\n * <ExpoGaodeMapNaviView\n * style={{ flex: 1 }}\n * naviType={0} // GPS 导航\n * showCamera={true}\n * enableVoice={true}\n * onNaviInfoUpdate={(e) => {\n * console.log('剩余距离:', e.nativeEvent.pathRetainDistance);\n * }}\n * onArrive={() => {\n * console.log('到达目的地!');\n * }}\n * />\n * );\n * }\n * ```\n */\nexport const ExpoGaodeMapNaviView = React.forwardRef<ExpoGaodeMapNaviViewRef, ExpoGaodeMapNaviViewProps>((props, ref) => {\n const nativeRef = React.useRef<NativeExpoGaodeMapNaviViewRef | null>(null);\n const hasRequestedAndroidNotificationPermissionRef = React.useRef(false);\n const NativeView = React.useMemo(() => getNativeView(), []);\n const {\n onNaviInfoUpdate,\n onNaviStart,\n onNaviEnd,\n onArrive,\n onReCalculate,\n onPlayVoice,\n onNaviVisualStateChange,\n onLaneInfoUpdate,\n onTrafficStatusesUpdate,\n isNightMode,\n mapViewModeType,\n carImage,\n fourCornersImage,\n carCompassImage,\n startPointImage,\n wayPointImage,\n endPointImage,\n cameraImage,\n androidStatusBarPaddingTop,\n ...restProps\n } = props;\n\n const resolvedAndroidStatusBarPaddingTop =\n Platform.OS === 'android' &&\n androidStatusBarPaddingTop == null &&\n props.showUIElements !== false &&\n props.hideNativeTopInfoLayout !== true\n ? (StatusBar.currentHeight ?? 0)\n : androidStatusBarPaddingTop;\n const resolvedCarImage = normalizeNaviImageSource(carImage);\n const resolvedFourCornersImage = normalizeNaviImageSource(fourCornersImage);\n const resolvedCarCompassImage = normalizeNaviImageSource(carCompassImage);\n const resolvedStartPointImage = normalizeNaviImageSource(startPointImage);\n const resolvedWayPointImage = normalizeNaviImageSource(wayPointImage);\n const resolvedEndPointImage = normalizeNaviImageSource(endPointImage);\n const resolvedCameraImage = normalizeNaviImageSource(cameraImage);\n const resolvedMapViewModeType = mapViewModeType ?? (isNightMode == null ? undefined : (isNightMode ? 1 : 0));\n const platformSpecificImageProps =\n Platform.OS === 'android'\n ? {\n fourCornersImage: resolvedFourCornersImage,\n }\n : {\n carCompassImage: resolvedCarCompassImage,\n cameraImage: resolvedCameraImage,\n };\n\n React.useEffect(() => {\n if (Platform.OS !== 'android') {\n return;\n }\n\n if (!props.androidBackgroundNavigationNotificationEnabled) {\n hasRequestedAndroidNotificationPermissionRef.current = false;\n return;\n }\n\n if (hasRequestedAndroidNotificationPermissionRef.current) {\n return;\n }\n\n hasRequestedAndroidNotificationPermissionRef.current = true;\n void ensureAndroidNavigationNotificationPermission(true);\n }, [props.androidBackgroundNavigationNotificationEnabled]);\n \n // 创建 API 引用\n const apiRef: ExpoGaodeMapNaviViewRef = React.useMemo(() => ({\n startNavigation: async (start: Coordinates | null, end: Coordinates, type: number) => {\n if (!nativeRef.current) throw new Error('ExpoGaodeMapNaviView not initialized');\n // 将对象解构为单独的参数传递给原生层\n const startLat = start?.latitude ?? 0;\n const startLng = start?.longitude ?? 0;\n const endLat = end.latitude;\n const endLng = end.longitude;\n return nativeRef.current.startNavigation(startLat, startLng, endLat, endLng);\n },\n startNavigationWithIndependentPath: async (token, options) => {\n if (!nativeRef.current) throw new Error('ExpoGaodeMapNaviView not initialized');\n return nativeRef.current.startNavigationWithIndependentPath(\n token,\n options?.routeId,\n options?.routeIndex,\n options?.naviType\n );\n },\n stopNavigation: async () => {\n if (!nativeRef.current) throw new Error('ExpoGaodeMapNaviView not initialized');\n return nativeRef.current.stopNavigation();\n },\n playCustomTTS: async (text, forcePlay = false) => {\n if (!nativeRef.current) throw new Error('ExpoGaodeMapNaviView not initialized');\n return nativeRef.current.playCustomTTS(text, forcePlay);\n },\n }), []);\n \n // 暴露 API 给外部 ref\n React.useImperativeHandle(ref, () => apiRef, [apiRef]);\n \n return (\n <NativeView\n ref={nativeRef}\n {...restProps}\n androidStatusBarPaddingTop={resolvedAndroidStatusBarPaddingTop}\n mapViewModeType={resolvedMapViewModeType}\n carImage={resolvedCarImage}\n startPointImage={resolvedStartPointImage}\n wayPointImage={resolvedWayPointImage}\n endPointImage={resolvedEndPointImage}\n {...platformSpecificImageProps}\n onNavigationInfoUpdate={onNaviInfoUpdate}\n onNavigationStarted={onNaviStart}\n onNavigationEnded={onNaviEnd}\n onArriveDestination={onArrive}\n onRouteRecalculate={onReCalculate}\n onNavigationText={onPlayVoice}\n onNavigationVisualStateUpdate={onNaviVisualStateChange}\n onLaneInfoUpdate={onLaneInfoUpdate}\n onTrafficStatusesUpdate={onTrafficStatusesUpdate}\n />\n );\n});\n\nExpoGaodeMapNaviView.displayName = 'ExpoGaodeMapNaviView';\n\nexport default ExpoGaodeMapNaviView;\n"]}
@@ -1,4 +1,4 @@
1
- import { ExpoGaodeMapNavigationModule as ExpoGaodeMapNavigationModuleType } from './types/native-module.types';
1
+ import type { ExpoGaodeMapNavigationModule as ExpoGaodeMapNavigationModuleType } from './types/native-module.types';
2
2
  declare const _default: ExpoGaodeMapNavigationModuleType;
3
3
  export default _default;
4
4
  //# sourceMappingURL=ExpoGaodeMapNavigationModule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoGaodeMapNavigationModule.d.ts","sourceRoot":"","sources":["../src/ExpoGaodeMapNavigationModule.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,4BAA4B,IAAI,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;;AA2B/G,wBAIG"}
1
+ {"version":3,"file":"ExpoGaodeMapNavigationModule.d.ts","sourceRoot":"","sources":["../src/ExpoGaodeMapNavigationModule.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,4BAA4B,IAAI,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;;AA2BpH,wBAIG"}
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoGaodeMapNavigationModule.js","sourceRoot":"","sources":["../src/ExpoGaodeMapNavigationModule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;GAIG;AACH,IAAI,iBAAiB,GAA4C,IAAI,CAAC;AAEtE,SAAS,eAAe;IACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,iBAAiB,GAAG,mBAAmB,CAAmC,wBAAwB,CAAC,CAAC;IACtG,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAAwC,EACxC,IAAiB;IAEjB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAgB,EAAE,IAAI,EAAE,MAAgB,CAAC,CAAC;IACpE,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE,CAC3B,KAA2C,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,eAAe,IAAI,KAAK,CAAC,EAAsC,EAAE;IAC/D,GAAG,CAAC,OAAO,EAAE,IAAI;QACf,OAAO,mBAAmB,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;CACF,CAAC,CAAC","sourcesContent":["\nimport { requireNativeModule } from 'expo-modules-core';\nimport { ExpoGaodeMapNavigationModule as ExpoGaodeMapNavigationModuleType } from './types/native-module.types';\n/**\n * 高德地图导航模块\n * \n * 提供路径规划功能,包括驾车、步行、骑行、公交、货车等多种出行方式\n */\nlet nativeModuleCache: ExpoGaodeMapNavigationModuleType | null = null;\n\nfunction getNativeModule(): ExpoGaodeMapNavigationModuleType {\n if (!nativeModuleCache) {\n nativeModuleCache = requireNativeModule<ExpoGaodeMapNavigationModuleType>('ExpoGaodeMapNavigation');\n }\n return nativeModuleCache;\n}\n\nfunction getBoundNativeValue(\n module: ExpoGaodeMapNavigationModuleType,\n prop: PropertyKey\n): unknown {\n const value = Reflect.get(module as object, prop, module as object);\n if (typeof value === 'function') {\n return (...args: unknown[]) =>\n (value as (...fnArgs: unknown[]) => unknown).apply(module, args);\n }\n return value;\n}\n\nexport default new Proxy({} as ExpoGaodeMapNavigationModuleType, {\n get(_target, prop) {\n return getBoundNativeValue(getNativeModule(), prop);\n },\n});\n"]}
1
+ {"version":3,"file":"ExpoGaodeMapNavigationModule.js","sourceRoot":"","sources":["../src/ExpoGaodeMapNavigationModule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;GAIG;AACH,IAAI,iBAAiB,GAA4C,IAAI,CAAC;AAEtE,SAAS,eAAe;IACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,iBAAiB,GAAG,mBAAmB,CAAmC,wBAAwB,CAAC,CAAC;IACtG,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAAwC,EACxC,IAAiB;IAEjB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAgB,EAAE,IAAI,EAAE,MAAgB,CAAC,CAAC;IACpE,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE,CAC3B,KAA2C,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,eAAe,IAAI,KAAK,CAAC,EAAsC,EAAE;IAC/D,GAAG,CAAC,OAAO,EAAE,IAAI;QACf,OAAO,mBAAmB,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;CACF,CAAC,CAAC","sourcesContent":["\nimport { requireNativeModule } from 'expo-modules-core';\nimport type { ExpoGaodeMapNavigationModule as ExpoGaodeMapNavigationModuleType } from './types/native-module.types';\n/**\n * 高德地图导航模块\n * \n * 提供路径规划功能,包括驾车、步行、骑行、公交、货车等多种出行方式\n */\nlet nativeModuleCache: ExpoGaodeMapNavigationModuleType | null = null;\n\nfunction getNativeModule(): ExpoGaodeMapNavigationModuleType {\n if (!nativeModuleCache) {\n nativeModuleCache = requireNativeModule<ExpoGaodeMapNavigationModuleType>('ExpoGaodeMapNavigation');\n }\n return nativeModuleCache;\n}\n\nfunction getBoundNativeValue(\n module: ExpoGaodeMapNavigationModuleType,\n prop: PropertyKey\n): unknown {\n const value = Reflect.get(module as object, prop, module as object);\n if (typeof value === 'function') {\n return (...args: unknown[]) =>\n (value as (...fnArgs: unknown[]) => unknown).apply(module, args);\n }\n return value;\n}\n\nexport default new Proxy({} as ExpoGaodeMapNavigationModuleType, {\n get(_target, prop) {\n return getBoundNativeValue(getNativeModule(), prop);\n },\n});\n"]}
@@ -1,6 +1,7 @@
1
- import { LatLng, Coordinates, ReGeocode, LocationListener, LatLngPoint, CoordinateType } from './types';
1
+ import { CoordinateType } from './types';
2
+ import type { LatLng, Coordinates, ReGeocode, LocationListener, LatLngPoint } from './types';
2
3
  import type { ExpoGaodeMapModule as NativeExpoGaodeMapModule } from './types/native-module.types';
3
- import { PrivacyConfig, PrivacyStatus, SDKConfig, PermissionStatus } from './types/common.types';
4
+ import type { PrivacyConfig, PrivacyStatus, SDKConfig, PermissionStatus } from './types/common.types';
4
5
  declare const helperMethods: {
5
6
  /**
6
7
  * 初始化 SDK,并缓存配置(包含 webKey)
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoGaodeMapModule.d.ts","sourceRoot":"","sources":["../../src/map/ExpoGaodeMapModule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ExpoGaodeMapModule.d.ts","sourceRoot":"","sources":["../../src/map/ExpoGaodeMapModule.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { requireNativeModule } from 'expo';
2
2
  import { Platform } from 'react-native';
3
+ import { CoordinateType } from './types';
3
4
  import { ErrorHandler, ErrorLogger } from './utils/ErrorHandler';
4
5
  import { normalizeLatLng, normalizeLatLngList } from './utils/GeoUtils';
5
6
  let nativeModuleCache = null;
@@ -733,7 +734,8 @@ const helperMethods = {
733
734
  if (Array.isArray(polygons[0]) && Array.isArray(polygons[0][0])) {
734
735
  const normalizedMultiPolygons = polygons.map((polygonRings) => normalizeLatLngList(polygonRings));
735
736
  for (let index = 0; index < normalizedMultiPolygons.length; index += 1) {
736
- if (nativeModule.isPointInPolygon(normalizedPoint, normalizedMultiPolygons[index])) {
737
+ const polygon = normalizedMultiPolygons[index];
738
+ if (polygon && nativeModule.isPointInPolygon(normalizedPoint, polygon)) {
737
739
  return index;
738
740
  }
739
741
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoGaodeMapModule.js","sourceRoot":"","sources":["../../src/map/ExpoGaodeMapModule.ts"],"names":[],"mappings":"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","sourcesContent":["import { requireNativeModule } from 'expo';\nimport { Platform } from 'react-native';\n\nimport {\n LatLng,\n Coordinates,\n ReGeocode,\n LocationListener,\n LatLngPoint,\n CoordinateType,\n} from './types';\nimport type { ExpoGaodeMapModule as NativeExpoGaodeMapModule } from './types/native-module.types';\nimport { ErrorHandler, ErrorLogger } from './utils/ErrorHandler';\nimport { PrivacyConfig, PrivacyStatus, SDKConfig, PermissionStatus } from './types/common.types';\nimport { normalizeLatLng, normalizeLatLngList } from './utils/GeoUtils';\n\nlet nativeModuleCache: NativeExpoGaodeMapModule | null = null;\n\nfunction describeConfig(config: SDKConfig) {\n return {\n hasAndroidKey: Boolean(config.androidKey),\n hasIOSKey: Boolean(config.iosKey),\n hasWebKey: Boolean(config.webKey),\n };\n}\n\nfunction getNativeModule(optional = false): NativeExpoGaodeMapModule | null {\n if (nativeModuleCache) {\n return nativeModuleCache;\n }\n\n try {\n nativeModuleCache = requireNativeModule<NativeExpoGaodeMapModule>('ExpoGaodeMap');\n return nativeModuleCache;\n } catch (error) {\n if (optional) {\n return null;\n }\n const moduleError = ErrorHandler.nativeModuleUnavailable();\n ErrorLogger.log(moduleError);\n throw moduleError;\n }\n}\n\nfunction getBoundNativeValue(\n module: NativeExpoGaodeMapModule,\n prop: PropertyKey\n): unknown {\n const value = Reflect.get(module as object, prop, module as object);\n if (typeof value === 'function') {\n return (...args: unknown[]) =>\n (value as (...fnArgs: unknown[]) => unknown).apply(module, args);\n }\n return value;\n}\n\nconst nativeModule = new Proxy({} as NativeExpoGaodeMapModule, {\n get(_target, prop) {\n const module = getNativeModule(true);\n return module ? getBoundNativeValue(module, prop) : undefined;\n },\n});\n\n// 记录最近一次 initSDK 的配置(含 webKey)\nlet _sdkConfig: SDKConfig | null = null;\nlet _isSDKInitialized = false;\n\nconst privacySensitiveMethodNames = new Set<string>([\n 'start',\n 'stop',\n 'isStarted',\n 'getCurrentLocation',\n 'coordinateConvert',\n 'setLocatingWithReGeocode',\n 'setLocationMode',\n 'setInterval',\n 'setOnceLocation',\n 'setSensorEnable',\n 'setWifiScan',\n 'setGpsFirst',\n 'setMockEnable',\n 'setOnceLocationLatest',\n 'setGeoLanguage',\n 'setLocationCacheEnable',\n 'setHttpTimeOut',\n 'setDesiredAccuracy',\n 'setLocationTimeout',\n 'setReGeocodeTimeout',\n 'setDistanceFilter',\n 'setPausesLocationUpdatesAutomatically',\n 'setAllowsBackgroundLocationUpdates',\n 'setLocationProtocol',\n 'startUpdatingHeading',\n 'stopUpdatingHeading',\n 'checkLocationPermission',\n 'requestLocationPermission',\n 'requestBackgroundLocationPermission',\n 'addLocationListener',\n]);\n\nfunction assertPrivacyReady(scene: 'map' | 'sdk' = 'sdk'): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n const status = nativeModule.getPrivacyStatus();\n if (!status.isReady) {\n throw ErrorHandler.privacyNotAgreed(scene);\n }\n}\n\n// 扩展原生模块,添加便捷方法\nconst helperMethods = {\n\n /**\n * 初始化 SDK,并缓存配置(包含 webKey)\n * 注意:允许不提供任何 API Key,因为原生端可能已通过 Config Plugin 配置\n */\n initSDK(config: SDKConfig): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) throw ErrorHandler.nativeModuleUnavailable();\n try {\n\n // 检查是否有任何 key 被提供\n const hasJSKeys = !!(config.androidKey || config.iosKey);\n const hasWebKey = !!config.webKey;\n // 如果 JS 端没有提供 androidKey/iosKey,检查原生端是否已配置\n if (!hasJSKeys) {\n const isNativeConfigured = nativeModule.isNativeSDKConfigured();\n if (!isNativeConfigured && !hasWebKey){\n throw ErrorHandler.invalidApiKey('both');\n }\n // 如果原生已配置,或者只提供了 webKey,继续初始化\n ErrorLogger.info(\n isNativeConfigured \n ? 'SDK 使用原生端配置的 API Key' \n : 'SDK 初始化仅使用 webKey',\n describeConfig(config)\n );\n }\n _sdkConfig = config ?? null;\n nativeModule.initSDK(config);\n _isSDKInitialized = true;\n ErrorLogger.info('SDK 初始化成功', describeConfig(config));\n } catch (error) {\n _isSDKInitialized = false;\n throw ErrorHandler.wrapNativeError(error, 'SDK 初始化');\n }\n },\n\n isSDKInitialized(): boolean {\n return _isSDKInitialized;\n },\n\n /**\n * 设置当前隐私协议版本\n * 当版本号变化时,之前的同意状态会失效\n */\n setPrivacyVersion(version: string): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) throw ErrorHandler.nativeModuleUnavailable();\n nativeModule.setPrivacyVersion(version);\n },\n\n /**\n * 清空已持久化的隐私同意状态\n */\n resetPrivacyConsent(): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) throw ErrorHandler.nativeModuleUnavailable();\n nativeModule.resetPrivacyConsent();\n },\n\n /**\n * 一次性同步完整的隐私状态\n * 推荐业务层只调用这个方法\n */\n setPrivacyConfig(config: PrivacyConfig): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) throw ErrorHandler.nativeModuleUnavailable();\n nativeModule.setPrivacyConfig(config);\n },\n\n getPrivacyStatus(): PrivacyStatus {\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n return {\n hasShow: false,\n hasContainsPrivacy: false,\n hasAgree: false,\n isReady: false,\n privacyVersion: null,\n agreedPrivacyVersion: null,\n restoredFromStorage: false,\n };\n }\n return nativeModule.getPrivacyStatus();\n },\n\n setLoadWorldVectorMap(enabled: boolean): void {\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return;\n try {\n nativeModule.setLoadWorldVectorMap(enabled);\n } catch (error) {\n ErrorLogger.warn('setLoadWorldVectorMap 失败', { enabled, error });\n }\n },\n\n getVersion(): string {\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return '0.0.0';\n try {\n return nativeModule.getVersion();\n } catch (error) {\n ErrorLogger.warn('getVersion 失败', { error });\n return '0.0.0';\n }\n },\n\n start(): void {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return;\n try {\n nativeModule.start();\n } catch (error) {\n ErrorLogger.warn('start 失败', { error });\n }\n },\n\n stop(): void {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return;\n try {\n nativeModule.stop();\n } catch (error) {\n ErrorLogger.warn('stop 失败', { error });\n }\n },\n\n isStarted(): Promise<boolean> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return Promise.resolve(false);\n try {\n return nativeModule.isStarted();\n } catch (error) {\n ErrorLogger.warn('isStarted 失败', { error });\n return Promise.resolve(false);\n }\n },\n\n async getCurrentLocation(): Promise<Coordinates | ReGeocode> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return await nativeModule.getCurrentLocation();\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '获取当前位置');\n }\n },\n\n async coordinateConvert(coordinate: LatLngPoint, type: CoordinateType): Promise<LatLng> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return await nativeModule.coordinateConvert(normalizeLatLng(coordinate), type);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '坐标转换');\n }\n },\n\n setLocatingWithReGeocode(isReGeocode: boolean): void {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return;\n try {\n nativeModule.setLocatingWithReGeocode(isReGeocode);\n } catch (error) {\n ErrorLogger.warn('setLocatingWithReGeocode 失败', { isReGeocode, error });\n }\n },\n\n get isBackgroundLocationEnabled(): boolean {\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return false;\n return nativeModule.isBackgroundLocationEnabled === true;\n },\n\n /**\n * 检查位置权限状态\n */\n async checkLocationPermission(): Promise<PermissionStatus> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return await nativeModule.checkLocationPermission();\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '检查权限');\n }\n },\n\n /**\n * 请求前台位置权限(增强版)\n */\n async requestLocationPermission(): Promise<PermissionStatus> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n const result = await nativeModule.requestLocationPermission();\n if (!result.granted) {\n ErrorLogger.warn('前台位置权限未授予', result);\n }\n return result;\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '请求前台权限');\n }\n },\n\n /**\n * 请求后台位置权限\n * 注意:必须在前台权限已授予后才能请求\n */\n async requestBackgroundLocationPermission(): Promise<PermissionStatus> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n const result = await nativeModule.requestBackgroundLocationPermission();\n if (!result.granted) {\n ErrorLogger.warn('后台位置权限未授予', result);\n }\n return result;\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '请求后台权限');\n }\n },\n\n /**\n * 打开应用设置页面\n * 引导用户手动授予权限\n */\n openAppSettings(): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n nativeModule.openAppSettings();\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '打开设置');\n }\n },\n\n setAllowsBackgroundLocationUpdates(allows: boolean): void {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n\n if (\n Platform.OS === 'ios' &&\n allows &&\n nativeModule &&\n nativeModule.isBackgroundLocationEnabled === false\n ) {\n ErrorLogger.warn(\n '⚠️ [ExpoGaodeMap] iOS 后台定位未正确配置,setAllowsBackgroundLocationUpdates(true) 可能不会生效,请检查 Info.plist 是否包含 UIBackgroundModes: location,或者在 app.json 中配置 enableBackgroundLocation: true,然后重新执行 npx expo prebuild',\n );\n }\n\n if (\n Platform.OS === 'android' &&\n allows &&\n nativeModule &&\n nativeModule.checkLocationPermission\n ) {\n nativeModule\n .checkLocationPermission()\n .then((status: PermissionStatus) => {\n if (!status.backgroundLocation) {\n ErrorLogger.warn(\n '⚠️ [ExpoGaodeMap] Android 后台位置权限未授予,setAllowsBackgroundLocationUpdates(true) 可能不会生效,请先通过 requestBackgroundLocationPermission 或系统设置授予后台定位权限,或者检查是否在 app.json 中配置了 enableBackgroundLocation: true,然后重新执行 npx expo prebuild',\n );\n }\n })\n .catch(() => {\n // 忽略检查失败,只影响日志,不影响功能\n });\n }\n\n nativeModule.setAllowsBackgroundLocationUpdates(allows);\n },\n\n /**\n * 添加定位监听器(便捷方法)\n * 自动订阅 onLocationUpdate 事件,提供容错处理\n * @param listener 定位回调函数\n * @returns 订阅对象,调用 remove() 取消监听\n * 注意:如果使用 Config Plugin 配置了 API Key,无需调用 initSDK()\n */\n addLocationListener(listener: LocationListener): { remove: () => void } {\n assertPrivacyReady('sdk');\n const module = getNativeModule();\n if (!module) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n if (!module.addListener) {\n ErrorLogger.warn('Native module does not support events');\n return {\n remove: () => { },\n };\n }\n\n return module.addListener('onLocationUpdate', listener) || {\n remove: () => { },\n };\n },\n\n // ==================== 几何计算方法 ====================\n\n /**\n * 计算两个坐标点之间的距离\n * @param coordinate1 第一个坐标点\n * @param coordinate2 第二个坐标点\n * @returns 两点之间的距离(单位:米)\n */\n distanceBetweenCoordinates(coordinate1: LatLngPoint, coordinate2: LatLngPoint): number {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.distanceBetweenCoordinates(\n normalizeLatLng(coordinate1),\n normalizeLatLng(coordinate2)\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '计算距离');\n }\n },\n\n /**\n * 根据多个坐标点计算可同时可见的推荐缩放级别\n * @param points 坐标点集合(至少 1 个)\n * @param options 视口与缩放边界选项\n * @returns 推荐 zoom\n */\n calculateFitZoom(\n points: LatLngPoint[],\n options: {\n viewportWidthPx?: number;\n viewportHeightPx?: number;\n paddingPx?: number;\n minZoom?: number;\n maxZoom?: number;\n } = {}\n ): number {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n\n const normalized = normalizeLatLngList(points);\n const minZoom = options.minZoom ?? 3;\n const maxZoom = options.maxZoom ?? 20;\n if (normalized.length === 0) {\n return minZoom;\n }\n\n try {\n return nativeModule.calculateFitZoom(\n normalized,\n options.viewportWidthPx ?? 390,\n options.viewportHeightPx ?? 844,\n options.paddingPx ?? 48,\n minZoom,\n maxZoom\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '计算拟合缩放级别');\n }\n },\n\n /**\n * 判断点是否在圆内\n * @param point 要判断的点\n * @param center 圆心坐标\n * @param radius 圆半径(单位:米)\n * @returns 是否在圆内\n */\n isPointInCircle(point: LatLngPoint, center: LatLngPoint, radius: number): boolean {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.isPointInCircle(\n normalizeLatLng(point),\n normalizeLatLng(center),\n radius\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '判断点是否在圆内');\n }\n },\n\n /**\n * 判断点是否在多边形内\n * @param point 要判断的点\n * @param polygon 多边形的顶点坐标数组,支持嵌套数组(多边形空洞)\n * @returns 是否在多边形内\n */\n isPointInPolygon(point: LatLngPoint, polygon: LatLngPoint[] | LatLngPoint[][]): boolean {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.isPointInPolygon(\n normalizeLatLng(point),\n normalizeLatLngList(polygon)\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '判断点是否在多边形内');\n }\n },\n\n /**\n * 计算多边形面积\n * @param polygon 多边形的顶点坐标数组,支持嵌套数组(多边形空洞)\n * @returns 面积(单位:平方米)\n */\n calculatePolygonArea(polygon: LatLngPoint[] | LatLngPoint[][]): number {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.calculatePolygonArea(normalizeLatLngList(polygon));\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '计算多边形面积');\n }\n },\n\n /**\n * 计算矩形面积\n * @param southWest 西南角坐标\n * @param northEast 东北角坐标\n * @returns 面积(单位:平方米)\n */\n calculateRectangleArea(southWest: LatLngPoint, northEast: LatLngPoint): number {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.calculateRectangleArea(\n normalizeLatLng(southWest),\n normalizeLatLng(northEast)\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '计算矩形面积');\n }\n },\n\n /**\n * 获取路径上距离目标点最近的点\n * @param path 路径点集合\n * @param target 目标点\n * @returns 最近点信息,包含坐标、索引和距离\n */\n getNearestPointOnPath(path: LatLngPoint[], target: LatLngPoint): {\n latitude: number;\n longitude: number;\n index: number;\n distanceMeters: number;\n } | null {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.getNearestPointOnPath(\n normalizeLatLngList(path),\n normalizeLatLng(target)\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '获取最近点');\n }\n },\n\n /**\n * 计算多边形质心\n * @param polygon 多边形顶点坐标数组\n * @returns 质心坐标\n */\n calculateCentroid(polygon: LatLngPoint[]): LatLng | null {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.calculateCentroid(normalizeLatLngList(polygon));\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '计算质心');\n }\n },\n\n /**\n * 计算路径边界和中心点\n * @param points 路径点集合\n * @returns 边界信息,包含 north, south, east, west 和 center\n */\n calculatePathBounds(points: LatLngPoint[]): {\n north: number;\n south: number;\n east: number;\n west: number;\n center: LatLngPoint;\n } | null {\n if (!nativeModule) return null;\n try {\n const normalized = normalizeLatLngList(points);\n if (normalized.length === 0) return null;\n return nativeModule.calculatePathBounds(normalized);\n } catch (error) {\n ErrorLogger.warn('calculatePathBounds 失败', { pointsCount: points.length, error });\n return null;\n }\n },\n\n /**\n * GeoHash 编码\n * @param coordinate 坐标点\n * @param precision 精度 (1-12)\n * @returns GeoHash 字符串\n */\n encodeGeoHash(coordinate: LatLngPoint, precision: number): string {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.encodeGeoHash(normalizeLatLng(coordinate), precision);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, 'GeoHash 编码');\n }\n },\n\n /**\n * 轨迹抽稀 (RDP 算法)\n * @param points 原始轨迹点\n * @param tolerance 允许误差(米)\n * @returns 简化后的轨迹点\n */\n simplifyPolyline(points: LatLngPoint[], tolerance: number): LatLng[] {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.simplifyPolyline(normalizeLatLngList(points), tolerance);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '轨迹抽稀');\n }\n },\n\n /**\n * 计算路径总长度\n * @param points 路径点\n * @returns 长度(米)\n */\n calculatePathLength(points: LatLngPoint[]): number {\n if (!nativeModule) return 0;\n try {\n return nativeModule.calculatePathLength(normalizeLatLngList(points));\n } catch (error) {\n ErrorLogger.warn('calculatePathLength 失败', { pointsCount: points.length, error });\n return 0;\n }\n },\n\n /**\n * 解析高德地图 API 返回的 Polyline 字符串\n * 格式: \"lng,lat;lng,lat;...\"\n * @param polylineStr 高德原始 polyline 字符串,或包含 polyline 属性的对象\n * @returns 解析后的点集\n */\n parsePolyline(polylineStr: string | { polyline: string }): LatLng[] {\n if (!nativeModule || !polylineStr) return [];\n try {\n // 兼容性处理:如果传入的是对象 { polyline: '...' },自动提取字符串\n let finalStr: string = '';\n if (typeof polylineStr === 'object' && polylineStr !== null && 'polyline' in polylineStr) {\n finalStr = polylineStr.polyline || '';\n } else if (typeof polylineStr === 'string') {\n finalStr = polylineStr;\n }\n\n if (!finalStr) return [];\n return nativeModule.parsePolyline(finalStr);\n } catch (error) {\n ErrorLogger.warn('解析 Polyline 失败', { polylineStr, error });\n return [];\n }\n },\n\n /**\n * 获取路径上指定距离的点\n * @param points 路径点\n * @param distance 距离起点的米数\n * @returns 点信息(坐标+角度)\n */\n getPointAtDistance(points: LatLngPoint[], distance: number): {\n latitude: number;\n longitude: number;\n angle: number;\n } | null {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.getPointAtDistance(normalizeLatLngList(points), distance);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '获取路径上的点');\n }\n },\n\n /**\n * 经纬度转换为地图瓦片坐标\n * @param coordinate 经纬度点\n * @param zoom 缩放级别\n * @returns 瓦片坐标(x, y, z)\n */\n latLngToTile(coordinate: LatLngPoint, zoom: number): { x: number; y: number; z: number } | null {\n if (!nativeModule) return null;\n try {\n return nativeModule.latLngToTile(normalizeLatLng(coordinate), zoom);\n } catch (error) {\n ErrorLogger.warn('latLngToTile 失败', { coordinate, zoom, error });\n return null;\n }\n },\n\n /**\n * 地图瓦片坐标转换为经纬度\n * @param tile 瓦片坐标(x, y, z)\n * @returns 经纬度点\n */\n tileToLatLng(tile: { x: number; y: number; z: number }): LatLng | null {\n if (!nativeModule) return null;\n try {\n return nativeModule.tileToLatLng(tile);\n } catch (error) {\n ErrorLogger.warn('tileToLatLng 失败', { tile, error });\n return null;\n }\n },\n\n /**\n * 经纬度转换为地图像素坐标\n * @param coordinate 经纬度点\n * @param zoom 缩放级别\n * @returns 像素坐标(x, y)\n */\n latLngToPixel(coordinate: LatLngPoint, zoom: number): { x: number; y: number } | null {\n if (!nativeModule) return null;\n try {\n return nativeModule.latLngToPixel(normalizeLatLng(coordinate), zoom);\n } catch (error) {\n ErrorLogger.warn('latLngToPixel 失败', { coordinate, zoom, error });\n return null;\n }\n },\n\n /**\n * 地图像素坐标转换为经纬度\n * @param pixel 像素坐标(x, y)\n * @param zoom 缩放级别\n * @returns 经纬度点\n */\n pixelToLatLng(pixel: { x: number; y: number }, zoom: number): LatLng | null {\n if (!nativeModule) return null;\n try {\n return nativeModule.pixelToLatLng(pixel, zoom);\n } catch (error) {\n ErrorLogger.warn('pixelToLatLng 失败', { pixel, zoom, error });\n return null;\n }\n },\n\n /**\n * 批量地理围栏检测\n * @param point 待检查的点\n * @param polygons 多边形数组,格式为 LatLngPoint[][] 或 LatLngPoint[][][]\n * @returns 包含点索引的数组(-1 表示不在任何多边形内)\n */\n findPointInPolygons(point: LatLngPoint, polygons: LatLngPoint[][] | LatLngPoint[][][]): number {\n if (!nativeModule) return -1;\n try {\n const normalizedPoint = normalizeLatLng(point);\n\n // 处理三维数组 (LatLngPoint[][][]) 和二维数组 (LatLngPoint[][])\n if (Array.isArray(polygons[0]) && Array.isArray(polygons[0][0])) {\n const normalizedMultiPolygons = (polygons as LatLngPoint[][][]).map((polygonRings) =>\n normalizeLatLngList(polygonRings)\n );\n\n for (let index = 0; index < normalizedMultiPolygons.length; index += 1) {\n if (nativeModule.isPointInPolygon(normalizedPoint, normalizedMultiPolygons[index])) {\n return index;\n }\n }\n\n return -1;\n }\n\n const normalizedPolygons = polygons as LatLngPoint[][];\n const processedPolygons = normalizedPolygons.map(p => normalizeLatLngList(p));\n return nativeModule.findPointInPolygons(normalizedPoint, processedPolygons);\n } catch (error) {\n ErrorLogger.warn('findPointInPolygons 失败', { point, error });\n return -1;\n }\n },\n\n /**\n * 生成网格聚合数据 (常用于展示网格聚合图或大规模点数据处理)\n * @param points 包含经纬度和权重的点数组\n * @param gridSizeMeters 网格大小(米)\n * @returns 包含经纬度和强度的网格点数组\n */\n generateHeatmapGrid(\n points: Array<LatLngPoint & { weight?: number }>,\n gridSizeMeters: number\n ): Array<{ latitude: number; longitude: number; intensity: number }> {\n if (!nativeModule || points.length === 0) return [];\n try {\n return nativeModule.generateHeatmapGrid(points, gridSizeMeters);\n } catch (error) {\n ErrorLogger.warn('generateHeatmapGrid 失败', { pointsCount: points.length, gridSizeMeters, error });\n return [];\n }\n },\n};\n\n/**\n* 获取最近一次 initSDK 的配置\n*/\nexport function getSDKConfig(): SDKConfig | null {\n return _sdkConfig;\n};\n\ntype HiddenNativeMethodName = 'setPrivacyShow' | 'setPrivacyAgree';\n\nconst hiddenNativeMethodNames = new Set<PropertyKey>([\n 'setPrivacyShow',\n 'setPrivacyAgree',\n]);\n\nexport type ExpoGaodeMapModule =\n Omit<\n NativeExpoGaodeMapModule,\n keyof typeof helperMethods | HiddenNativeMethodName\n > &\n typeof helperMethods;\n\nconst ExpoGaodeMapModuleWithHelpers = new Proxy(helperMethods, {\n get(target, prop, receiver) {\n if (Reflect.has(target, prop)) {\n return Reflect.get(target, prop, receiver);\n }\n if (hiddenNativeMethodNames.has(prop)) {\n return undefined;\n }\n const nativeModule = getNativeModule(true);\n if (!nativeModule) {\n return undefined;\n }\n\n const value = Reflect.get(nativeModule as object, prop, nativeModule as object);\n if (\n typeof prop === 'string' &&\n privacySensitiveMethodNames.has(prop) &&\n typeof value === 'function'\n ) {\n return (...args: unknown[]) => {\n assertPrivacyReady('sdk');\n return (value as (...fnArgs: unknown[]) => unknown).apply(nativeModule, args);\n };\n }\n\n return getBoundNativeValue(nativeModule, prop);\n },\n}) as ExpoGaodeMapModule;\n\n/**\n* 获取用于 Web API 的 webKey(若未初始化或未提供则返回 undefined)\n*/\nexport function getWebKey(): string | undefined {\n return _sdkConfig?.webKey;\n}\n\nexport default ExpoGaodeMapModuleWithHelpers;\n"]}
1
+ {"version":3,"file":"ExpoGaodeMapModule.js","sourceRoot":"","sources":["../../src/map/ExpoGaodeMapModule.ts"],"names":[],"mappings":"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","sourcesContent":["import { requireNativeModule } from 'expo';\nimport { Platform } from 'react-native';\n\nimport { CoordinateType } from './types';\nimport type { LatLng, Coordinates, ReGeocode, LocationListener, LatLngPoint } from './types';\nimport type { ExpoGaodeMapModule as NativeExpoGaodeMapModule } from './types/native-module.types';\nimport { ErrorHandler, ErrorLogger } from './utils/ErrorHandler';\nimport type { PrivacyConfig, PrivacyStatus, SDKConfig, PermissionStatus } from './types/common.types';\nimport { normalizeLatLng, normalizeLatLngList } from './utils/GeoUtils';\n\nlet nativeModuleCache: NativeExpoGaodeMapModule | null = null;\n\nfunction describeConfig(config: SDKConfig) {\n return {\n hasAndroidKey: Boolean(config.androidKey),\n hasIOSKey: Boolean(config.iosKey),\n hasWebKey: Boolean(config.webKey),\n };\n}\n\nfunction getNativeModule(optional = false): NativeExpoGaodeMapModule | null {\n if (nativeModuleCache) {\n return nativeModuleCache;\n }\n\n try {\n nativeModuleCache = requireNativeModule<NativeExpoGaodeMapModule>('ExpoGaodeMap');\n return nativeModuleCache;\n } catch (error) {\n if (optional) {\n return null;\n }\n const moduleError = ErrorHandler.nativeModuleUnavailable();\n ErrorLogger.log(moduleError);\n throw moduleError;\n }\n}\n\nfunction getBoundNativeValue(\n module: NativeExpoGaodeMapModule,\n prop: PropertyKey\n): unknown {\n const value = Reflect.get(module as object, prop, module as object);\n if (typeof value === 'function') {\n return (...args: unknown[]) =>\n (value as (...fnArgs: unknown[]) => unknown).apply(module, args);\n }\n return value;\n}\n\nconst nativeModule = new Proxy({} as NativeExpoGaodeMapModule, {\n get(_target, prop) {\n const module = getNativeModule(true);\n return module ? getBoundNativeValue(module, prop) : undefined;\n },\n});\n\n// 记录最近一次 initSDK 的配置(含 webKey)\nlet _sdkConfig: SDKConfig | null = null;\nlet _isSDKInitialized = false;\n\nconst privacySensitiveMethodNames = new Set<string>([\n 'start',\n 'stop',\n 'isStarted',\n 'getCurrentLocation',\n 'coordinateConvert',\n 'setLocatingWithReGeocode',\n 'setLocationMode',\n 'setInterval',\n 'setOnceLocation',\n 'setSensorEnable',\n 'setWifiScan',\n 'setGpsFirst',\n 'setMockEnable',\n 'setOnceLocationLatest',\n 'setGeoLanguage',\n 'setLocationCacheEnable',\n 'setHttpTimeOut',\n 'setDesiredAccuracy',\n 'setLocationTimeout',\n 'setReGeocodeTimeout',\n 'setDistanceFilter',\n 'setPausesLocationUpdatesAutomatically',\n 'setAllowsBackgroundLocationUpdates',\n 'setLocationProtocol',\n 'startUpdatingHeading',\n 'stopUpdatingHeading',\n 'checkLocationPermission',\n 'requestLocationPermission',\n 'requestBackgroundLocationPermission',\n 'addLocationListener',\n]);\n\nfunction assertPrivacyReady(scene: 'map' | 'sdk' = 'sdk'): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n const status = nativeModule.getPrivacyStatus();\n if (!status.isReady) {\n throw ErrorHandler.privacyNotAgreed(scene);\n }\n}\n\n// 扩展原生模块,添加便捷方法\nconst helperMethods = {\n\n /**\n * 初始化 SDK,并缓存配置(包含 webKey)\n * 注意:允许不提供任何 API Key,因为原生端可能已通过 Config Plugin 配置\n */\n initSDK(config: SDKConfig): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) throw ErrorHandler.nativeModuleUnavailable();\n try {\n\n // 检查是否有任何 key 被提供\n const hasJSKeys = !!(config.androidKey || config.iosKey);\n const hasWebKey = !!config.webKey;\n // 如果 JS 端没有提供 androidKey/iosKey,检查原生端是否已配置\n if (!hasJSKeys) {\n const isNativeConfigured = nativeModule.isNativeSDKConfigured();\n if (!isNativeConfigured && !hasWebKey){\n throw ErrorHandler.invalidApiKey('both');\n }\n // 如果原生已配置,或者只提供了 webKey,继续初始化\n ErrorLogger.info(\n isNativeConfigured \n ? 'SDK 使用原生端配置的 API Key' \n : 'SDK 初始化仅使用 webKey',\n describeConfig(config)\n );\n }\n _sdkConfig = config ?? null;\n nativeModule.initSDK(config);\n _isSDKInitialized = true;\n ErrorLogger.info('SDK 初始化成功', describeConfig(config));\n } catch (error) {\n _isSDKInitialized = false;\n throw ErrorHandler.wrapNativeError(error, 'SDK 初始化');\n }\n },\n\n isSDKInitialized(): boolean {\n return _isSDKInitialized;\n },\n\n /**\n * 设置当前隐私协议版本\n * 当版本号变化时,之前的同意状态会失效\n */\n setPrivacyVersion(version: string): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) throw ErrorHandler.nativeModuleUnavailable();\n nativeModule.setPrivacyVersion(version);\n },\n\n /**\n * 清空已持久化的隐私同意状态\n */\n resetPrivacyConsent(): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) throw ErrorHandler.nativeModuleUnavailable();\n nativeModule.resetPrivacyConsent();\n },\n\n /**\n * 一次性同步完整的隐私状态\n * 推荐业务层只调用这个方法\n */\n setPrivacyConfig(config: PrivacyConfig): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) throw ErrorHandler.nativeModuleUnavailable();\n nativeModule.setPrivacyConfig(config);\n },\n\n getPrivacyStatus(): PrivacyStatus {\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n return {\n hasShow: false,\n hasContainsPrivacy: false,\n hasAgree: false,\n isReady: false,\n privacyVersion: null,\n agreedPrivacyVersion: null,\n restoredFromStorage: false,\n };\n }\n return nativeModule.getPrivacyStatus();\n },\n\n setLoadWorldVectorMap(enabled: boolean): void {\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return;\n try {\n nativeModule.setLoadWorldVectorMap(enabled);\n } catch (error) {\n ErrorLogger.warn('setLoadWorldVectorMap 失败', { enabled, error });\n }\n },\n\n getVersion(): string {\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return '0.0.0';\n try {\n return nativeModule.getVersion();\n } catch (error) {\n ErrorLogger.warn('getVersion 失败', { error });\n return '0.0.0';\n }\n },\n\n start(): void {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return;\n try {\n nativeModule.start();\n } catch (error) {\n ErrorLogger.warn('start 失败', { error });\n }\n },\n\n stop(): void {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return;\n try {\n nativeModule.stop();\n } catch (error) {\n ErrorLogger.warn('stop 失败', { error });\n }\n },\n\n isStarted(): Promise<boolean> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return Promise.resolve(false);\n try {\n return nativeModule.isStarted();\n } catch (error) {\n ErrorLogger.warn('isStarted 失败', { error });\n return Promise.resolve(false);\n }\n },\n\n async getCurrentLocation(): Promise<Coordinates | ReGeocode> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return await nativeModule.getCurrentLocation();\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '获取当前位置');\n }\n },\n\n async coordinateConvert(coordinate: LatLngPoint, type: CoordinateType): Promise<LatLng> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return await nativeModule.coordinateConvert(normalizeLatLng(coordinate), type);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '坐标转换');\n }\n },\n\n setLocatingWithReGeocode(isReGeocode: boolean): void {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return;\n try {\n nativeModule.setLocatingWithReGeocode(isReGeocode);\n } catch (error) {\n ErrorLogger.warn('setLocatingWithReGeocode 失败', { isReGeocode, error });\n }\n },\n\n get isBackgroundLocationEnabled(): boolean {\n const nativeModule = getNativeModule(true);\n if (!nativeModule) return false;\n return nativeModule.isBackgroundLocationEnabled === true;\n },\n\n /**\n * 检查位置权限状态\n */\n async checkLocationPermission(): Promise<PermissionStatus> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return await nativeModule.checkLocationPermission();\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '检查权限');\n }\n },\n\n /**\n * 请求前台位置权限(增强版)\n */\n async requestLocationPermission(): Promise<PermissionStatus> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n const result = await nativeModule.requestLocationPermission();\n if (!result.granted) {\n ErrorLogger.warn('前台位置权限未授予', result);\n }\n return result;\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '请求前台权限');\n }\n },\n\n /**\n * 请求后台位置权限\n * 注意:必须在前台权限已授予后才能请求\n */\n async requestBackgroundLocationPermission(): Promise<PermissionStatus> {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n const result = await nativeModule.requestBackgroundLocationPermission();\n if (!result.granted) {\n ErrorLogger.warn('后台位置权限未授予', result);\n }\n return result;\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '请求后台权限');\n }\n },\n\n /**\n * 打开应用设置页面\n * 引导用户手动授予权限\n */\n openAppSettings(): void {\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n nativeModule.openAppSettings();\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '打开设置');\n }\n },\n\n setAllowsBackgroundLocationUpdates(allows: boolean): void {\n assertPrivacyReady('sdk');\n const nativeModule = getNativeModule();\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n\n if (\n Platform.OS === 'ios' &&\n allows &&\n nativeModule &&\n nativeModule.isBackgroundLocationEnabled === false\n ) {\n ErrorLogger.warn(\n '⚠️ [ExpoGaodeMap] iOS 后台定位未正确配置,setAllowsBackgroundLocationUpdates(true) 可能不会生效,请检查 Info.plist 是否包含 UIBackgroundModes: location,或者在 app.json 中配置 enableBackgroundLocation: true,然后重新执行 npx expo prebuild',\n );\n }\n\n if (\n Platform.OS === 'android' &&\n allows &&\n nativeModule &&\n nativeModule.checkLocationPermission\n ) {\n nativeModule\n .checkLocationPermission()\n .then((status: PermissionStatus) => {\n if (!status.backgroundLocation) {\n ErrorLogger.warn(\n '⚠️ [ExpoGaodeMap] Android 后台位置权限未授予,setAllowsBackgroundLocationUpdates(true) 可能不会生效,请先通过 requestBackgroundLocationPermission 或系统设置授予后台定位权限,或者检查是否在 app.json 中配置了 enableBackgroundLocation: true,然后重新执行 npx expo prebuild',\n );\n }\n })\n .catch(() => {\n // 忽略检查失败,只影响日志,不影响功能\n });\n }\n\n nativeModule.setAllowsBackgroundLocationUpdates(allows);\n },\n\n /**\n * 添加定位监听器(便捷方法)\n * 自动订阅 onLocationUpdate 事件,提供容错处理\n * @param listener 定位回调函数\n * @returns 订阅对象,调用 remove() 取消监听\n * 注意:如果使用 Config Plugin 配置了 API Key,无需调用 initSDK()\n */\n addLocationListener(listener: LocationListener): { remove: () => void } {\n assertPrivacyReady('sdk');\n const module = getNativeModule();\n if (!module) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n if (!module.addListener) {\n ErrorLogger.warn('Native module does not support events');\n return {\n remove: () => { },\n };\n }\n\n return module.addListener('onLocationUpdate', listener) || {\n remove: () => { },\n };\n },\n\n // ==================== 几何计算方法 ====================\n\n /**\n * 计算两个坐标点之间的距离\n * @param coordinate1 第一个坐标点\n * @param coordinate2 第二个坐标点\n * @returns 两点之间的距离(单位:米)\n */\n distanceBetweenCoordinates(coordinate1: LatLngPoint, coordinate2: LatLngPoint): number {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.distanceBetweenCoordinates(\n normalizeLatLng(coordinate1),\n normalizeLatLng(coordinate2)\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '计算距离');\n }\n },\n\n /**\n * 根据多个坐标点计算可同时可见的推荐缩放级别\n * @param points 坐标点集合(至少 1 个)\n * @param options 视口与缩放边界选项\n * @returns 推荐 zoom\n */\n calculateFitZoom(\n points: LatLngPoint[],\n options: {\n viewportWidthPx?: number;\n viewportHeightPx?: number;\n paddingPx?: number;\n minZoom?: number;\n maxZoom?: number;\n } = {}\n ): number {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n\n const normalized = normalizeLatLngList(points);\n const minZoom = options.minZoom ?? 3;\n const maxZoom = options.maxZoom ?? 20;\n if (normalized.length === 0) {\n return minZoom;\n }\n\n try {\n return nativeModule.calculateFitZoom(\n normalized,\n options.viewportWidthPx ?? 390,\n options.viewportHeightPx ?? 844,\n options.paddingPx ?? 48,\n minZoom,\n maxZoom\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '计算拟合缩放级别');\n }\n },\n\n /**\n * 判断点是否在圆内\n * @param point 要判断的点\n * @param center 圆心坐标\n * @param radius 圆半径(单位:米)\n * @returns 是否在圆内\n */\n isPointInCircle(point: LatLngPoint, center: LatLngPoint, radius: number): boolean {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.isPointInCircle(\n normalizeLatLng(point),\n normalizeLatLng(center),\n radius\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '判断点是否在圆内');\n }\n },\n\n /**\n * 判断点是否在多边形内\n * @param point 要判断的点\n * @param polygon 多边形的顶点坐标数组,支持嵌套数组(多边形空洞)\n * @returns 是否在多边形内\n */\n isPointInPolygon(point: LatLngPoint, polygon: LatLngPoint[] | LatLngPoint[][]): boolean {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.isPointInPolygon(\n normalizeLatLng(point),\n normalizeLatLngList(polygon)\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '判断点是否在多边形内');\n }\n },\n\n /**\n * 计算多边形面积\n * @param polygon 多边形的顶点坐标数组,支持嵌套数组(多边形空洞)\n * @returns 面积(单位:平方米)\n */\n calculatePolygonArea(polygon: LatLngPoint[] | LatLngPoint[][]): number {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.calculatePolygonArea(normalizeLatLngList(polygon));\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '计算多边形面积');\n }\n },\n\n /**\n * 计算矩形面积\n * @param southWest 西南角坐标\n * @param northEast 东北角坐标\n * @returns 面积(单位:平方米)\n */\n calculateRectangleArea(southWest: LatLngPoint, northEast: LatLngPoint): number {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.calculateRectangleArea(\n normalizeLatLng(southWest),\n normalizeLatLng(northEast)\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '计算矩形面积');\n }\n },\n\n /**\n * 获取路径上距离目标点最近的点\n * @param path 路径点集合\n * @param target 目标点\n * @returns 最近点信息,包含坐标、索引和距离\n */\n getNearestPointOnPath(path: LatLngPoint[], target: LatLngPoint): {\n latitude: number;\n longitude: number;\n index: number;\n distanceMeters: number;\n } | null {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.getNearestPointOnPath(\n normalizeLatLngList(path),\n normalizeLatLng(target)\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '获取最近点');\n }\n },\n\n /**\n * 计算多边形质心\n * @param polygon 多边形顶点坐标数组\n * @returns 质心坐标\n */\n calculateCentroid(polygon: LatLngPoint[]): LatLng | null {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.calculateCentroid(normalizeLatLngList(polygon));\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '计算质心');\n }\n },\n\n /**\n * 计算路径边界和中心点\n * @param points 路径点集合\n * @returns 边界信息,包含 north, south, east, west 和 center\n */\n calculatePathBounds(points: LatLngPoint[]): {\n north: number;\n south: number;\n east: number;\n west: number;\n center: LatLngPoint;\n } | null {\n if (!nativeModule) return null;\n try {\n const normalized = normalizeLatLngList(points);\n if (normalized.length === 0) return null;\n return nativeModule.calculatePathBounds(normalized);\n } catch (error) {\n ErrorLogger.warn('calculatePathBounds 失败', { pointsCount: points.length, error });\n return null;\n }\n },\n\n /**\n * GeoHash 编码\n * @param coordinate 坐标点\n * @param precision 精度 (1-12)\n * @returns GeoHash 字符串\n */\n encodeGeoHash(coordinate: LatLngPoint, precision: number): string {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.encodeGeoHash(normalizeLatLng(coordinate), precision);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, 'GeoHash 编码');\n }\n },\n\n /**\n * 轨迹抽稀 (RDP 算法)\n * @param points 原始轨迹点\n * @param tolerance 允许误差(米)\n * @returns 简化后的轨迹点\n */\n simplifyPolyline(points: LatLngPoint[], tolerance: number): LatLng[] {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.simplifyPolyline(normalizeLatLngList(points), tolerance);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '轨迹抽稀');\n }\n },\n\n /**\n * 计算路径总长度\n * @param points 路径点\n * @returns 长度(米)\n */\n calculatePathLength(points: LatLngPoint[]): number {\n if (!nativeModule) return 0;\n try {\n return nativeModule.calculatePathLength(normalizeLatLngList(points));\n } catch (error) {\n ErrorLogger.warn('calculatePathLength 失败', { pointsCount: points.length, error });\n return 0;\n }\n },\n\n /**\n * 解析高德地图 API 返回的 Polyline 字符串\n * 格式: \"lng,lat;lng,lat;...\"\n * @param polylineStr 高德原始 polyline 字符串,或包含 polyline 属性的对象\n * @returns 解析后的点集\n */\n parsePolyline(polylineStr: string | { polyline: string }): LatLng[] {\n if (!nativeModule || !polylineStr) return [];\n try {\n // 兼容性处理:如果传入的是对象 { polyline: '...' },自动提取字符串\n let finalStr: string = '';\n if (typeof polylineStr === 'object' && polylineStr !== null && 'polyline' in polylineStr) {\n finalStr = polylineStr.polyline || '';\n } else if (typeof polylineStr === 'string') {\n finalStr = polylineStr;\n }\n\n if (!finalStr) return [];\n return nativeModule.parsePolyline(finalStr);\n } catch (error) {\n ErrorLogger.warn('解析 Polyline 失败', { polylineStr, error });\n return [];\n }\n },\n\n /**\n * 获取路径上指定距离的点\n * @param points 路径点\n * @param distance 距离起点的米数\n * @returns 点信息(坐标+角度)\n */\n getPointAtDistance(points: LatLngPoint[], distance: number): {\n latitude: number;\n longitude: number;\n angle: number;\n } | null {\n if (!nativeModule) {\n throw ErrorHandler.nativeModuleUnavailable();\n }\n try {\n return nativeModule.getPointAtDistance(normalizeLatLngList(points), distance);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, '获取路径上的点');\n }\n },\n\n /**\n * 经纬度转换为地图瓦片坐标\n * @param coordinate 经纬度点\n * @param zoom 缩放级别\n * @returns 瓦片坐标(x, y, z)\n */\n latLngToTile(coordinate: LatLngPoint, zoom: number): { x: number; y: number; z: number } | null {\n if (!nativeModule) return null;\n try {\n return nativeModule.latLngToTile(normalizeLatLng(coordinate), zoom);\n } catch (error) {\n ErrorLogger.warn('latLngToTile 失败', { coordinate, zoom, error });\n return null;\n }\n },\n\n /**\n * 地图瓦片坐标转换为经纬度\n * @param tile 瓦片坐标(x, y, z)\n * @returns 经纬度点\n */\n tileToLatLng(tile: { x: number; y: number; z: number }): LatLng | null {\n if (!nativeModule) return null;\n try {\n return nativeModule.tileToLatLng(tile);\n } catch (error) {\n ErrorLogger.warn('tileToLatLng 失败', { tile, error });\n return null;\n }\n },\n\n /**\n * 经纬度转换为地图像素坐标\n * @param coordinate 经纬度点\n * @param zoom 缩放级别\n * @returns 像素坐标(x, y)\n */\n latLngToPixel(coordinate: LatLngPoint, zoom: number): { x: number; y: number } | null {\n if (!nativeModule) return null;\n try {\n return nativeModule.latLngToPixel(normalizeLatLng(coordinate), zoom);\n } catch (error) {\n ErrorLogger.warn('latLngToPixel 失败', { coordinate, zoom, error });\n return null;\n }\n },\n\n /**\n * 地图像素坐标转换为经纬度\n * @param pixel 像素坐标(x, y)\n * @param zoom 缩放级别\n * @returns 经纬度点\n */\n pixelToLatLng(pixel: { x: number; y: number }, zoom: number): LatLng | null {\n if (!nativeModule) return null;\n try {\n return nativeModule.pixelToLatLng(pixel, zoom);\n } catch (error) {\n ErrorLogger.warn('pixelToLatLng 失败', { pixel, zoom, error });\n return null;\n }\n },\n\n /**\n * 批量地理围栏检测\n * @param point 待检查的点\n * @param polygons 多边形数组,格式为 LatLngPoint[][] 或 LatLngPoint[][][]\n * @returns 包含点索引的数组(-1 表示不在任何多边形内)\n */\n findPointInPolygons(point: LatLngPoint, polygons: LatLngPoint[][] | LatLngPoint[][][]): number {\n if (!nativeModule) return -1;\n try {\n const normalizedPoint = normalizeLatLng(point);\n\n // 处理三维数组 (LatLngPoint[][][]) 和二维数组 (LatLngPoint[][])\n if (Array.isArray(polygons[0]) && Array.isArray(polygons[0][0])) {\n const normalizedMultiPolygons = (polygons as LatLngPoint[][][]).map((polygonRings) =>\n normalizeLatLngList(polygonRings)\n );\n\n for (let index = 0; index < normalizedMultiPolygons.length; index += 1) {\n const polygon = normalizedMultiPolygons[index];\n if (polygon && nativeModule.isPointInPolygon(normalizedPoint, polygon)) {\n return index;\n }\n }\n\n return -1;\n }\n\n const normalizedPolygons = polygons as LatLngPoint[][];\n const processedPolygons = normalizedPolygons.map(p => normalizeLatLngList(p));\n return nativeModule.findPointInPolygons(normalizedPoint, processedPolygons);\n } catch (error) {\n ErrorLogger.warn('findPointInPolygons 失败', { point, error });\n return -1;\n }\n },\n\n /**\n * 生成网格聚合数据 (常用于展示网格聚合图或大规模点数据处理)\n * @param points 包含经纬度和权重的点数组\n * @param gridSizeMeters 网格大小(米)\n * @returns 包含经纬度和强度的网格点数组\n */\n generateHeatmapGrid(\n points: Array<LatLngPoint & { weight?: number }>,\n gridSizeMeters: number\n ): Array<{ latitude: number; longitude: number; intensity: number }> {\n if (!nativeModule || points.length === 0) return [];\n try {\n return nativeModule.generateHeatmapGrid(points, gridSizeMeters);\n } catch (error) {\n ErrorLogger.warn('generateHeatmapGrid 失败', { pointsCount: points.length, gridSizeMeters, error });\n return [];\n }\n },\n};\n\n/**\n* 获取最近一次 initSDK 的配置\n*/\nexport function getSDKConfig(): SDKConfig | null {\n return _sdkConfig;\n};\n\ntype HiddenNativeMethodName = 'setPrivacyShow' | 'setPrivacyAgree';\n\nconst hiddenNativeMethodNames = new Set<PropertyKey>([\n 'setPrivacyShow',\n 'setPrivacyAgree',\n]);\n\nexport type ExpoGaodeMapModule =\n Omit<\n NativeExpoGaodeMapModule,\n keyof typeof helperMethods | HiddenNativeMethodName\n > &\n typeof helperMethods;\n\nconst ExpoGaodeMapModuleWithHelpers = new Proxy(helperMethods, {\n get(target, prop, receiver) {\n if (Reflect.has(target, prop)) {\n return Reflect.get(target, prop, receiver);\n }\n if (hiddenNativeMethodNames.has(prop)) {\n return undefined;\n }\n const nativeModule = getNativeModule(true);\n if (!nativeModule) {\n return undefined;\n }\n\n const value = Reflect.get(nativeModule as object, prop, nativeModule as object);\n if (\n typeof prop === 'string' &&\n privacySensitiveMethodNames.has(prop) &&\n typeof value === 'function'\n ) {\n return (...args: unknown[]) => {\n assertPrivacyReady('sdk');\n return (value as (...fnArgs: unknown[]) => unknown).apply(nativeModule, args);\n };\n }\n\n return getBoundNativeValue(nativeModule, prop);\n },\n}) as ExpoGaodeMapModule;\n\n/**\n* 获取用于 Web API 的 webKey(若未初始化或未提供则返回 undefined)\n*/\nexport function getWebKey(): string | undefined {\n return _sdkConfig?.webKey;\n}\n\nexport default ExpoGaodeMapModuleWithHelpers;\n"]}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * 高德地图离线地图原生模块
3
3
  */
4
- import { requireNativeModule } from 'expo';
4
+ import { NativeModule, requireNativeModule } from 'expo';
5
5
  let nativeModuleCache = null;
6
6
  function getNativeModule() {
7
7
  if (!nativeModuleCache) {
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoGaodeMapOfflineModule.js","sourceRoot":"","sources":["../../src/map/ExpoGaodeMapOfflineModule.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAgB,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAsLzD,IAAI,iBAAiB,GAAgC,IAAI,CAAC;AAE1D,SAAS,eAAe;IACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,iBAAiB,GAAG,mBAAmB,CAAuB,qBAAqB,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAA4B,EAC5B,IAAiB;IAEjB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAgB,EAAE,IAAI,EAAE,MAAgB,CAAC,CAAC;IACpE,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE,CAC3B,KAA2C,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,eAAe,IAAI,KAAK,CAAC,EAA0B,EAAE;IACnD,GAAG,CAAC,OAAO,EAAE,IAAI;QACf,OAAO,mBAAmB,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;CACF,CAAC,CAAC","sourcesContent":["/**\n * 高德地图离线地图原生模块\n */\n\nimport { NativeModule, requireNativeModule } from 'expo';\nimport type {\n OfflineMapInfo,\n OfflineMapDownloadConfig,\n OfflineMapStorageInfo,\n OfflineMapEvents,\n} from './types/offline.types';\n\n/**\n * 离线地图原生模块接口\n */\ndeclare class NaviMapOfflineModule extends NativeModule<OfflineMapEvents> {\n // ==================== 地图列表管理 ====================\n\n /**\n * 打开高德 3D 地图 SDK 官方离线地图 UI 组件(Android)。\n * 官方组件内置城市下载、暂停、更新、删除和城市搜索。\n */\n openOfflineMapUI(): Promise<void>;\n \n /**\n * 获取所有可下载的城市列表\n * @returns Promise<OfflineMapInfo[]> 城市列表\n */\n getAvailableCities(): Promise<OfflineMapInfo[]>;\n \n /**\n * 获取所有省份列表\n * @returns Promise<OfflineMapInfo[]> 省份列表\n */\n getAvailableProvinces(): Promise<OfflineMapInfo[]>;\n \n /**\n * 根据省份代码获取城市列表\n * @param provinceCode 省份代码\n * @returns Promise<OfflineMapInfo[]> 该省份下的城市列表\n */\n getCitiesByProvince(provinceCode: string): Promise<OfflineMapInfo[]>;\n \n /**\n * 获取已下载的地图列表\n * @returns Promise<OfflineMapInfo[]> 已下载的地图列表\n */\n getDownloadedMaps(): Promise<OfflineMapInfo[]>;\n \n // ==================== 下载管理 ====================\n \n /**\n * 开始下载离线地图\n * @param config 下载配置\n */\n startDownload(config: OfflineMapDownloadConfig): Promise<void>;\n \n /**\n * 暂停下载\n * @param cityCode 城市代码\n */\n pauseDownload(cityCode: string): Promise<void>;\n \n /**\n * 恢复下载\n * @param cityCode 城市代码\n */\n resumeDownload(cityCode: string): Promise<void>;\n \n /**\n * 取消下载\n * @param cityCode 城市代码\n */\n cancelDownload(cityCode: string): Promise<void>;\n \n /**\n * 删除离线地图\n * @param cityCode 城市代码\n */\n deleteMap(cityCode: string): Promise<void>;\n \n /**\n * 更新离线地图\n * @param cityCode 城市代码\n */\n updateMap(cityCode: string): Promise<void>;\n \n /**\n * 检查是否有可用更新\n * @param cityCode 城市代码\n * @returns Promise<boolean> 是否有更新\n */\n checkUpdate(cityCode: string): Promise<boolean>;\n \n // ==================== 状态查询 ====================\n \n /**\n * 检查地图是否已下载\n * @param cityCode 城市代码\n * @returns Promise<boolean> 是否已下载\n */\n isMapDownloaded(cityCode: string): Promise<boolean>;\n \n /**\n * 获取地图下载状态\n * @param cityCode 城市代码\n * @returns Promise<OfflineMapInfo> 地图信息\n */\n getMapStatus(cityCode: string): Promise<OfflineMapInfo>;\n \n /**\n * 获取所有下载任务的总进度\n * @returns Promise<number> 总进度 (0-100)\n */\n getTotalProgress(): Promise<number>;\n \n /**\n * 获取当前正在下载的城市列表\n * @returns Promise<string[]> 城市代码列表\n */\n getDownloadingCities(): Promise<string[]>;\n \n // ==================== 存储管理 ====================\n \n /**\n * 获取离线地图占用的存储空间(字节)\n * @returns Promise<number> 存储空间大小\n */\n getStorageSize(): Promise<number>;\n \n /**\n * 获取详细的存储信息\n * @returns Promise<OfflineMapStorageInfo> 存储信息\n */\n getStorageInfo(): Promise<OfflineMapStorageInfo>;\n \n /**\n * 清理所有离线地图\n */\n clearAllMaps(): Promise<void>;\n \n /**\n * 设置离线地图存储路径\n * @param path 存储路径\n */\n setStoragePath(path: string): void;\n \n /**\n * 获取离线地图存储路径\n * @returns Promise<string> 存储路径\n */\n getStoragePath(): Promise<string>;\n \n // ==================== 批量操作 ====================\n \n /**\n * 批量下载地图\n * @param cityCodes 城市代码列表\n * @param allowCellular 是否允许移动网络\n */\n batchDownload(cityCodes: string[], allowCellular?: boolean): Promise<void>;\n \n /**\n * 批量删除地图\n * @param cityCodes 城市代码列表\n */\n batchDelete(cityCodes: string[]): Promise<void>;\n \n /**\n * 批量更新地图\n * @param cityCodes 城市代码列表\n */\n batchUpdate(cityCodes: string[]): Promise<void>;\n \n /**\n * 暂停所有下载任务\n */\n pauseAllDownloads(): Promise<void>;\n \n /**\n * 恢复所有下载任务\n */\n resumeAllDownloads(): Promise<void>;\n\n}\n\nlet nativeModuleCache: NaviMapOfflineModule | null = null;\n\nfunction getNativeModule(): NaviMapOfflineModule {\n if (!nativeModuleCache) {\n nativeModuleCache = requireNativeModule<NaviMapOfflineModule>('ExpoGaodeMapOffline');\n }\n return nativeModuleCache;\n}\n\nfunction getBoundNativeValue(\n module: NaviMapOfflineModule,\n prop: PropertyKey\n): unknown {\n const value = Reflect.get(module as object, prop, module as object);\n if (typeof value === 'function') {\n return (...args: unknown[]) =>\n (value as (...fnArgs: unknown[]) => unknown).apply(module, args);\n }\n return value;\n}\n\nexport default new Proxy({} as NaviMapOfflineModule, {\n get(_target, prop) {\n return getBoundNativeValue(getNativeModule(), prop);\n },\n});\n"]}
1
+ {"version":3,"file":"ExpoGaodeMapOfflineModule.js","sourceRoot":"","sources":["../../src/map/ExpoGaodeMapOfflineModule.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAsLzD,IAAI,iBAAiB,GAAgC,IAAI,CAAC;AAE1D,SAAS,eAAe;IACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,iBAAiB,GAAG,mBAAmB,CAAuB,qBAAqB,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAA4B,EAC5B,IAAiB;IAEjB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAgB,EAAE,IAAI,EAAE,MAAgB,CAAC,CAAC;IACpE,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE,CAC3B,KAA2C,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,eAAe,IAAI,KAAK,CAAC,EAA0B,EAAE;IACnD,GAAG,CAAC,OAAO,EAAE,IAAI;QACf,OAAO,mBAAmB,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;CACF,CAAC,CAAC","sourcesContent":["/**\n * 高德地图离线地图原生模块\n */\n\nimport { NativeModule, requireNativeModule } from 'expo';\nimport type {\n OfflineMapInfo,\n OfflineMapDownloadConfig,\n OfflineMapStorageInfo,\n OfflineMapEvents,\n} from './types/offline.types';\n\n/**\n * 离线地图原生模块接口\n */\ndeclare class NaviMapOfflineModule extends NativeModule<OfflineMapEvents> {\n // ==================== 地图列表管理 ====================\n\n /**\n * 打开高德 3D 地图 SDK 官方离线地图 UI 组件(Android)。\n * 官方组件内置城市下载、暂停、更新、删除和城市搜索。\n */\n openOfflineMapUI(): Promise<void>;\n \n /**\n * 获取所有可下载的城市列表\n * @returns Promise<OfflineMapInfo[]> 城市列表\n */\n getAvailableCities(): Promise<OfflineMapInfo[]>;\n \n /**\n * 获取所有省份列表\n * @returns Promise<OfflineMapInfo[]> 省份列表\n */\n getAvailableProvinces(): Promise<OfflineMapInfo[]>;\n \n /**\n * 根据省份代码获取城市列表\n * @param provinceCode 省份代码\n * @returns Promise<OfflineMapInfo[]> 该省份下的城市列表\n */\n getCitiesByProvince(provinceCode: string): Promise<OfflineMapInfo[]>;\n \n /**\n * 获取已下载的地图列表\n * @returns Promise<OfflineMapInfo[]> 已下载的地图列表\n */\n getDownloadedMaps(): Promise<OfflineMapInfo[]>;\n \n // ==================== 下载管理 ====================\n \n /**\n * 开始下载离线地图\n * @param config 下载配置\n */\n startDownload(config: OfflineMapDownloadConfig): Promise<void>;\n \n /**\n * 暂停下载\n * @param cityCode 城市代码\n */\n pauseDownload(cityCode: string): Promise<void>;\n \n /**\n * 恢复下载\n * @param cityCode 城市代码\n */\n resumeDownload(cityCode: string): Promise<void>;\n \n /**\n * 取消下载\n * @param cityCode 城市代码\n */\n cancelDownload(cityCode: string): Promise<void>;\n \n /**\n * 删除离线地图\n * @param cityCode 城市代码\n */\n deleteMap(cityCode: string): Promise<void>;\n \n /**\n * 更新离线地图\n * @param cityCode 城市代码\n */\n updateMap(cityCode: string): Promise<void>;\n \n /**\n * 检查是否有可用更新\n * @param cityCode 城市代码\n * @returns Promise<boolean> 是否有更新\n */\n checkUpdate(cityCode: string): Promise<boolean>;\n \n // ==================== 状态查询 ====================\n \n /**\n * 检查地图是否已下载\n * @param cityCode 城市代码\n * @returns Promise<boolean> 是否已下载\n */\n isMapDownloaded(cityCode: string): Promise<boolean>;\n \n /**\n * 获取地图下载状态\n * @param cityCode 城市代码\n * @returns Promise<OfflineMapInfo> 地图信息\n */\n getMapStatus(cityCode: string): Promise<OfflineMapInfo>;\n \n /**\n * 获取所有下载任务的总进度\n * @returns Promise<number> 总进度 (0-100)\n */\n getTotalProgress(): Promise<number>;\n \n /**\n * 获取当前正在下载的城市列表\n * @returns Promise<string[]> 城市代码列表\n */\n getDownloadingCities(): Promise<string[]>;\n \n // ==================== 存储管理 ====================\n \n /**\n * 获取离线地图占用的存储空间(字节)\n * @returns Promise<number> 存储空间大小\n */\n getStorageSize(): Promise<number>;\n \n /**\n * 获取详细的存储信息\n * @returns Promise<OfflineMapStorageInfo> 存储信息\n */\n getStorageInfo(): Promise<OfflineMapStorageInfo>;\n \n /**\n * 清理所有离线地图\n */\n clearAllMaps(): Promise<void>;\n \n /**\n * 设置离线地图存储路径\n * @param path 存储路径\n */\n setStoragePath(path: string): void;\n \n /**\n * 获取离线地图存储路径\n * @returns Promise<string> 存储路径\n */\n getStoragePath(): Promise<string>;\n \n // ==================== 批量操作 ====================\n \n /**\n * 批量下载地图\n * @param cityCodes 城市代码列表\n * @param allowCellular 是否允许移动网络\n */\n batchDownload(cityCodes: string[], allowCellular?: boolean): Promise<void>;\n \n /**\n * 批量删除地图\n * @param cityCodes 城市代码列表\n */\n batchDelete(cityCodes: string[]): Promise<void>;\n \n /**\n * 批量更新地图\n * @param cityCodes 城市代码列表\n */\n batchUpdate(cityCodes: string[]): Promise<void>;\n \n /**\n * 暂停所有下载任务\n */\n pauseAllDownloads(): Promise<void>;\n \n /**\n * 恢复所有下载任务\n */\n resumeAllDownloads(): Promise<void>;\n\n}\n\nlet nativeModuleCache: NaviMapOfflineModule | null = null;\n\nfunction getNativeModule(): NaviMapOfflineModule {\n if (!nativeModuleCache) {\n nativeModuleCache = requireNativeModule<NaviMapOfflineModule>('ExpoGaodeMapOffline');\n }\n return nativeModuleCache;\n}\n\nfunction getBoundNativeValue(\n module: NaviMapOfflineModule,\n prop: PropertyKey\n): unknown {\n const value = Reflect.get(module as object, prop, module as object);\n if (typeof value === 'function') {\n return (...args: unknown[]) =>\n (value as (...fnArgs: unknown[]) => unknown).apply(module, args);\n }\n return value;\n}\n\nexport default new Proxy({} as NaviMapOfflineModule, {\n get(_target, prop) {\n return getBoundNativeValue(getNativeModule(), prop);\n },\n});\n"]}
@@ -1,3 +1,4 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
2
  import * as React from 'react';
2
3
  import ExpoGaodeMapModule from './ExpoGaodeMapModule';
3
4
  import { normalizeLatLng } from './utils/GeoUtils';
@@ -158,14 +159,7 @@ const ExpoGaodeMapView = React.forwardRef((props, ref) => {
158
159
  const { children, style, ...otherProps } = props;
159
160
  const { overlays, uiControls } = React.useMemo(() => splitMapChildren(children), [children]);
160
161
  const containerStyle = React.useMemo(() => [styles.container, style], [style]);
161
- return (<MapContext.Provider value={apiRef}>
162
- <View style={containerStyle}>
163
- <NativeView ref={nativeRef} style={StyleSheet.absoluteFill} {...otherProps}>
164
- {overlays}
165
- </NativeView>
166
- {uiControls}
167
- </View>
168
- </MapContext.Provider>);
162
+ return (_jsx(MapContext.Provider, { value: apiRef, children: _jsxs(View, { style: containerStyle, children: [_jsx(NativeView, { ref: nativeRef, style: StyleSheet.absoluteFill, ...otherProps, children: overlays }), uiControls] }) }));
169
163
  });
170
164
  ExpoGaodeMapView.displayName = 'ExpoGaodeMapView';
171
165
  export default ExpoGaodeMapView;
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoGaodeMapView.js","sourceRoot":"","sources":["../../src/map/ExpoGaodeMapView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAKhD,MAAM,aAAa,GAAG,2BAA2B,CAAiD,kBAAkB,CAAC,CAAC;AACtH,MAAM,QAAQ,GAAG,CAAC,CAAC;AACnB,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,SAAS,YAAY,CAAC,aAAqB,EAAE,cAAsB,EAAE,OAAiC;IACpG,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpH,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAyB;IACjD,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,MAAM,UAAU,GAAsB,EAAE,CAAC;IAEzC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;QACzC,IACE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;YAC3B,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,IAAK,KAAK,CAAC,IAA8B,EAAE,OAAO,CAAC,EACxE,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAA2B,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACjF,MAAM,aAAa,GAAG,kBAAkB,CAAC,gBAAgB,EAAE,CAAC;IAC5D,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAa,IAAI,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;IAE5D,MAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,CAAC,CACzC,UAA4B,EAC5B,GAAG,IAAmB,EACtB,EAAE;QACF,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,YAAY,CAAC,qBAAqB,CAAC,UAAoB,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAC9B,SAAS,CAAC,OAAiB,EAC3B,UAAU,EACV,SAAS,CAAC,OAAiB,CAC5B,CAAC;QAEF,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,uFAAuF,CAAC,CAAC;QAChI,CAAC;QAED,OAAQ,YAAgE,CAAC,KAAK,CAC5E,SAAS,CAAC,OAAO,EACjB,IAAI,CACL,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP;;OAEG;IACH,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC,CACxC,UAA4B,EAC5B,EAAE;QACF,OAAO,CAAC,CAAC,GAAG,IAAmB,EAAE,EAAE;YACjC,IAAI,CAAC;gBACH,OAAO,gBAAgB,CAAI,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;YAClD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,YAAY,CAAC,eAAe,CAAC,KAAK,EAAE,UAAoB,CAAC,CAAC;YAClE,CAAC;QACH,CAAC,CAAM,CAAC;IACV,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvB;;;OAGG;IACH,MAAM,MAAM,GAAe,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9C,UAAU,EAAE,CAAC,QAAsB,EAAE,QAAiB,EAAE,EAAE;YACxD,IAAI,CAAC;gBACH,MAAM,kBAAkB,GAAG;oBACzB,GAAG,QAAQ;oBACX,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;iBACvE,CAAC;gBACF,OAAO,gBAAgB,CACrB,YAAY,EACZ,kBAAkB,EAClB,QAAQ,IAAI,CAAC,CACd,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,YAAY,CAAC,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QACD,SAAS,EAAE,eAAe,CAAoC,WAAW,CAAC;QAC1E,SAAS,EAAE,CAAC,MAAmB,EAAE,QAAkB,EAAE,EAAE;YACrD,IAAI,CAAC;gBACH,OAAO,gBAAgB,CACrB,WAAW,EACX,eAAe,CAAC,MAAM,CAAC,EACvB,QAAQ,IAAI,KAAK,CAClB,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,YAAY,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC,IAAY,EAAE,QAAkB,EAAE,EAAE;YAC5C,IAAI,CAAC;gBACH,OAAO,gBAAgB,CACrB,SAAS,EACT,IAAI,EACJ,QAAQ,IAAI,KAAK,CAClB,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,YAAY,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QACD,iBAAiB,EAAE,eAAe,CAAgC,mBAAmB,CAAC;QACtF,YAAY,EAAE,eAAe,CAAwB,cAAc,CAAC;QACpE,gBAAgB,EAAE,KAAK,EAAE,MAAqB,EAAE,OAAiC,EAAE,EAAE;YACnF,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC5B,OAAO;gBACT,CAAC;gBAED,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAgC,mBAAmB,CAAC,CAAC;gBACjG,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC5B,MAAM,gBAAgB,CACpB,YAAY,EACZ;wBACE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;wBACrB,IAAI,EAAE,OAAO,EAAE,eAAe,IAAI,aAAa,CAAC,IAAI,IAAI,EAAE;wBAC1D,OAAO,EAAE,OAAO,EAAE,eAAe,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,IAAI,OAAO,EAAE,OAAO;wBAC1G,IAAI,EAAE,OAAO,EAAE,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,IAAI,OAAO,EAAE,IAAI;qBAC5F,EACD,OAAO,EAAE,QAAQ,IAAI,CAAC,CACvB,CAAC;oBACF,OAAO;gBACT,CAAC;gBAED,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC5D,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC9D,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,GAAG,CAAC;gBACpD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;gBACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;gBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;gBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;gBAErC,MAAM,gBAAgB,CACpB,YAAY,EACZ;oBACE,MAAM,EAAE;wBACN,QAAQ,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;wBAC7B,SAAS,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;qBAC7B;oBACD,IAAI,EAAE,YAAY,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,aAAa,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,aAAa,EAAE,OAAO,CAAC;oBAC3F,OAAO,EAAE,OAAO,EAAE,eAAe,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,IAAI,OAAO,EAAE,OAAO;oBAC1G,IAAI,EAAE,OAAO,EAAE,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,IAAI,OAAO,EAAE,IAAI;iBAC5F,EACD,OAAO,EAAE,QAAQ,IAAI,CAAC,CACvB,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,YAAY,CAAC,eAAe,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;KACF,CAAC,EAAE,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC,CAAC;IAEzC;;;OAGG;IACH,KAAK,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEvD,+BAA+B;IAC/B,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE,GAAG,KAAK,CAAC;IACjD,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,OAAO,CAC5C,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAChC,CAAC,QAAQ,CAAC,CACX,CAAC;IACF,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAClC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,EAC/B,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,OAAO,CACL,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CACjC;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAC1B;QAAA,CAAC,UAAU,CACT,GAAG,CAAC,CAAC,SAAS,CAAC,CACf,KAAK,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAC/B,IAAI,UAAU,CAAC,CAEf;UAAA,CAAC,QAAQ,CACX;QAAA,EAAE,UAAU,CACZ;QAAA,CAAC,UAAU,CACb;MAAA,EAAE,IAAI,CACR;IAAA,EAAE,UAAU,CAAC,QAAQ,CAAC,CACvB,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,gBAAgB,CAAC,WAAW,GAAG,kBAAkB,CAAC;AAElD,eAAe,gBAAgB,CAAC;AAEhC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,IAAI,EAAE,CAAC;QACP,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,QAAQ;KACnB;CACF,CAAC,CAAC","sourcesContent":["import * as React from 'react';\n\nimport type {\n MapViewProps,\n MapViewRef,\n CameraPosition,\n CameraUpdate,\n LatLng,\n Point,\n LatLngPoint,\n} from './types';\nimport ExpoGaodeMapModule from './ExpoGaodeMapModule';\nimport { normalizeLatLng } from './utils/GeoUtils';\nimport { ErrorHandler } from './utils/ErrorHandler';\nimport { MapContext } from './components/MapContext';\nimport { MapUI } from './components/MapUI';\nimport { createLazyNativeViewManager } from './utils/lazyNativeViewManager';\nimport { View, StyleSheet } from 'react-native';\nimport type { FitToCoordinatesOptions } from './types/route-playback.types';\n\nexport type { MapViewRef } from './types';\n\nconst getNativeView = createLazyNativeViewManager<MapViewProps & { ref?: React.Ref<MapViewRef> }>('ExpoGaodeMapView');\nconst MIN_ZOOM = 3;\nconst MAX_ZOOM = 20;\n\nfunction estimateZoom(latitudeDelta: number, longitudeDelta: number, options?: FitToCoordinatesOptions) {\n const span = Math.max(latitudeDelta, longitudeDelta, 0.0001);\n const rawZoom = Math.log2(360 / span);\n return Math.max(options?.minZoom ?? MIN_ZOOM, Math.min(options?.maxZoom ?? MAX_ZOOM, Number(rawZoom.toFixed(2))));\n}\n\nfunction splitMapChildren(children: React.ReactNode) {\n const overlays: React.ReactNode[] = [];\n const uiControls: React.ReactNode[] = [];\n\n React.Children.forEach(children, (child) => {\n if (\n React.isValidElement(child) &&\n (child.type === MapUI || (child.type as { isMapUI?: boolean })?.isMapUI)\n ) {\n uiControls.push(child);\n } else {\n overlays.push(child);\n }\n });\n\n return { overlays, uiControls };\n}\n\n/**\n * 高德地图视图组件,提供地图操作API和覆盖物管理功能\n * \n * @param props - 组件属性\n * @param ref - 外部ref引用,用于访问地图API方法\n * @returns 返回包含地图视图和上下文提供者的React组件\n * \n * @remarks\n * 该组件内部维护 nativeRef,用于将 JS ref API 转发到原生地图视图。\n * MapContext 会向子组件共享同一组地图 API 方法。\n * \n * 提供的主要API功能包括:\n * - 相机控制(移动、缩放、获取当前位置)\n * - 屏幕坐标转换、截图、根据坐标集合拟合相机\n * \n * 所有API方法都会检查地图是否已初始化,未初始化时抛出错误\n */\nconst ExpoGaodeMapView = React.forwardRef<MapViewRef, MapViewProps>((props, ref) => {\n const privacyStatus = ExpoGaodeMapModule.getPrivacyStatus();\n if (!privacyStatus.isReady) {\n throw ErrorHandler.privacyNotAgreed('map');\n }\n\n const nativeRef = React.useRef<MapViewRef>(null);\n const NativeView = React.useMemo(() => getNativeView(), []);\n\n const callNativeMethod = React.useCallback(<T extends (...args: never[]) => unknown>(\n methodName: keyof MapViewRef,\n ...args: Parameters<T>\n ) => {\n if (!nativeRef.current) {\n throw ErrorHandler.mapViewNotInitialized(methodName as string);\n }\n\n const nativeMethod = Reflect.get(\n nativeRef.current as object,\n methodName,\n nativeRef.current as object\n );\n\n if (typeof nativeMethod !== 'function') {\n throw new Error(`Method '${methodName}' is not available on native view. Make sure the native module is linked and rebuilt.`);\n }\n\n return (nativeMethod as (...methodArgs: Parameters<T>) => ReturnType<T>).apply(\n nativeRef.current,\n args\n );\n }, []);\n \n /**\n * 通用 API 方法包装器,统一处理初始化检查和错误包装。\n */\n const createApiMethod = React.useCallback(<T extends (...args: never[]) => unknown>(\n methodName: keyof MapViewRef\n ) => {\n return ((...args: Parameters<T>) => {\n try {\n return callNativeMethod<T>(methodName, ...args);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, methodName as string);\n }\n }) as T;\n }, [callNativeMethod]);\n\n /**\n * 使用通用包装器创建所有 API 方法\n * 所有方法共享相同的错误处理逻辑\n */\n const apiRef: MapViewRef = React.useMemo(() => ({\n moveCamera: (position: CameraUpdate, duration?: number) => {\n try {\n const normalizedPosition = {\n ...position,\n target: position.target ? normalizeLatLng(position.target) : undefined,\n };\n return callNativeMethod<(cameraPosition: CameraUpdate, animationDuration: number) => Promise<void>>(\n 'moveCamera',\n normalizedPosition,\n duration ?? 0\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, 'moveCamera');\n }\n },\n getLatLng: createApiMethod<(point: Point) => Promise<LatLng>>('getLatLng'),\n setCenter: (center: LatLngPoint, animated?: boolean) => {\n try {\n return callNativeMethod<(normalizedCenter: LatLng, animatedFlag: boolean) => Promise<void>>(\n 'setCenter',\n normalizeLatLng(center),\n animated ?? false\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, 'setCenter');\n }\n },\n setZoom: (zoom: number, animated?: boolean) => {\n try {\n return callNativeMethod<(zoomLevel: number, animatedFlag: boolean) => Promise<void>>(\n 'setZoom',\n zoom,\n animated ?? false\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, 'setZoom');\n }\n },\n getCameraPosition: createApiMethod<() => Promise<CameraPosition>>('getCameraPosition'),\n takeSnapshot: createApiMethod<() => Promise<string>>('takeSnapshot'),\n fitToCoordinates: async (points: LatLngPoint[], options?: FitToCoordinatesOptions) => {\n try {\n const normalized = points.map((point) => normalizeLatLng(point));\n if (normalized.length === 0) {\n return;\n }\n\n const currentCamera = await callNativeMethod<() => Promise<CameraPosition>>('getCameraPosition');\n if (normalized.length === 1) {\n await callNativeMethod<(cameraPosition: CameraUpdate, animationDuration: number) => Promise<void>>(\n 'moveCamera',\n {\n target: normalized[0],\n zoom: options?.singlePointZoom ?? currentCamera.zoom ?? 16,\n bearing: options?.preserveBearing === false ? options?.bearing : currentCamera.bearing ?? options?.bearing,\n tilt: options?.preserveTilt === false ? options?.tilt : currentCamera.tilt ?? options?.tilt,\n },\n options?.duration ?? 0\n );\n return;\n }\n\n const latitudes = normalized.map((point) => point.latitude);\n const longitudes = normalized.map((point) => point.longitude);\n const paddingFactor = options?.paddingFactor ?? 1.2;\n const north = Math.max(...latitudes);\n const south = Math.min(...latitudes);\n const east = Math.max(...longitudes);\n const west = Math.min(...longitudes);\n\n await callNativeMethod<(cameraPosition: CameraUpdate, animationDuration: number) => Promise<void>>(\n 'moveCamera',\n {\n target: {\n latitude: (north + south) / 2,\n longitude: (east + west) / 2,\n },\n zoom: estimateZoom((north - south) * paddingFactor, (east - west) * paddingFactor, options),\n bearing: options?.preserveBearing === false ? options?.bearing : currentCamera.bearing ?? options?.bearing,\n tilt: options?.preserveTilt === false ? options?.tilt : currentCamera.tilt ?? options?.tilt,\n },\n options?.duration ?? 0\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, 'fitToCoordinates');\n }\n },\n }), [callNativeMethod, createApiMethod]);\n\n /**\n * 获取当前地图实例的API引用\n * @returns 返回地图API的引用对象,可用于调用地图相关方法\n */\n React.useImperativeHandle(ref, () => apiRef, [apiRef]);\n\n // 分离 children:区分原生覆盖物和普通 UI 组件\n const { children, style, ...otherProps } = props;\n const { overlays, uiControls } = React.useMemo(\n () => splitMapChildren(children),\n [children]\n );\n const containerStyle = React.useMemo(\n () => [styles.container, style],\n [style]\n );\n\n return (\n <MapContext.Provider value={apiRef}>\n <View style={containerStyle}>\n <NativeView\n ref={nativeRef}\n style={StyleSheet.absoluteFill}\n {...otherProps}\n >\n {overlays}\n </NativeView>\n {uiControls}\n </View>\n </MapContext.Provider>\n );\n});\n\nExpoGaodeMapView.displayName = 'ExpoGaodeMapView';\n\nexport default ExpoGaodeMapView;\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n position: 'relative',\n overflow: 'hidden',\n },\n});\n"]}
1
+ {"version":3,"file":"ExpoGaodeMapView.js","sourceRoot":"","sources":["../../src/map/ExpoGaodeMapView.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport type {\n MapViewProps,\n MapViewRef,\n CameraPosition,\n CameraUpdate,\n LatLng,\n Point,\n LatLngPoint,\n} from './types';\nimport ExpoGaodeMapModule from './ExpoGaodeMapModule';\nimport { normalizeLatLng } from './utils/GeoUtils';\nimport { ErrorHandler } from './utils/ErrorHandler';\nimport { MapContext } from './components/MapContext';\nimport { MapUI } from './components/MapUI';\nimport { createLazyNativeViewManager } from './utils/lazyNativeViewManager';\nimport { View, StyleSheet } from 'react-native';\nimport type { FitToCoordinatesOptions } from './types/route-playback.types';\n\nexport type { MapViewRef } from './types';\n\nconst getNativeView = createLazyNativeViewManager<MapViewProps & { ref?: React.Ref<MapViewRef> }>('ExpoGaodeMapView');\nconst MIN_ZOOM = 3;\nconst MAX_ZOOM = 20;\n\nfunction estimateZoom(latitudeDelta: number, longitudeDelta: number, options?: FitToCoordinatesOptions) {\n const span = Math.max(latitudeDelta, longitudeDelta, 0.0001);\n const rawZoom = Math.log2(360 / span);\n return Math.max(options?.minZoom ?? MIN_ZOOM, Math.min(options?.maxZoom ?? MAX_ZOOM, Number(rawZoom.toFixed(2))));\n}\n\nfunction splitMapChildren(children: React.ReactNode) {\n const overlays: React.ReactNode[] = [];\n const uiControls: React.ReactNode[] = [];\n\n React.Children.forEach(children, (child) => {\n if (\n React.isValidElement(child) &&\n (child.type === MapUI || (child.type as { isMapUI?: boolean })?.isMapUI)\n ) {\n uiControls.push(child);\n } else {\n overlays.push(child);\n }\n });\n\n return { overlays, uiControls };\n}\n\n/**\n * 高德地图视图组件,提供地图操作API和覆盖物管理功能\n * \n * @param props - 组件属性\n * @param ref - 外部ref引用,用于访问地图API方法\n * @returns 返回包含地图视图和上下文提供者的React组件\n * \n * @remarks\n * 该组件内部维护 nativeRef,用于将 JS ref API 转发到原生地图视图。\n * MapContext 会向子组件共享同一组地图 API 方法。\n * \n * 提供的主要API功能包括:\n * - 相机控制(移动、缩放、获取当前位置)\n * - 屏幕坐标转换、截图、根据坐标集合拟合相机\n * \n * 所有API方法都会检查地图是否已初始化,未初始化时抛出错误\n */\nconst ExpoGaodeMapView = React.forwardRef<MapViewRef, MapViewProps>((props, ref) => {\n const privacyStatus = ExpoGaodeMapModule.getPrivacyStatus();\n if (!privacyStatus.isReady) {\n throw ErrorHandler.privacyNotAgreed('map');\n }\n\n const nativeRef = React.useRef<MapViewRef>(null);\n const NativeView = React.useMemo(() => getNativeView(), []);\n\n const callNativeMethod = React.useCallback(<T extends (...args: never[]) => unknown>(\n methodName: keyof MapViewRef,\n ...args: Parameters<T>\n ) => {\n if (!nativeRef.current) {\n throw ErrorHandler.mapViewNotInitialized(methodName as string);\n }\n\n const nativeMethod = Reflect.get(\n nativeRef.current as object,\n methodName,\n nativeRef.current as object\n );\n\n if (typeof nativeMethod !== 'function') {\n throw new Error(`Method '${methodName}' is not available on native view. Make sure the native module is linked and rebuilt.`);\n }\n\n return (nativeMethod as (...methodArgs: Parameters<T>) => ReturnType<T>).apply(\n nativeRef.current,\n args\n );\n }, []);\n \n /**\n * 通用 API 方法包装器,统一处理初始化检查和错误包装。\n */\n const createApiMethod = React.useCallback(<T extends (...args: never[]) => unknown>(\n methodName: keyof MapViewRef\n ) => {\n return ((...args: Parameters<T>) => {\n try {\n return callNativeMethod<T>(methodName, ...args);\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, methodName as string);\n }\n }) as T;\n }, [callNativeMethod]);\n\n /**\n * 使用通用包装器创建所有 API 方法\n * 所有方法共享相同的错误处理逻辑\n */\n const apiRef: MapViewRef = React.useMemo(() => ({\n moveCamera: (position: CameraUpdate, duration?: number) => {\n try {\n const normalizedPosition = {\n ...position,\n target: position.target ? normalizeLatLng(position.target) : undefined,\n };\n return callNativeMethod<(cameraPosition: CameraUpdate, animationDuration: number) => Promise<void>>(\n 'moveCamera',\n normalizedPosition,\n duration ?? 0\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, 'moveCamera');\n }\n },\n getLatLng: createApiMethod<(point: Point) => Promise<LatLng>>('getLatLng'),\n setCenter: (center: LatLngPoint, animated?: boolean) => {\n try {\n return callNativeMethod<(normalizedCenter: LatLng, animatedFlag: boolean) => Promise<void>>(\n 'setCenter',\n normalizeLatLng(center),\n animated ?? false\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, 'setCenter');\n }\n },\n setZoom: (zoom: number, animated?: boolean) => {\n try {\n return callNativeMethod<(zoomLevel: number, animatedFlag: boolean) => Promise<void>>(\n 'setZoom',\n zoom,\n animated ?? false\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, 'setZoom');\n }\n },\n getCameraPosition: createApiMethod<() => Promise<CameraPosition>>('getCameraPosition'),\n takeSnapshot: createApiMethod<() => Promise<string>>('takeSnapshot'),\n fitToCoordinates: async (points: LatLngPoint[], options?: FitToCoordinatesOptions) => {\n try {\n const normalized = points.map((point) => normalizeLatLng(point));\n if (normalized.length === 0) {\n return;\n }\n\n const currentCamera = await callNativeMethod<() => Promise<CameraPosition>>('getCameraPosition');\n if (normalized.length === 1) {\n await callNativeMethod<(cameraPosition: CameraUpdate, animationDuration: number) => Promise<void>>(\n 'moveCamera',\n {\n target: normalized[0],\n zoom: options?.singlePointZoom ?? currentCamera.zoom ?? 16,\n bearing: options?.preserveBearing === false ? options?.bearing : currentCamera.bearing ?? options?.bearing,\n tilt: options?.preserveTilt === false ? options?.tilt : currentCamera.tilt ?? options?.tilt,\n },\n options?.duration ?? 0\n );\n return;\n }\n\n const latitudes = normalized.map((point) => point.latitude);\n const longitudes = normalized.map((point) => point.longitude);\n const paddingFactor = options?.paddingFactor ?? 1.2;\n const north = Math.max(...latitudes);\n const south = Math.min(...latitudes);\n const east = Math.max(...longitudes);\n const west = Math.min(...longitudes);\n\n await callNativeMethod<(cameraPosition: CameraUpdate, animationDuration: number) => Promise<void>>(\n 'moveCamera',\n {\n target: {\n latitude: (north + south) / 2,\n longitude: (east + west) / 2,\n },\n zoom: estimateZoom((north - south) * paddingFactor, (east - west) * paddingFactor, options),\n bearing: options?.preserveBearing === false ? options?.bearing : currentCamera.bearing ?? options?.bearing,\n tilt: options?.preserveTilt === false ? options?.tilt : currentCamera.tilt ?? options?.tilt,\n },\n options?.duration ?? 0\n );\n } catch (error) {\n throw ErrorHandler.wrapNativeError(error, 'fitToCoordinates');\n }\n },\n }), [callNativeMethod, createApiMethod]);\n\n /**\n * 获取当前地图实例的API引用\n * @returns 返回地图API的引用对象,可用于调用地图相关方法\n */\n React.useImperativeHandle(ref, () => apiRef, [apiRef]);\n\n // 分离 children:区分原生覆盖物和普通 UI 组件\n const { children, style, ...otherProps } = props;\n const { overlays, uiControls } = React.useMemo(\n () => splitMapChildren(children),\n [children]\n );\n const containerStyle = React.useMemo(\n () => [styles.container, style],\n [style]\n );\n\n return (\n <MapContext.Provider value={apiRef}>\n <View style={containerStyle}>\n <NativeView\n ref={nativeRef}\n style={StyleSheet.absoluteFill}\n {...otherProps}\n >\n {overlays}\n </NativeView>\n {uiControls}\n </View>\n </MapContext.Provider>\n );\n});\n\nExpoGaodeMapView.displayName = 'ExpoGaodeMapView';\n\nexport default ExpoGaodeMapView;\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n position: 'relative',\n overflow: 'hidden',\n },\n});\n"]}
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
- import { DeviceInfo, FoldState } from '../utils/PlatformDetector';
3
- import { MapViewProps, MapViewRef } from '../types';
2
+ import { FoldState } from '../utils/PlatformDetector';
3
+ import type { DeviceInfo } from '../utils/PlatformDetector';
4
+ import type { MapViewProps, MapViewRef } from '../types';
4
5
  /**
5
6
  * 折叠屏适配配置
6
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"FoldableMapView.d.ts","sourceRoot":"","sources":["../../../src/map/components/FoldableMapView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAI3D,OAAO,EAAoB,UAAU,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oBAAoB;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe;IACf,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IACvE,eAAe;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACxD,cAAc;IACd,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAwI1D,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,EACnC,MAAM,CAAC,EAAE,cAAc;;;;EAkExB"}
1
+ {"version":3,"file":"FoldableMapView.d.ts","sourceRoot":"","sources":["../../../src/map/components/FoldableMapView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAI3D,OAAO,EAAoB,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oBAAoB;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe;IACf,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IACvE,eAAe;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACxD,cAAc;IACd,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAwI1D,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,EACnC,MAAM,CAAC,EAAE,cAAc;;;;EAkExB"}