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 +1 @@
1
- {"version":3,"file":"map-view.types.d.ts","sourceRoot":"","sources":["../../../src/map/types/map-view.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"map-view.types.d.ts","sourceRoot":"","sources":["../../../src/map/types/map-view.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"map-view.types.js","sourceRoot":"","sources":["../../../src/map/types/map-view.types.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/**\n * 高德地图视图相关类型定义\n * 基于 Expo Modules API\n */\n\nimport type { StyleProp, ViewStyle, NativeSyntheticEvent } from 'react-native';\nimport type { CameraPosition, CameraUpdate, LatLng, LatLngBounds, MapPoi, MapType, Point, LatLngPoint } from './common.types';\nimport type { Coordinates, ReGeocode, HeadingUpdate } from './location.types';\nimport type { FitToCoordinatesOptions } from './route-playback.types';\n\n/**\n * 定位事件数据\n */\nexport interface LocationEvent {\n /**\n * 纬度\n */\n latitude: number;\n \n /**\n * 经度\n */\n longitude: number;\n \n /**\n * 定位精度(米)\n */\n accuracy: number;\n}\n\n\n/**\n * 地图相机事件\n */\nexport interface CameraEvent {\n /**\n * 相机位置\n */\n cameraPosition: CameraPosition;\n\n /**\n * 可见区域边界\n */\n latLngBounds: LatLngBounds;\n}\n\n/**\n * 地图视图属性\n */\nexport interface MapViewProps {\n /**\n * 地图类型\n */\n mapType?: MapType;\n\n /**\n * 初始相机位置\n */\n initialCameraPosition?: CameraPosition;\n\n /**\n * 是否显示当前定位\n */\n myLocationEnabled?: boolean;\n\n /**\n * 是否跟随用户位置\n * @default false\n */\n followUserLocation?: boolean;\n\n /**\n * 定位蓝点配置\n */\n userLocationRepresentation?: {\n /** 精度圈是否显示 @default true */\n showsAccuracyRing?: boolean;\n /** 是否显示方向指示 @default true @platform ios */\n showsHeadingIndicator?: boolean;\n /** 精度圈填充颜色 支持 '#RRGGBB'、'red' 或 ARGB 数字 */\n fillColor?: string | number;\n /** 精度圈边线颜色 */\n strokeColor?: string | number;\n /** 精度圈边线宽度 @default 0 */\n lineWidth?: number;\n /** 内部蓝色圆点是否使用律动效果 @default true @platform ios */\n enablePulseAnimation?: boolean;\n /** 定位点背景色 @default 'white' @platform ios */\n locationDotBgColor?: string | number;\n /** 定位点蓝色圆点颜色 @default 'blue' @platform ios */\n locationDotFillColor?: string | number;\n /** 定位图标 支持网络图片(http/https)、本地文件(file://)或资源名称 */\n image?: string;\n /** 定位图标宽度(像素) */\n imageWidth?: number;\n /** 定位图标高度(像素) */\n imageHeight?: number;\n /**\n * 是否显示定位蓝点 @default true\n * - iOS: 对应 mapView.showsUserLocation\n * - Android: 对应 MyLocationStyle.showMyLocation() (5.1.0+)\n */\n showMyLocation?: boolean;\n /** 定位图标锚点 U 坐标 (0.0-1.0) @platform android */\n anchorU?: number;\n /** 定位图标锚点 V 坐标 (0.0-1.0) @platform android */\n anchorV?: number;\n /**\n * 定位蓝点展现模式 @platform android\n * @default 'LOCATION_ROTATE_NO_CENTER' (连续定位、定位点旋转、不移动到中心)\n *\n * 🧭 **方向指示说明**:\n * - Android 通过 locationType 实现方向指示(定位点依照设备方向旋转)\n * - iOS 通过 showsHeadingIndicator 实现方向指示(显示扇形方向指示器)\n *\n * 📱 **Android 方向指示模式**(推荐使用以下两种):\n * - 'LOCATION_ROTATE': 定位点依照设备方向旋转,视角跟随移动到中心\n * - 'LOCATION_ROTATE_NO_CENTER': 定位点依照设备方向旋转,视角不移动到中心 ⭐\n *\n * 🗺️ **其他模式**:\n * - 'SHOW': 只定位一次\n * - 'LOCATE': 定位一次,且将视角移动到地图中心点\n * - 'FOLLOW': 连续定位、跟随移动,但定位点不旋转\n * - 'MAP_ROTATE': 地图依照设备方向旋转(而非定位点旋转)\n * - 'FOLLOW_NO_CENTER': 连续定位、不移动到中心,定位点不旋转\n * - 'MAP_ROTATE_NO_CENTER': 地图依照设备方向旋转,不移动到中心\n *\n * 显式设置 locationType 时,会覆盖 followUserLocation 的默认模式选择。\n */\n locationType?: 'SHOW' | 'LOCATE' | 'FOLLOW' | 'MAP_ROTATE' | 'LOCATION_ROTATE' |\n 'LOCATION_ROTATE_NO_CENTER' | 'FOLLOW_NO_CENTER' | 'MAP_ROTATE_NO_CENTER';\n };\n\n /**\n * 是否显示室内地图\n * \n */\n indoorViewEnabled?: boolean;\n\n /**\n * 是否显示3D建筑\n */\n buildingsEnabled?: boolean;\n\n /**\n * 是否显示标注\n */\n labelsEnabled?: boolean;\n\n /**\n * 是否显示指南针\n */\n compassEnabled?: boolean;\n\n /**\n * 是否显示缩放按钮\n * @platform android\n */\n zoomControlsEnabled?: boolean;\n\n /**\n * 是否显示比例尺\n */\n scaleControlsEnabled?: boolean;\n\n /**\n * 是否显示定位按钮\n * @platform android\n */\n myLocationButtonEnabled?: boolean;\n\n /**\n * 是否显示路况\n */\n trafficEnabled?: boolean;\n\n /**\n * 最大缩放级别\n */\n maxZoom?: number;\n\n /**\n * 最小缩放级别\n */\n minZoom?: number;\n\n /**\n * 是否启用缩放手势\n */\n zoomGesturesEnabled?: boolean;\n\n /**\n * 是否启用滑动手势\n */\n scrollGesturesEnabled?: boolean;\n\n /**\n * 是否启用旋转手势\n */\n rotateGesturesEnabled?: boolean;\n\n /**\n * 是否启用倾斜手势\n */\n tiltGesturesEnabled?: boolean;\n\n /**\n * 定位的最小更新距离(米)\n * @platform ios\n */\n distanceFilter?: number;\n\n /**\n * 最小更新角度(度)\n * @platform ios\n */\n headingFilter?: number;\n\n /**\n * 是否启用国内外地图自动切换\n * - true: 当中心点在国外时自动切换到苹果地图(iOS),国内时切换回高德地图\n * - false: 始终使用高德地图\n * @platform ios 当前仅支持 iOS 安卓因为需要使用 Google Maps SDK和谷歌服务\n * @default false\n */\n worldMapSwitchEnabled?: boolean;\n\n /**\n * 自定义地图样式\n *\n * 支持两种方式:\n * 1. 在线样式:提供 styleId(从高德开放平台获取)\n * 2. 本地样式:提供 styleDataPath 和可选的 extraStyleDataPath\n *\n * @example\n * // 使用在线样式\n * customMapStyle={{ styleId: \"your-style-id\" }}\n *\n * @example\n * // 使用本地样式文件\n * customMapStyle={{\n * styleDataPath: \"path/to/style.data\",\n * extraStyleDataPath: \"path/to/extra.data\"\n * }}\n */\n customMapStyle?: {\n /** 在线样式ID(从高德开放平台获取) */\n styleId?: string;\n /** 本地样式文件路径 */\n styleDataPath?: string;\n /** 额外样式文件路径(可选) */\n extraStyleDataPath?: string;\n };\n\n /**\n * 样式\n */\n style?: StyleProp<ViewStyle>;\n\n /**\n * 点击地图事件\n */\n onMapPress?: (event: NativeSyntheticEvent<LatLng>) => void;\n\n /**\n * 点击标注点事件\n */\n onPressPoi?: (event: NativeSyntheticEvent<MapPoi>) => void;\n\n /**\n * 长按地图事件\n */\n onMapLongPress?: (event: NativeSyntheticEvent<LatLng>) => void;\n\n /**\n * 地图状态改变事件(实时触发)\n * 可配合 `cameraEventThrottleMs` 控制事件频率\n */\n onCameraMove?: (event: NativeSyntheticEvent<CameraEvent>) => void;\n\n /**\n * 地图移动事件节流间隔(毫秒)\n * `0` 表示不节流\n * @default 32\n */\n cameraEventThrottleMs?: number;\n\n /**\n * 地图状态改变完成事件\n */\n onCameraIdle?: (event: NativeSyntheticEvent<CameraEvent>) => void;\n\n /**\n * 地图加载完成事件\n */\n onLoad?: (event: NativeSyntheticEvent<{}>) => void;\n\n /**\n * 地图定位更新事件\n */\n onLocation?: (event: NativeSyntheticEvent<LocationEvent>) => void;\n\n /**\n * 子组件\n */\n children?: React.ReactNode;\n}\n\n\n/**\n * 地图视图方法\n */\nexport interface MapViewMethods {\n /**\n * 移动相机\n * @param cameraPosition 目标相机位置\n * @param duration 动画时长(毫秒)\n */\n moveCamera(cameraPosition: CameraUpdate, duration?: number): Promise<void>;\n\n /**\n * 将屏幕坐标转换为地理坐标\n * @param point 屏幕坐标\n * @returns 地理坐标\n */\n getLatLng(point: Point): Promise<LatLng>;\n\n /**\n * 设置地图中心点\n * @param center 中心点\n * @param animated 是否启用动画\n */\n setCenter(center: LatLngPoint, animated?: boolean): Promise<void>;\n\n /**\n * 设置地图缩放级别\n * @param zoom 缩放级别\n * @param animated 是否启用动画\n */\n setZoom(zoom: number, animated?: boolean): Promise<void>;\n\n /**\n * 获取相机位置\n * @returns 相机位置\n */\n getCameraPosition(): Promise<CameraPosition>;\n\n /**\n * 截取地图快照\n * @returns 快照图片文件路径\n */\n takeSnapshot(): Promise<string>;\n\n /**\n * 根据坐标集合自动移动相机\n */\n fitToCoordinates(points: LatLngPoint[], options?: FitToCoordinatesOptions): Promise<void>;\n}\n\n/**\n * MapView Ref 公开接口(用户使用)\n */\nexport interface MapViewRef {\n moveCamera(position: CameraUpdate, duration?: number): Promise<void>;\n getLatLng(point: Point): Promise<LatLng>;\n setCenter(center: LatLngPoint, animated?: boolean): Promise<void>;\n setZoom(zoom: number, animated?: boolean): Promise<void>;\n getCameraPosition(): Promise<CameraPosition>;\n takeSnapshot(): Promise<string>;\n fitToCoordinates(points: LatLngPoint[], options?: FitToCoordinatesOptions): Promise<void>;\n}\n\n/**\n * Expo 模块事件类型\n * 定义了原生模块可以触发的事件\n */\nexport type ExpoGaodeMapModuleEvents = {\n /**\n * 定位更新事件\n * 当位置发生变化时触发\n * @param location 位置信息,包含坐标和可选的逆地理编码信息\n */\n onLocationUpdate: (location: Coordinates | ReGeocode) => void;\n \n /**\n * 方向更新事件(iOS)\n * 当设备方向发生变化时触发\n * @param heading 方向信息\n */\n onHeadingUpdate: (heading: HeadingUpdate) => void;\n};\n"]}
1
+ {"version":3,"file":"map-view.types.js","sourceRoot":"","sources":["../../../src/map/types/map-view.types.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/**\n * 高德地图视图相关类型定义\n * 基于 Expo Modules API\n */\n\nimport type { StyleProp, ViewStyle, NativeSyntheticEvent } from 'react-native';\nimport type { CameraPosition, CameraUpdate, LatLng, LatLngBounds, MapPoi, MapType, Point, LatLngPoint } from './common.types';\nimport type { Coordinates, ReGeocode, HeadingUpdate } from './location.types';\nimport type { FitToCoordinatesOptions } from './route-playback.types';\n\n/**\n * 定位事件数据\n */\nexport interface LocationEvent {\n /**\n * 纬度\n */\n latitude: number;\n \n /**\n * 经度\n */\n longitude: number;\n \n /**\n * 定位精度(米)\n */\n accuracy: number;\n}\n\n\n/**\n * 地图相机事件\n */\nexport interface CameraEvent {\n /**\n * 相机位置\n */\n cameraPosition: CameraPosition;\n\n /**\n * 可见区域边界\n */\n latLngBounds: LatLngBounds;\n}\n\n/**\n * 地图视图属性\n */\nexport interface MapViewProps {\n /**\n * 地图类型\n */\n mapType?: MapType;\n\n /**\n * 初始相机位置\n */\n initialCameraPosition?: CameraPosition;\n\n /**\n * 是否显示当前定位\n */\n myLocationEnabled?: boolean;\n\n /**\n * 是否跟随用户位置\n * @default false\n */\n followUserLocation?: boolean;\n\n /**\n * 定位蓝点配置\n */\n userLocationRepresentation?: {\n /** 精度圈是否显示 @default true */\n showsAccuracyRing?: boolean;\n /** 是否显示 SDK 方向指示扇形;iOS 无默认箭头图片,如需箭头请配合 image 传自定义定位图 @default true @platform ios */\n showsHeadingIndicator?: boolean;\n /** 精度圈填充颜色 支持 '#RRGGBB'、'red' 或 ARGB 数字 */\n fillColor?: string | number;\n /** 精度圈边线颜色 */\n strokeColor?: string | number;\n /** 精度圈边线宽度 @default 0 */\n lineWidth?: number;\n /** 内部蓝色圆点是否使用律动效果 @default true @platform ios */\n enablePulseAnimation?: boolean;\n /** 定位点背景色 @default 'white' @platform ios */\n locationDotBgColor?: string | number;\n /** 定位点蓝色圆点颜色 @default 'blue' @platform ios */\n locationDotFillColor?: string | number;\n /** 定位图标 支持网络图片(http/https)、本地文件(file://)或资源名称 */\n image?: string;\n /** 定位图标宽度(像素) */\n imageWidth?: number;\n /** 定位图标高度(像素) */\n imageHeight?: number;\n /**\n * 是否显示定位蓝点 @default true\n * - iOS: 对应 mapView.showsUserLocation\n * - Android: 对应 MyLocationStyle.showMyLocation() (5.1.0+)\n */\n showMyLocation?: boolean;\n /** 定位图标锚点 U 坐标 (0.0-1.0) @platform android */\n anchorU?: number;\n /** 定位图标锚点 V 坐标 (0.0-1.0) @platform android */\n anchorV?: number;\n /**\n * 定位蓝点展现模式 @platform android\n * @default 'LOCATION_ROTATE_NO_CENTER' (连续定位、定位点旋转、不移动到中心)\n *\n * 🧭 **方向指示说明**:\n * - Android 通过 locationType 实现方向指示(定位点依照设备方向旋转)\n * - iOS 通过 showsHeadingIndicator 显示方向指示扇形;SDK 无默认箭头图片,如需箭头请配合 image 传自定义定位图\n *\n * 📱 **Android 方向指示模式**(推荐使用以下两种):\n * - 'LOCATION_ROTATE': 定位点依照设备方向旋转,视角跟随移动到中心\n * - 'LOCATION_ROTATE_NO_CENTER': 定位点依照设备方向旋转,视角不移动到中心 ⭐\n *\n * 🗺️ **其他模式**:\n * - 'SHOW': 只定位一次\n * - 'LOCATE': 定位一次,且将视角移动到地图中心点\n * - 'FOLLOW': 连续定位、跟随移动,但定位点不旋转\n * - 'MAP_ROTATE': 地图依照设备方向旋转(而非定位点旋转)\n * - 'FOLLOW_NO_CENTER': 连续定位、不移动到中心,定位点不旋转\n * - 'MAP_ROTATE_NO_CENTER': 地图依照设备方向旋转,不移动到中心\n *\n * 显式设置 locationType 时,会覆盖 followUserLocation 的默认模式选择。\n */\n locationType?: 'SHOW' | 'LOCATE' | 'FOLLOW' | 'MAP_ROTATE' | 'LOCATION_ROTATE' |\n 'LOCATION_ROTATE_NO_CENTER' | 'FOLLOW_NO_CENTER' | 'MAP_ROTATE_NO_CENTER';\n };\n\n /**\n * 是否显示室内地图\n * \n */\n indoorViewEnabled?: boolean;\n\n /**\n * 是否显示3D建筑\n */\n buildingsEnabled?: boolean;\n\n /**\n * 是否显示标注\n */\n labelsEnabled?: boolean;\n\n /**\n * 是否显示指南针\n */\n compassEnabled?: boolean;\n\n /**\n * 是否显示缩放按钮\n * @platform android\n */\n zoomControlsEnabled?: boolean;\n\n /**\n * 是否显示比例尺\n */\n scaleControlsEnabled?: boolean;\n\n /**\n * 是否显示定位按钮\n * @platform android\n */\n myLocationButtonEnabled?: boolean;\n\n /**\n * 是否显示路况\n */\n trafficEnabled?: boolean;\n\n /**\n * 最大缩放级别\n */\n maxZoom?: number;\n\n /**\n * 最小缩放级别\n */\n minZoom?: number;\n\n /**\n * 是否启用缩放手势\n */\n zoomGesturesEnabled?: boolean;\n\n /**\n * 是否启用滑动手势\n */\n scrollGesturesEnabled?: boolean;\n\n /**\n * 是否启用旋转手势\n */\n rotateGesturesEnabled?: boolean;\n\n /**\n * 是否启用倾斜手势\n */\n tiltGesturesEnabled?: boolean;\n\n /**\n * 定位的最小更新距离(米)\n * @platform ios\n */\n distanceFilter?: number;\n\n /**\n * 最小更新角度(度)\n * @platform ios\n */\n headingFilter?: number;\n\n /**\n * 是否启用国内外地图自动切换\n * - true: 当中心点在国外时自动切换到苹果地图(iOS),国内时切换回高德地图\n * - false: 始终使用高德地图\n * @platform ios 当前仅支持 iOS 安卓因为需要使用 Google Maps SDK和谷歌服务\n * @default false\n */\n worldMapSwitchEnabled?: boolean;\n\n /**\n * 自定义地图样式\n *\n * 支持两种方式:\n * 1. 在线样式:提供 styleId(从高德开放平台获取)\n * 2. 本地样式:提供 styleDataPath 和可选的 extraStyleDataPath\n *\n * @example\n * // 使用在线样式\n * customMapStyle={{ styleId: \"your-style-id\" }}\n *\n * @example\n * // 使用本地样式文件\n * customMapStyle={{\n * styleDataPath: \"path/to/style.data\",\n * extraStyleDataPath: \"path/to/extra.data\"\n * }}\n */\n customMapStyle?: {\n /** 在线样式ID(从高德开放平台获取) */\n styleId?: string;\n /** 本地样式文件路径 */\n styleDataPath?: string;\n /** 额外样式文件路径(可选) */\n extraStyleDataPath?: string;\n };\n\n /**\n * 样式\n */\n style?: StyleProp<ViewStyle>;\n\n /**\n * 点击地图事件\n */\n onMapPress?: (event: NativeSyntheticEvent<LatLng>) => void;\n\n /**\n * 点击标注点事件\n */\n onPressPoi?: (event: NativeSyntheticEvent<MapPoi>) => void;\n\n /**\n * 长按地图事件\n */\n onMapLongPress?: (event: NativeSyntheticEvent<LatLng>) => void;\n\n /**\n * 地图状态改变事件(实时触发)\n * 可配合 `cameraEventThrottleMs` 控制事件频率\n */\n onCameraMove?: (event: NativeSyntheticEvent<CameraEvent>) => void;\n\n /**\n * 地图移动事件节流间隔(毫秒)\n * `0` 表示不节流\n * @default 32\n */\n cameraEventThrottleMs?: number;\n\n /**\n * 地图状态改变完成事件\n */\n onCameraIdle?: (event: NativeSyntheticEvent<CameraEvent>) => void;\n\n /**\n * 地图加载完成事件\n */\n onLoad?: (event: NativeSyntheticEvent<{}>) => void;\n\n /**\n * 地图定位更新事件\n */\n onLocation?: (event: NativeSyntheticEvent<LocationEvent>) => void;\n\n /**\n * 子组件\n */\n children?: React.ReactNode;\n}\n\n\n/**\n * 地图视图方法\n */\nexport interface MapViewMethods {\n /**\n * 移动相机\n * @param cameraPosition 目标相机位置\n * @param duration 动画时长(毫秒)\n */\n moveCamera(cameraPosition: CameraUpdate, duration?: number): Promise<void>;\n\n /**\n * 将屏幕坐标转换为地理坐标\n * @param point 屏幕坐标\n * @returns 地理坐标\n */\n getLatLng(point: Point): Promise<LatLng>;\n\n /**\n * 设置地图中心点\n * @param center 中心点\n * @param animated 是否启用动画\n */\n setCenter(center: LatLngPoint, animated?: boolean): Promise<void>;\n\n /**\n * 设置地图缩放级别\n * @param zoom 缩放级别\n * @param animated 是否启用动画\n */\n setZoom(zoom: number, animated?: boolean): Promise<void>;\n\n /**\n * 获取相机位置\n * @returns 相机位置\n */\n getCameraPosition(): Promise<CameraPosition>;\n\n /**\n * 截取地图快照\n * @returns 快照图片文件路径\n */\n takeSnapshot(): Promise<string>;\n\n /**\n * 根据坐标集合自动移动相机\n */\n fitToCoordinates(points: LatLngPoint[], options?: FitToCoordinatesOptions): Promise<void>;\n}\n\n/**\n * MapView Ref 公开接口(用户使用)\n */\nexport interface MapViewRef {\n moveCamera(position: CameraUpdate, duration?: number): Promise<void>;\n getLatLng(point: Point): Promise<LatLng>;\n setCenter(center: LatLngPoint, animated?: boolean): Promise<void>;\n setZoom(zoom: number, animated?: boolean): Promise<void>;\n getCameraPosition(): Promise<CameraPosition>;\n takeSnapshot(): Promise<string>;\n fitToCoordinates(points: LatLngPoint[], options?: FitToCoordinatesOptions): Promise<void>;\n}\n\n/**\n * Expo 模块事件类型\n * 定义了原生模块可以触发的事件\n */\nexport type ExpoGaodeMapModuleEvents = {\n /**\n * 定位更新事件\n * 当位置发生变化时触发\n * @param location 位置信息,包含坐标和可选的逆地理编码信息\n */\n onLocationUpdate: (location: Coordinates | ReGeocode) => void;\n \n /**\n * 方向更新事件(iOS)\n * 当设备方向发生变化时触发\n * @param heading 方向信息\n */\n onHeadingUpdate: (heading: HeadingUpdate) => void;\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { LatLng, LatLngPoint } from '../types/common.types';
1
+ import type { LatLng, LatLngPoint } from '../types/common.types';
2
2
  /**
3
3
  * 将坐标点归一化为对象格式
4
4
  * 支持 [longitude, latitude] 数组或 { latitude, longitude } 对象
@@ -1 +1 @@
1
- {"version":3,"file":"GeoUtils.d.ts","sourceRoot":"","sources":["../../../src/map/utils/GeoUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAO5D;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CA2B1D;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CAAC;AACrE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC;AACzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC"}
1
+ {"version":3,"file":"GeoUtils.d.ts","sourceRoot":"","sources":["../../../src/map/utils/GeoUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAOjE;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CA2B1D;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CAAC;AACrE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC;AACzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC"}
@@ -8,8 +8,8 @@
8
8
  */
9
9
  export function normalizeLatLng(point) {
10
10
  if (Array.isArray(point)) {
11
- let longitude = point[0];
12
- let latitude = point[1];
11
+ const longitude = point[0];
12
+ const latitude = point[1];
13
13
  // 智能纠错:如果纬度超出范围 [-90, 90] 且交换后在范围内,则认为是用户传反了
14
14
  if (Math.abs(latitude) > 90 && Math.abs(longitude) <= 90) {
15
15
  console.warn(`[expo-gaode-map] 检测到坐标数组格式可能为 [latitude, longitude] (${point}),已自动纠正为 [longitude, latitude]。建议显式使用 [经度, 纬度] 格式以遵循 GeoJSON 标准。`);
@@ -1 +1 @@
1
- {"version":3,"file":"GeoUtils.js","sourceRoot":"","sources":["../../../src/map/utils/GeoUtils.ts"],"names":[],"mappings":"AAOA;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,KAAkB;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAExB,6CAA6C;QAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;YACzD,OAAO,CAAC,IAAI,CACV,wDAAwD,KAAK,kEAAkE,CAChI,CAAC;YACF,OAAO;gBACL,QAAQ,EAAE,SAAS;gBACnB,SAAS,EAAE,QAAQ;aACpB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,SAAS;YACT,QAAQ;SACT,CAAC;IACJ,CAAC;IACD,yCAAyC;IACzC,MAAM,eAAe,GAAG,KAAmB,CAAC;IAC5C,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC;QAC1C,SAAS,EAAE,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC;KAC7C,CAAC;AACJ,CAAC;AAYD,MAAM,UAAU,mBAAmB,CACjC,MAAuC;IAEvC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE9C,oDAAoD;IACpD,8CAA8C;IAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAE5B,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,yDAAyD;QACzD,0CAA0C;QAC1C,8BAA8B;QAE9B,0CAA0C;QAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,UAAU,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7H,OAAQ,MAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,8DAA8D;QAC9D,mCAAmC;QACnC,0BAA0B;QAC1B,8BAA8B;QAC9B,8BAA8B;QAE9B,qCAAqC;QACrC,sCAAsC;QACtC,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACvB,OAAQ,MAAwB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,OAAQ,MAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,OAAQ,MAAwB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,SAAS,OAAO,CAAC,IAAa;IAC5B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACpD,6BAA6B;IAC7B,IAAI,UAAU,IAAI,IAAI,IAAI,WAAW,IAAK,IAAgC;QAAE,OAAO,IAAI,CAAC;IACxF,2BAA2B;IAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvH,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import { LatLng, LatLngPoint } from '../types/common.types';\n\ntype LatLngLike = {\n latitude?: unknown;\n longitude?: unknown;\n};\n\n/**\n * 将坐标点归一化为对象格式\n * 支持 [longitude, latitude] 数组或 { latitude, longitude } 对象\n * 注意:数组格式遵循 GeoJSON 标准,即 [经度, 纬度]\n * \n * @param point 坐标点\n * @returns { latitude, longitude } 对象\n */\nexport function normalizeLatLng(point: LatLngPoint): LatLng {\n if (Array.isArray(point)) {\n let longitude = point[0];\n let latitude = point[1];\n\n // 智能纠错:如果纬度超出范围 [-90, 90] 且交换后在范围内,则认为是用户传反了\n if (Math.abs(latitude) > 90 && Math.abs(longitude) <= 90) {\n console.warn(\n `[expo-gaode-map] 检测到坐标数组格式可能为 [latitude, longitude] (${point}),已自动纠正为 [longitude, latitude]。建议显式使用 [经度, 纬度] 格式以遵循 GeoJSON 标准。`\n );\n return {\n latitude: longitude,\n longitude: latitude\n };\n }\n\n return {\n longitude,\n latitude,\n };\n }\n // 对象格式:强制转换为数字,防止传入 string 类型导致原生层 Crash\n const normalizedPoint = point as LatLngLike;\n return {\n latitude: Number(normalizedPoint.latitude),\n longitude: Number(normalizedPoint.longitude),\n };\n}\n\n/**\n * 将坐标点数组归一化为对象数组\n * 支持一维数组 [p1, p2, ...] 或二维嵌套数组 [[p1, p2, ...], [p3, p4, ...]]\n * \n * @param points 坐标点数组或嵌套数组\n * @returns 归一化后的坐标数组\n */\nexport function normalizeLatLngList(points: LatLngPoint[]): LatLng[];\nexport function normalizeLatLngList(points: LatLngPoint[][]): LatLng[][];\nexport function normalizeLatLngList(points: LatLngPoint[] | LatLngPoint[][]): LatLng[] | LatLng[][];\nexport function normalizeLatLngList(\n points: LatLngPoint[] | LatLngPoint[][]\n): LatLng[] | LatLng[][] {\n if (!points || points.length === 0) return [];\n\n // 检查是否为嵌套数组 (检查第一项是否也是数组或对象,且不符合 LatLngPoint 的基本判断)\n // 如果第一项是数组且长度 > 2,或者第一项的第一个元素也是数组/对象,则认为是嵌套数组\n const firstItem = points[0];\n \n if (Array.isArray(firstItem)) {\n // 如果第一项是 [number, number],则这可能是一个一维坐标点数组 (LatLngPoint[])\n // 除非所有元素都是数组且至少有一个子数组长度不等于2,或者我们明确知道这是嵌套的\n // 为了支持 Polygon 的嵌套格式,我们需要递归处理\n \n // 启发式判断:如果第一项是数组且它的第一个元素也是数组或对象,那么它一定是嵌套的\n if (Array.isArray(firstItem[0]) || (typeof firstItem[0] === 'object' && firstItem[0] !== null && 'latitude' in firstItem[0])) {\n return (points as LatLngPoint[][]).map(ring => ring.map(normalizeLatLng));\n }\n \n // 另一种情况:用户传入的是 [[lng, lat], [lng, lat]],这既可以看作 LatLngPoint[],\n // 也可以看作 LatLngPoint[][] (只有一个外轮廓)。\n // 在 Polygon 组件中,我们希望统一处理。\n // 如果是 Polygon 传入的,我们希望保留嵌套结构。\n // 但 normalizeLatLngList 是通用的。\n \n // 改进逻辑:如果 data[0] 是一个点,我们把它当作一维数组处理。\n // 如果 data[0] 不是一个点(即它是点的集合),我们当作二维处理。\n if (isPoint(firstItem)) {\n return (points as LatLngPoint[]).map(normalizeLatLng);\n } else {\n return (points as LatLngPoint[][]).map(ring => ring.map(normalizeLatLng));\n }\n }\n\n return (points as LatLngPoint[]).map(normalizeLatLng);\n}\n\n/**\n * 判断一个对象是否为坐标点 (LatLngPoint)\n */\nfunction isPoint(item: unknown): item is LatLngPoint {\n if (!item || typeof item !== 'object') return false;\n // { latitude, longitude } 格式\n if ('latitude' in item && 'longitude' in (item as Record<string, unknown>)) return true;\n // [longitude, latitude] 格式\n if (Array.isArray(item) && item.length >= 2 && typeof item[0] === 'number' && typeof item[1] === 'number') return true;\n return false;\n}\n"]}
1
+ {"version":3,"file":"GeoUtils.js","sourceRoot":"","sources":["../../../src/map/utils/GeoUtils.ts"],"names":[],"mappings":"AAOA;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,KAAkB;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAE1B,6CAA6C;QAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;YACzD,OAAO,CAAC,IAAI,CACV,wDAAwD,KAAK,kEAAkE,CAChI,CAAC;YACF,OAAO;gBACL,QAAQ,EAAE,SAAS;gBACnB,SAAS,EAAE,QAAQ;aACpB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,SAAS;YACT,QAAQ;SACT,CAAC;IACJ,CAAC;IACD,yCAAyC;IACzC,MAAM,eAAe,GAAG,KAAmB,CAAC;IAC5C,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC;QAC1C,SAAS,EAAE,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC;KAC7C,CAAC;AACJ,CAAC;AAYD,MAAM,UAAU,mBAAmB,CACjC,MAAuC;IAEvC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE9C,oDAAoD;IACpD,8CAA8C;IAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAE5B,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,yDAAyD;QACzD,0CAA0C;QAC1C,8BAA8B;QAE9B,0CAA0C;QAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,UAAU,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7H,OAAQ,MAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,8DAA8D;QAC9D,mCAAmC;QACnC,0BAA0B;QAC1B,8BAA8B;QAC9B,8BAA8B;QAE9B,qCAAqC;QACrC,sCAAsC;QACtC,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACvB,OAAQ,MAAwB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,OAAQ,MAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,OAAQ,MAAwB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,SAAS,OAAO,CAAC,IAAa;IAC5B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACpD,6BAA6B;IAC7B,IAAI,UAAU,IAAI,IAAI,IAAI,WAAW,IAAK,IAAgC;QAAE,OAAO,IAAI,CAAC;IACxF,2BAA2B;IAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvH,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import type { LatLng, LatLngPoint } from '../types/common.types';\n\ntype LatLngLike = {\n latitude?: unknown;\n longitude?: unknown;\n};\n\n/**\n * 将坐标点归一化为对象格式\n * 支持 [longitude, latitude] 数组或 { latitude, longitude } 对象\n * 注意:数组格式遵循 GeoJSON 标准,即 [经度, 纬度]\n * \n * @param point 坐标点\n * @returns { latitude, longitude } 对象\n */\nexport function normalizeLatLng(point: LatLngPoint): LatLng {\n if (Array.isArray(point)) {\n const longitude = point[0];\n const latitude = point[1];\n\n // 智能纠错:如果纬度超出范围 [-90, 90] 且交换后在范围内,则认为是用户传反了\n if (Math.abs(latitude) > 90 && Math.abs(longitude) <= 90) {\n console.warn(\n `[expo-gaode-map] 检测到坐标数组格式可能为 [latitude, longitude] (${point}),已自动纠正为 [longitude, latitude]。建议显式使用 [经度, 纬度] 格式以遵循 GeoJSON 标准。`\n );\n return {\n latitude: longitude,\n longitude: latitude\n };\n }\n\n return {\n longitude,\n latitude,\n };\n }\n // 对象格式:强制转换为数字,防止传入 string 类型导致原生层 Crash\n const normalizedPoint = point as LatLngLike;\n return {\n latitude: Number(normalizedPoint.latitude),\n longitude: Number(normalizedPoint.longitude),\n };\n}\n\n/**\n * 将坐标点数组归一化为对象数组\n * 支持一维数组 [p1, p2, ...] 或二维嵌套数组 [[p1, p2, ...], [p3, p4, ...]]\n * \n * @param points 坐标点数组或嵌套数组\n * @returns 归一化后的坐标数组\n */\nexport function normalizeLatLngList(points: LatLngPoint[]): LatLng[];\nexport function normalizeLatLngList(points: LatLngPoint[][]): LatLng[][];\nexport function normalizeLatLngList(points: LatLngPoint[] | LatLngPoint[][]): LatLng[] | LatLng[][];\nexport function normalizeLatLngList(\n points: LatLngPoint[] | LatLngPoint[][]\n): LatLng[] | LatLng[][] {\n if (!points || points.length === 0) return [];\n\n // 检查是否为嵌套数组 (检查第一项是否也是数组或对象,且不符合 LatLngPoint 的基本判断)\n // 如果第一项是数组且长度 > 2,或者第一项的第一个元素也是数组/对象,则认为是嵌套数组\n const firstItem = points[0];\n \n if (Array.isArray(firstItem)) {\n // 如果第一项是 [number, number],则这可能是一个一维坐标点数组 (LatLngPoint[])\n // 除非所有元素都是数组且至少有一个子数组长度不等于2,或者我们明确知道这是嵌套的\n // 为了支持 Polygon 的嵌套格式,我们需要递归处理\n \n // 启发式判断:如果第一项是数组且它的第一个元素也是数组或对象,那么它一定是嵌套的\n if (Array.isArray(firstItem[0]) || (typeof firstItem[0] === 'object' && firstItem[0] !== null && 'latitude' in firstItem[0])) {\n return (points as LatLngPoint[][]).map(ring => ring.map(normalizeLatLng));\n }\n \n // 另一种情况:用户传入的是 [[lng, lat], [lng, lat]],这既可以看作 LatLngPoint[],\n // 也可以看作 LatLngPoint[][] (只有一个外轮廓)。\n // 在 Polygon 组件中,我们希望统一处理。\n // 如果是 Polygon 传入的,我们希望保留嵌套结构。\n // 但 normalizeLatLngList 是通用的。\n \n // 改进逻辑:如果 data[0] 是一个点,我们把它当作一维数组处理。\n // 如果 data[0] 不是一个点(即它是点的集合),我们当作二维处理。\n if (isPoint(firstItem)) {\n return (points as LatLngPoint[]).map(normalizeLatLng);\n } else {\n return (points as LatLngPoint[][]).map(ring => ring.map(normalizeLatLng));\n }\n }\n\n return (points as LatLngPoint[]).map(normalizeLatLng);\n}\n\n/**\n * 判断一个对象是否为坐标点 (LatLngPoint)\n */\nfunction isPoint(item: unknown): item is LatLngPoint {\n if (!item || typeof item !== 'object') return false;\n // { latitude, longitude } 格式\n if ('latitude' in item && 'longitude' in (item as Record<string, unknown>)) return true;\n // [longitude, latitude] 格式\n if (Array.isArray(item) && item.length >= 2 && typeof item[0] === 'number' && typeof item[1] === 'number') return true;\n return false;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"route-geometry.d.ts","sourceRoot":"","sources":["../src/route-geometry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,2BAA2B,EAC3B,SAAS,EACT,eAAe,EAChB,MAAM,SAAS,CAAC;AAGjB,wBAAgB,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAqB5D;AAGD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAYrE;AAGD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,CAa9E;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,CAM3F;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAUnE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,CAWxF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,CAkBlF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,aAAa,SAAK,GAAG,SAAS,EAAE,CAiBnF;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,CAUxF;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,eAAe,GAAG,SAAS,EAAE,CAUhF;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,2BAA2B,GACnC,SAAS,EAAE,CAwCb"}
1
+ {"version":3,"file":"route-geometry.d.ts","sourceRoot":"","sources":["../src/route-geometry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,2BAA2B,EAC3B,SAAS,EACT,eAAe,EAChB,MAAM,SAAS,CAAC;AAGjB,wBAAgB,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAqB5D;AAGD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAgBrE;AAGD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,CAa9E;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,CAM3F;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAenE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,CAWxF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,CAkBlF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,aAAa,SAAK,GAAG,SAAS,EAAE,CAqBnF;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,CAexF;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,eAAe,GAAG,SAAS,EAAE,CAUhF;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,2BAA2B,GACnC,SAAS,EAAE,CAyCb"}
@@ -25,6 +25,9 @@ export function dedupeAdjacentPoints(points) {
25
25
  return true;
26
26
  }
27
27
  const previous = points[index - 1];
28
+ if (!previous) {
29
+ return true;
30
+ }
28
31
  return (previous.latitude !== point.latitude ||
29
32
  previous.longitude !== point.longitude);
30
33
  });
@@ -55,7 +58,12 @@ export function calculatePathLengthSafe(points) {
55
58
  catch {
56
59
  let total = 0;
57
60
  for (let index = 1; index < points.length; index += 1) {
58
- total += distanceBetweenCoordinatesSafe(points[index - 1], points[index]);
61
+ const previous = points[index - 1];
62
+ const current = points[index];
63
+ if (!previous || !current) {
64
+ continue;
65
+ }
66
+ total += distanceBetweenCoordinatesSafe(previous, current);
59
67
  }
60
68
  return total;
61
69
  }
@@ -97,6 +105,9 @@ export function samplePolyline(points, targetSamples = 36) {
97
105
  const step = Math.max(1, Math.floor(points.length / targetSamples));
98
106
  const samples = points.filter((_, index) => index % step === 0);
99
107
  const lastPoint = points[points.length - 1];
108
+ if (!lastPoint) {
109
+ return samples;
110
+ }
100
111
  const lastSample = samples[samples.length - 1];
101
112
  if (!lastSample ||
102
113
  lastSample.latitude !== lastPoint.latitude ||
@@ -109,10 +120,14 @@ export function selectEvenlySpacedPoints(points, count) {
109
120
  if (count <= 0 || points.length <= count) {
110
121
  return points;
111
122
  }
123
+ const fallbackPoint = points[0];
124
+ if (!fallbackPoint) {
125
+ return [];
126
+ }
112
127
  return Array.from({ length: count }, (_, index) => {
113
128
  const rawIndex = Math.round(((index + 1) * (points.length + 1)) / (count + 1)) - 1;
114
129
  const boundedIndex = Math.min(points.length - 1, Math.max(0, rawIndex));
115
- return points[boundedIndex];
130
+ return points[boundedIndex] ?? fallbackPoint;
116
131
  });
117
132
  }
118
133
  export function normalizeWebRoutePolyline(webRoute) {
@@ -136,7 +151,11 @@ export function buildAnchorWaypointsFromWebRoute(options) {
136
151
  const interiorPoints = candidatePoints.slice(1, -1);
137
152
  // 优先用离前一个锚点足够远的点,避免途经点过密导致原生算路失真。
138
153
  const spacedPoints = [];
139
- let previousPoint = polyline[0];
154
+ const firstPoint = polyline[0];
155
+ if (!firstPoint) {
156
+ return [];
157
+ }
158
+ let previousPoint = firstPoint;
140
159
  for (const point of interiorPoints) {
141
160
  if (distanceBetweenCoordinatesSafe(previousPoint, point) < minSpacingMeters) {
142
161
  continue;
@@ -144,11 +163,8 @@ export function buildAnchorWaypointsFromWebRoute(options) {
144
163
  spacedPoints.push(point);
145
164
  previousPoint = point;
146
165
  }
147
- const waypoints = spacedPoints.length > 0
148
- ? spacedPoints
149
- : candidatePoints.length > 2
150
- ? [candidatePoints[Math.floor(candidatePoints.length / 2)]]
151
- : [];
166
+ const midpoint = candidatePoints[Math.floor(candidatePoints.length / 2)];
167
+ const waypoints = spacedPoints.length > 0 ? spacedPoints : midpoint ? [midpoint] : [];
152
168
  return dedupeAdjacentPoints(selectEvenlySpacedPoints(waypoints, maxViaPoints));
153
169
  }
154
170
  //# sourceMappingURL=route-geometry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-geometry.js","sourceRoot":"","sources":["../src/route-geometry.ts"],"names":[],"mappings":"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","sourcesContent":["import { ExpoGaodeMapModule } from './map';\nimport type {\n BuildAnchorWaypointsOptions,\n NaviPoint,\n WebPlannedRoute,\n} from './types';\n\n\nexport function parsePolyline(polyline?: string): NaviPoint[] {\n if (!polyline?.trim()) {\n return [];\n }\n\n return polyline\n .split(';')\n .map((segment) => segment.trim())\n .filter(Boolean)\n .map((segment) => {\n const [longitude, latitude] = segment.split(',').map((value) => Number(value.trim()));\n if (!Number.isFinite(longitude) || !Number.isFinite(latitude)) {\n return null;\n }\n\n return {\n latitude,\n longitude,\n };\n })\n .filter((point): point is NaviPoint => point !== null);\n}\n\n\nexport function dedupeAdjacentPoints(points: NaviPoint[]): NaviPoint[] {\n return points.filter((point, index) => {\n if (index === 0) {\n return true;\n }\n\n const previous = points[index - 1];\n return (\n previous.latitude !== point.latitude ||\n previous.longitude !== point.longitude\n );\n });\n}\n\n\nexport function haversineDistance(pointA: NaviPoint, pointB: NaviPoint): number {\n const toRadians = (degrees: number) => (degrees * Math.PI) / 180;\n const earthRadiusMeters = 6371000;\n const latitudeDelta = toRadians(pointB.latitude - pointA.latitude);\n const longitudeDelta = toRadians(pointB.longitude - pointA.longitude);\n const latitudeA = toRadians(pointA.latitude);\n const latitudeB = toRadians(pointB.latitude);\n\n const a =\n Math.sin(latitudeDelta / 2) ** 2 +\n Math.cos(latitudeA) * Math.cos(latitudeB) * Math.sin(longitudeDelta / 2) ** 2;\n\n return 2 * earthRadiusMeters * Math.asin(Math.sqrt(a));\n}\n\nexport function distanceBetweenCoordinatesSafe(pointA: NaviPoint, pointB: NaviPoint): number {\n try {\n return ExpoGaodeMapModule.distanceBetweenCoordinates(pointA, pointB);\n } catch {\n return haversineDistance(pointA, pointB);\n }\n}\n\nexport function calculatePathLengthSafe(points: NaviPoint[]): number {\n try {\n return ExpoGaodeMapModule.calculatePathLength(points);\n } catch {\n let total = 0;\n for (let index = 1; index < points.length; index += 1) {\n total += distanceBetweenCoordinatesSafe(points[index - 1], points[index]);\n }\n return total;\n }\n}\n\nexport function simplifyPolylineSafe(points: NaviPoint[], tolerance: number): NaviPoint[] {\n if (points.length <= 2) {\n return points;\n }\n\n try {\n const simplified = ExpoGaodeMapModule.simplifyPolyline(points, tolerance);\n return simplified.length >= 2 ? simplified : points;\n } catch {\n return points;\n }\n}\n\nexport function getDistanceToPathSafe(path: NaviPoint[], target: NaviPoint): number {\n if (path.length === 0) {\n return Number.POSITIVE_INFINITY;\n }\n\n try {\n const nearest = ExpoGaodeMapModule.getNearestPointOnPath(path, target);\n if (nearest) {\n return nearest.distanceMeters;\n }\n } catch {\n // ignore and fallback to point-to-point scan\n }\n\n return path.reduce((minimum, point) => {\n const distance = distanceBetweenCoordinatesSafe(point, target);\n return distance < minimum ? distance : minimum;\n }, Number.POSITIVE_INFINITY);\n}\n\nexport function samplePolyline(points: NaviPoint[], targetSamples = 36): NaviPoint[] {\n if (points.length <= targetSamples) {\n return points;\n }\n\n const step = Math.max(1, Math.floor(points.length / targetSamples));\n const samples = points.filter((_, index) => index % step === 0);\n const lastPoint = points[points.length - 1];\n const lastSample = samples[samples.length - 1];\n if (\n !lastSample ||\n lastSample.latitude !== lastPoint.latitude ||\n lastSample.longitude !== lastPoint.longitude\n ) {\n samples.push(lastPoint);\n }\n return samples;\n}\n\nexport function selectEvenlySpacedPoints(points: NaviPoint[], count: number): NaviPoint[] {\n if (count <= 0 || points.length <= count) {\n return points;\n }\n\n return Array.from({ length: count }, (_, index) => {\n const rawIndex = Math.round(((index + 1) * (points.length + 1)) / (count + 1)) - 1;\n const boundedIndex = Math.min(points.length - 1, Math.max(0, rawIndex));\n return points[boundedIndex];\n });\n}\n\nexport function normalizeWebRoutePolyline(webRoute: WebPlannedRoute): NaviPoint[] {\n const directPolyline = dedupeAdjacentPoints(webRoute.polyline ?? []);\n if (directPolyline.length > 1) {\n return directPolyline;\n }\n\n const stepPolyline = dedupeAdjacentPoints(\n (webRoute.steps ?? []).flatMap((step) => step.polyline ?? [])\n );\n return stepPolyline;\n}\n\nexport function buildAnchorWaypointsFromWebRoute(\n options: BuildAnchorWaypointsOptions\n): NaviPoint[] {\n // 这一步的目标不是“还原原始 Web 线路”,而是从 Web 线路里抽出\n // 少量、间距足够大的中间锚点,方便原生独立算路尽量贴近它。\n const {\n webRoute,\n maxViaPoints = 8,\n simplifyTolerance = 80,\n minSpacingMeters = 800,\n } = options;\n\n const polyline = normalizeWebRoutePolyline(webRoute);\n if (polyline.length <= 2) {\n return [];\n }\n\n const simplified = dedupeAdjacentPoints(\n simplifyPolylineSafe(polyline, simplifyTolerance)\n );\n const candidatePoints = simplified.length > 2 ? simplified : polyline;\n const interiorPoints = candidatePoints.slice(1, -1);\n\n // 优先用离前一个锚点足够远的点,避免途经点过密导致原生算路失真。\n const spacedPoints: NaviPoint[] = [];\n let previousPoint = polyline[0];\n\n for (const point of interiorPoints) {\n if (distanceBetweenCoordinatesSafe(previousPoint, point) < minSpacingMeters) {\n continue;\n }\n spacedPoints.push(point);\n previousPoint = point;\n }\n\n const waypoints = spacedPoints.length > 0\n ? spacedPoints\n : candidatePoints.length > 2\n ? [candidatePoints[Math.floor(candidatePoints.length / 2)]]\n : [];\n\n return dedupeAdjacentPoints(selectEvenlySpacedPoints(waypoints, maxViaPoints));\n}\n"]}
1
+ {"version":3,"file":"route-geometry.js","sourceRoot":"","sources":["../src/route-geometry.ts"],"names":[],"mappings":"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","sourcesContent":["import { ExpoGaodeMapModule } from './map';\nimport type {\n BuildAnchorWaypointsOptions,\n NaviPoint,\n WebPlannedRoute,\n} from './types';\n\n\nexport function parsePolyline(polyline?: string): NaviPoint[] {\n if (!polyline?.trim()) {\n return [];\n }\n\n return polyline\n .split(';')\n .map((segment) => segment.trim())\n .filter(Boolean)\n .map((segment) => {\n const [longitude, latitude] = segment.split(',').map((value) => Number(value.trim()));\n if (!Number.isFinite(longitude) || !Number.isFinite(latitude)) {\n return null;\n }\n\n return {\n latitude,\n longitude,\n };\n })\n .filter((point): point is NaviPoint => point !== null);\n}\n\n\nexport function dedupeAdjacentPoints(points: NaviPoint[]): NaviPoint[] {\n return points.filter((point, index) => {\n if (index === 0) {\n return true;\n }\n\n const previous = points[index - 1];\n if (!previous) {\n return true;\n }\n\n return (\n previous.latitude !== point.latitude ||\n previous.longitude !== point.longitude\n );\n });\n}\n\n\nexport function haversineDistance(pointA: NaviPoint, pointB: NaviPoint): number {\n const toRadians = (degrees: number) => (degrees * Math.PI) / 180;\n const earthRadiusMeters = 6371000;\n const latitudeDelta = toRadians(pointB.latitude - pointA.latitude);\n const longitudeDelta = toRadians(pointB.longitude - pointA.longitude);\n const latitudeA = toRadians(pointA.latitude);\n const latitudeB = toRadians(pointB.latitude);\n\n const a =\n Math.sin(latitudeDelta / 2) ** 2 +\n Math.cos(latitudeA) * Math.cos(latitudeB) * Math.sin(longitudeDelta / 2) ** 2;\n\n return 2 * earthRadiusMeters * Math.asin(Math.sqrt(a));\n}\n\nexport function distanceBetweenCoordinatesSafe(pointA: NaviPoint, pointB: NaviPoint): number {\n try {\n return ExpoGaodeMapModule.distanceBetweenCoordinates(pointA, pointB);\n } catch {\n return haversineDistance(pointA, pointB);\n }\n}\n\nexport function calculatePathLengthSafe(points: NaviPoint[]): number {\n try {\n return ExpoGaodeMapModule.calculatePathLength(points);\n } catch {\n let total = 0;\n for (let index = 1; index < points.length; index += 1) {\n const previous = points[index - 1];\n const current = points[index];\n if (!previous || !current) {\n continue;\n }\n total += distanceBetweenCoordinatesSafe(previous, current);\n }\n return total;\n }\n}\n\nexport function simplifyPolylineSafe(points: NaviPoint[], tolerance: number): NaviPoint[] {\n if (points.length <= 2) {\n return points;\n }\n\n try {\n const simplified = ExpoGaodeMapModule.simplifyPolyline(points, tolerance);\n return simplified.length >= 2 ? simplified : points;\n } catch {\n return points;\n }\n}\n\nexport function getDistanceToPathSafe(path: NaviPoint[], target: NaviPoint): number {\n if (path.length === 0) {\n return Number.POSITIVE_INFINITY;\n }\n\n try {\n const nearest = ExpoGaodeMapModule.getNearestPointOnPath(path, target);\n if (nearest) {\n return nearest.distanceMeters;\n }\n } catch {\n // ignore and fallback to point-to-point scan\n }\n\n return path.reduce((minimum, point) => {\n const distance = distanceBetweenCoordinatesSafe(point, target);\n return distance < minimum ? distance : minimum;\n }, Number.POSITIVE_INFINITY);\n}\n\nexport function samplePolyline(points: NaviPoint[], targetSamples = 36): NaviPoint[] {\n if (points.length <= targetSamples) {\n return points;\n }\n\n const step = Math.max(1, Math.floor(points.length / targetSamples));\n const samples = points.filter((_, index) => index % step === 0);\n const lastPoint = points[points.length - 1];\n if (!lastPoint) {\n return samples;\n }\n\n const lastSample = samples[samples.length - 1];\n if (\n !lastSample ||\n lastSample.latitude !== lastPoint.latitude ||\n lastSample.longitude !== lastPoint.longitude\n ) {\n samples.push(lastPoint);\n }\n return samples;\n}\n\nexport function selectEvenlySpacedPoints(points: NaviPoint[], count: number): NaviPoint[] {\n if (count <= 0 || points.length <= count) {\n return points;\n }\n\n const fallbackPoint = points[0];\n if (!fallbackPoint) {\n return [];\n }\n\n return Array.from({ length: count }, (_, index) => {\n const rawIndex = Math.round(((index + 1) * (points.length + 1)) / (count + 1)) - 1;\n const boundedIndex = Math.min(points.length - 1, Math.max(0, rawIndex));\n return points[boundedIndex] ?? fallbackPoint;\n });\n}\n\nexport function normalizeWebRoutePolyline(webRoute: WebPlannedRoute): NaviPoint[] {\n const directPolyline = dedupeAdjacentPoints(webRoute.polyline ?? []);\n if (directPolyline.length > 1) {\n return directPolyline;\n }\n\n const stepPolyline = dedupeAdjacentPoints(\n (webRoute.steps ?? []).flatMap((step) => step.polyline ?? [])\n );\n return stepPolyline;\n}\n\nexport function buildAnchorWaypointsFromWebRoute(\n options: BuildAnchorWaypointsOptions\n): NaviPoint[] {\n // 这一步的目标不是“还原原始 Web 线路”,而是从 Web 线路里抽出\n // 少量、间距足够大的中间锚点,方便原生独立算路尽量贴近它。\n const {\n webRoute,\n maxViaPoints = 8,\n simplifyTolerance = 80,\n minSpacingMeters = 800,\n } = options;\n\n const polyline = normalizeWebRoutePolyline(webRoute);\n if (polyline.length <= 2) {\n return [];\n }\n\n const simplified = dedupeAdjacentPoints(\n simplifyPolylineSafe(polyline, simplifyTolerance)\n );\n const candidatePoints = simplified.length > 2 ? simplified : polyline;\n const interiorPoints = candidatePoints.slice(1, -1);\n\n // 优先用离前一个锚点足够远的点,避免途经点过密导致原生算路失真。\n const spacedPoints: NaviPoint[] = [];\n const firstPoint = polyline[0];\n if (!firstPoint) {\n return [];\n }\n let previousPoint = firstPoint;\n\n for (const point of interiorPoints) {\n if (distanceBetweenCoordinatesSafe(previousPoint, point) < minSpacingMeters) {\n continue;\n }\n spacedPoints.push(point);\n previousPoint = point;\n }\n\n const midpoint = candidatePoints[Math.floor(candidatePoints.length / 2)];\n const waypoints = spacedPoints.length > 0 ? spacedPoints : midpoint ? [midpoint] : [];\n\n return dedupeAdjacentPoints(selectEvenlySpacedPoints(waypoints, maxViaPoints));\n}\n"]}
@@ -0,0 +1,67 @@
1
+ import * as React from 'react';
2
+ import type { Coordinates, ExpoGaodeMapNaviViewProps } from './types';
3
+ /**
4
+ * ExpoGaodeMapNaviView Ref 类型
5
+ */
6
+ export interface ExpoGaodeMapNaviViewRef {
7
+ /**
8
+ * 开始导航
9
+ */
10
+ startNavigation: (start: Coordinates | null, end: Coordinates, type: number) => Promise<void>;
11
+ /**
12
+ * 在当前嵌入式导航视图中,使用独立路径组启动导航
13
+ *
14
+ * - 依赖当前 ExpoGaodeMapNaviView 实例
15
+ * - 适合“路线选择页 -> 进入嵌入式导航页”这类页面内流程
16
+ * - 若不依赖嵌入式导航视图,可改用模块级 startNaviWithIndependentPath(...)
17
+ */
18
+ startNavigationWithIndependentPath: (token: number, options?: {
19
+ routeId?: number;
20
+ routeIndex?: number;
21
+ naviType?: number;
22
+ }) => Promise<void>;
23
+ /**
24
+ * 停止导航
25
+ */
26
+ stopNavigation: () => Promise<void>;
27
+ /**
28
+ * 播放自定义 TTS
29
+ */
30
+ playCustomTTS: (text: string, forcePlay?: boolean) => Promise<void>;
31
+ }
32
+ /**
33
+ * 高德导航视图组件
34
+ *
35
+ * 使用高德官方的导航界面,提供完整的导航体验,包括:
36
+ * - 路线规划和显示
37
+ * - 实时导航信息(距离、时间、道路名称)
38
+ * - 转向箭头和提示
39
+ * - 路况信息
40
+ * - 摄像头提示
41
+ * - 语音播报
42
+ *
43
+ * @example
44
+ * ```tsx
45
+ * import { ExpoGaodeMapNaviView } from 'expo-gaode-map-navigation';
46
+ *
47
+ * function NavigationScreen() {
48
+ * return (
49
+ * <ExpoGaodeMapNaviView
50
+ * style={{ flex: 1 }}
51
+ * naviType={0} // GPS 导航
52
+ * showCamera={true}
53
+ * enableVoice={true}
54
+ * onNaviInfoUpdate={(e) => {
55
+ * console.log('剩余距离:', e.nativeEvent.pathRetainDistance);
56
+ * }}
57
+ * onArrive={() => {
58
+ * console.log('到达目的地!');
59
+ * }}
60
+ * />
61
+ * );
62
+ * }
63
+ * ```
64
+ */
65
+ export declare const ExpoGaodeMapNaviView: React.ForwardRefExoticComponent<ExpoGaodeMapNaviViewProps & React.RefAttributes<ExpoGaodeMapNaviViewRef>>;
66
+ export default ExpoGaodeMapNaviView;
67
+ //# sourceMappingURL=ExpoGaodeMapNaviView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpoGaodeMapNaviView.d.ts","sourceRoot":"","sources":["../../src/ExpoGaodeMapNaviView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EACV,WAAW,EACX,yBAAyB,EAU1B,MAAM,SAAS,CAAC;AAuCjB;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,eAAe,EAAE,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9F;;;;;;OAMG;IACH,kCAAkC,EAAE,CAClC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,KACE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB;;OAEG;IACH,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpC;;OAEG;IACH,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE;AAuCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,oBAAoB,2GA6H/B,CAAC;AAIH,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,138 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { Image, PermissionsAndroid, Platform, StatusBar, } from 'react-native';
4
+ import { createLazyNativeViewManager } from './map/utils/lazyNativeViewManager';
5
+ function normalizeNaviImageSource(source) {
6
+ if (source == null) {
7
+ return undefined;
8
+ }
9
+ if (typeof source === 'string') {
10
+ return source;
11
+ }
12
+ return Image.resolveAssetSource(source)?.uri;
13
+ }
14
+ async function ensureAndroidNavigationNotificationPermission(enabled) {
15
+ if (!enabled || Platform.OS !== 'android' || Platform.Version < 33) {
16
+ return;
17
+ }
18
+ try {
19
+ const permission = PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS;
20
+ const granted = await PermissionsAndroid.check(permission);
21
+ if (!granted) {
22
+ await PermissionsAndroid.request(permission);
23
+ }
24
+ }
25
+ catch (error) {
26
+ console.warn('[expo-gaode-map-navigation] Failed to request POST_NOTIFICATIONS permission automatically.', error);
27
+ }
28
+ }
29
+ const getNativeView = createLazyNativeViewManager('ExpoGaodeMapNaviView');
30
+ /**
31
+ * 高德导航视图组件
32
+ *
33
+ * 使用高德官方的导航界面,提供完整的导航体验,包括:
34
+ * - 路线规划和显示
35
+ * - 实时导航信息(距离、时间、道路名称)
36
+ * - 转向箭头和提示
37
+ * - 路况信息
38
+ * - 摄像头提示
39
+ * - 语音播报
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * import { ExpoGaodeMapNaviView } from 'expo-gaode-map-navigation';
44
+ *
45
+ * function NavigationScreen() {
46
+ * return (
47
+ * <ExpoGaodeMapNaviView
48
+ * style={{ flex: 1 }}
49
+ * naviType={0} // GPS 导航
50
+ * showCamera={true}
51
+ * enableVoice={true}
52
+ * onNaviInfoUpdate={(e) => {
53
+ * console.log('剩余距离:', e.nativeEvent.pathRetainDistance);
54
+ * }}
55
+ * onArrive={() => {
56
+ * console.log('到达目的地!');
57
+ * }}
58
+ * />
59
+ * );
60
+ * }
61
+ * ```
62
+ */
63
+ export const ExpoGaodeMapNaviView = React.forwardRef((props, ref) => {
64
+ const nativeRef = React.useRef(null);
65
+ const hasRequestedAndroidNotificationPermissionRef = React.useRef(false);
66
+ const NativeView = React.useMemo(() => getNativeView(), []);
67
+ const { onNaviInfoUpdate, onNaviStart, onNaviEnd, onArrive, onReCalculate, onPlayVoice, onNaviVisualStateChange, onLaneInfoUpdate, onTrafficStatusesUpdate, isNightMode, mapViewModeType, carImage, fourCornersImage, carCompassImage, startPointImage, wayPointImage, endPointImage, cameraImage, androidStatusBarPaddingTop, ...restProps } = props;
68
+ const resolvedAndroidStatusBarPaddingTop = Platform.OS === 'android' &&
69
+ androidStatusBarPaddingTop == null &&
70
+ props.showUIElements !== false &&
71
+ props.hideNativeTopInfoLayout !== true
72
+ ? (StatusBar.currentHeight ?? 0)
73
+ : androidStatusBarPaddingTop;
74
+ const resolvedCarImage = normalizeNaviImageSource(carImage);
75
+ const resolvedFourCornersImage = normalizeNaviImageSource(fourCornersImage);
76
+ const resolvedCarCompassImage = normalizeNaviImageSource(carCompassImage);
77
+ const resolvedStartPointImage = normalizeNaviImageSource(startPointImage);
78
+ const resolvedWayPointImage = normalizeNaviImageSource(wayPointImage);
79
+ const resolvedEndPointImage = normalizeNaviImageSource(endPointImage);
80
+ const resolvedCameraImage = normalizeNaviImageSource(cameraImage);
81
+ const resolvedMapViewModeType = mapViewModeType ?? (isNightMode == null ? undefined : (isNightMode ? 1 : 0));
82
+ const platformSpecificImageProps = Platform.OS === 'android'
83
+ ? {
84
+ fourCornersImage: resolvedFourCornersImage,
85
+ }
86
+ : {
87
+ carCompassImage: resolvedCarCompassImage,
88
+ cameraImage: resolvedCameraImage,
89
+ };
90
+ React.useEffect(() => {
91
+ if (Platform.OS !== 'android') {
92
+ return;
93
+ }
94
+ if (!props.androidBackgroundNavigationNotificationEnabled) {
95
+ hasRequestedAndroidNotificationPermissionRef.current = false;
96
+ return;
97
+ }
98
+ if (hasRequestedAndroidNotificationPermissionRef.current) {
99
+ return;
100
+ }
101
+ hasRequestedAndroidNotificationPermissionRef.current = true;
102
+ void ensureAndroidNavigationNotificationPermission(true);
103
+ }, [props.androidBackgroundNavigationNotificationEnabled]);
104
+ // 创建 API 引用
105
+ const apiRef = React.useMemo(() => ({
106
+ startNavigation: async (start, end, type) => {
107
+ if (!nativeRef.current)
108
+ throw new Error('ExpoGaodeMapNaviView not initialized');
109
+ // 将对象解构为单独的参数传递给原生层
110
+ const startLat = start?.latitude ?? 0;
111
+ const startLng = start?.longitude ?? 0;
112
+ const endLat = end.latitude;
113
+ const endLng = end.longitude;
114
+ return nativeRef.current.startNavigation(startLat, startLng, endLat, endLng);
115
+ },
116
+ startNavigationWithIndependentPath: async (token, options) => {
117
+ if (!nativeRef.current)
118
+ throw new Error('ExpoGaodeMapNaviView not initialized');
119
+ return nativeRef.current.startNavigationWithIndependentPath(token, options?.routeId, options?.routeIndex, options?.naviType);
120
+ },
121
+ stopNavigation: async () => {
122
+ if (!nativeRef.current)
123
+ throw new Error('ExpoGaodeMapNaviView not initialized');
124
+ return nativeRef.current.stopNavigation();
125
+ },
126
+ playCustomTTS: async (text, forcePlay = false) => {
127
+ if (!nativeRef.current)
128
+ throw new Error('ExpoGaodeMapNaviView not initialized');
129
+ return nativeRef.current.playCustomTTS(text, forcePlay);
130
+ },
131
+ }), []);
132
+ // 暴露 API 给外部 ref
133
+ React.useImperativeHandle(ref, () => apiRef, [apiRef]);
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 }));
135
+ });
136
+ ExpoGaodeMapNaviView.displayName = 'ExpoGaodeMapNaviView';
137
+ export default ExpoGaodeMapNaviView;
138
+ //# sourceMappingURL=ExpoGaodeMapNaviView.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,2 @@
1
+ export * from './types';
2
+ //# sourceMappingURL=ExpoGaodeMapNavigation.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpoGaodeMapNavigation.types.d.ts","sourceRoot":"","sources":["../../src/ExpoGaodeMapNavigation.types.ts"],"names":[],"mappings":"AAEA,cAAc,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ // 重新导出所有类型,保持向后兼容
2
+ export * from './types';
3
+ //# sourceMappingURL=ExpoGaodeMapNavigation.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpoGaodeMapNavigation.types.js","sourceRoot":"","sources":["../../src/ExpoGaodeMapNavigation.types.ts"],"names":[],"mappings":"AACA,kBAAkB;AAClB,cAAc,SAAS,CAAC","sourcesContent":["\n// 重新导出所有类型,保持向后兼容\nexport * from './types';"]}
@@ -0,0 +1,4 @@
1
+ import { ExpoGaodeMapNavigationModule as ExpoGaodeMapNavigationModuleType } from './types/native-module.types';
2
+ declare const _default: ExpoGaodeMapNavigationModuleType;
3
+ export default _default;
4
+ //# sourceMappingURL=ExpoGaodeMapNavigationModule.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,27 @@
1
+ import { requireNativeModule } from 'expo-modules-core';
2
+ import { ExpoGaodeMapNavigationModule as ExpoGaodeMapNavigationModuleType } from './types/native-module.types';
3
+ /**
4
+ * 高德地图导航模块
5
+ *
6
+ * 提供路径规划功能,包括驾车、步行、骑行、公交、货车等多种出行方式
7
+ */
8
+ let nativeModuleCache = null;
9
+ function getNativeModule() {
10
+ if (!nativeModuleCache) {
11
+ nativeModuleCache = requireNativeModule('ExpoGaodeMapNavigation');
12
+ }
13
+ return nativeModuleCache;
14
+ }
15
+ function getBoundNativeValue(module, prop) {
16
+ const value = Reflect.get(module, prop, module);
17
+ if (typeof value === 'function') {
18
+ return (...args) => value.apply(module, args);
19
+ }
20
+ return value;
21
+ }
22
+ export default new Proxy({}, {
23
+ get(_target, prop) {
24
+ return getBoundNativeValue(getNativeModule(), prop);
25
+ },
26
+ });
27
+ //# sourceMappingURL=ExpoGaodeMapNavigationModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpoGaodeMapNavigationModule.js","sourceRoot":"","sources":["../../src/ExpoGaodeMapNavigationModule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,4BAA4B,IAAI,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAC/G;;;;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"]}