expo-gaode-map-navigation 2.0.12-next.0 → 2.0.13

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 (238) hide show
  1. package/README.md +296 -7
  2. package/android/build.gradle +12 -4
  3. package/android/src/main/AndroidManifest.xml +10 -1
  4. package/android/src/main/cpp/cluster_jni.cpp +56 -0
  5. package/android/src/main/java/expo/modules/gaodemap/map/ExpoGaodeMapModule.kt +49 -8
  6. package/android/src/main/java/expo/modules/gaodemap/map/ExpoGaodeMapOfflineModule.kt +83 -15
  7. package/android/src/main/java/expo/modules/gaodemap/map/ExpoGaodeMapView.kt +13 -3
  8. package/android/src/main/java/expo/modules/gaodemap/map/managers/UIManager.kt +36 -39
  9. package/android/src/main/java/expo/modules/gaodemap/map/modules/SDKInitializer.kt +23 -17
  10. package/android/src/main/java/expo/modules/gaodemap/map/overlays/ClusterView.kt +5 -2
  11. package/android/src/main/java/expo/modules/gaodemap/map/overlays/HeatMapView.kt +122 -10
  12. package/android/src/main/java/expo/modules/gaodemap/map/overlays/HeatMapViewModule.kt +2 -2
  13. package/android/src/main/java/expo/modules/gaodemap/map/overlays/MarkerView.kt +37 -25
  14. package/android/src/main/java/expo/modules/gaodemap/map/overlays/MarkerViewModule.kt +6 -6
  15. package/android/src/main/java/expo/modules/gaodemap/map/search/ExpoGaodeMapSearchModule.kt +751 -0
  16. package/android/src/main/java/expo/modules/gaodemap/map/utils/GeometryUtils.kt +103 -0
  17. package/android/src/main/java/expo/modules/gaodemap/navigation/ExpoGaodeMapNaviView.kt +1408 -394
  18. package/android/src/main/java/expo/modules/gaodemap/navigation/ExpoGaodeMapNaviViewModule.kt +121 -1
  19. package/android/src/main/java/expo/modules/gaodemap/navigation/ExpoGaodeMapNavigationModule.kt +14 -28
  20. package/android/src/main/java/expo/modules/gaodemap/navigation/listeners/IndependentRouteListener.kt +28 -3
  21. package/android/src/main/java/expo/modules/gaodemap/navigation/listeners/RouteCalculateListener.kt +2 -2
  22. package/android/src/main/java/expo/modules/gaodemap/navigation/managers/IndependentRouteManager.kt +114 -15
  23. package/android/src/main/java/expo/modules/gaodemap/navigation/routes/drive/DriveTruckRouteCalculator.kt +24 -35
  24. package/android/src/main/java/expo/modules/gaodemap/navigation/services/IndependentRouteService.kt +50 -36
  25. package/android/src/main/java/expo/modules/gaodemap/navigation/services/NavigationForegroundService.kt +661 -0
  26. package/android/src/main/java/expo/modules/gaodemap/navigation/utils/Converters.kt +21 -12
  27. package/android/src/main/res/drawable/ic_nav_notification_small.xml +10 -0
  28. package/android/src/main/res/drawable/landback_0.png +0 -0
  29. package/android/src/main/res/drawable/landback_1.png +0 -0
  30. package/android/src/main/res/drawable/landback_2.png +0 -0
  31. package/android/src/main/res/drawable/landback_3.png +0 -0
  32. package/android/src/main/res/drawable/landback_4.png +0 -0
  33. package/android/src/main/res/drawable/landback_5.png +0 -0
  34. package/android/src/main/res/drawable/landback_6.png +0 -0
  35. package/android/src/main/res/drawable/landback_7.png +0 -0
  36. package/android/src/main/res/drawable/landback_8.png +0 -0
  37. package/android/src/main/res/drawable/landback_9.png +0 -0
  38. package/android/src/main/res/drawable/landback_a.png +0 -0
  39. package/android/src/main/res/drawable/landback_b.png +0 -0
  40. package/android/src/main/res/drawable/landback_c.png +0 -0
  41. package/android/src/main/res/drawable/landback_d.png +0 -0
  42. package/android/src/main/res/drawable/landback_e.png +0 -0
  43. package/android/src/main/res/drawable/landback_f.png +0 -0
  44. package/android/src/main/res/drawable/landback_g.png +0 -0
  45. package/android/src/main/res/drawable/landback_h.png +0 -0
  46. package/android/src/main/res/drawable/landback_i.png +0 -0
  47. package/android/src/main/res/drawable/landback_j.png +0 -0
  48. package/android/src/main/res/drawable/landback_k.png +0 -0
  49. package/android/src/main/res/drawable/landback_l.png +0 -0
  50. package/android/src/main/res/drawable/landfront_0.png +0 -0
  51. package/android/src/main/res/drawable/landfront_00.png +0 -0
  52. package/android/src/main/res/drawable/landfront_1.png +0 -0
  53. package/android/src/main/res/drawable/landfront_11.png +0 -0
  54. package/android/src/main/res/drawable/landfront_20.png +0 -0
  55. package/android/src/main/res/drawable/landfront_21.png +0 -0
  56. package/android/src/main/res/drawable/landfront_22.png +0 -0
  57. package/android/src/main/res/drawable/landfront_3.png +0 -0
  58. package/android/src/main/res/drawable/landfront_33.png +0 -0
  59. package/android/src/main/res/drawable/landfront_40.png +0 -0
  60. package/android/src/main/res/drawable/landfront_43.png +0 -0
  61. package/android/src/main/res/drawable/landfront_44.png +0 -0
  62. package/android/src/main/res/drawable/landfront_5.png +0 -0
  63. package/android/src/main/res/drawable/landfront_55.png +0 -0
  64. package/android/src/main/res/drawable/landfront_61.png +0 -0
  65. package/android/src/main/res/drawable/landfront_63.png +0 -0
  66. package/android/src/main/res/drawable/landfront_66.png +0 -0
  67. package/android/src/main/res/drawable/landfront_70.png +0 -0
  68. package/android/src/main/res/drawable/landfront_71.png +0 -0
  69. package/android/src/main/res/drawable/landfront_73.png +0 -0
  70. package/android/src/main/res/drawable/landfront_77.png +0 -0
  71. package/android/src/main/res/drawable/landfront_8.png +0 -0
  72. package/android/src/main/res/drawable/landfront_88.png +0 -0
  73. package/android/src/main/res/drawable/landfront_90.png +0 -0
  74. package/android/src/main/res/drawable/landfront_95.png +0 -0
  75. package/android/src/main/res/drawable/landfront_99.png +0 -0
  76. package/android/src/main/res/drawable/landfront_a0.png +0 -0
  77. package/android/src/main/res/drawable/landfront_a8.png +0 -0
  78. package/android/src/main/res/drawable/landfront_aa.png +0 -0
  79. package/android/src/main/res/drawable/landfront_b1.png +0 -0
  80. package/android/src/main/res/drawable/landfront_b5.png +0 -0
  81. package/android/src/main/res/drawable/landfront_bb.png +0 -0
  82. package/android/src/main/res/drawable/landfront_c3.png +0 -0
  83. package/android/src/main/res/drawable/landfront_c8.png +0 -0
  84. package/android/src/main/res/drawable/landfront_cc.png +0 -0
  85. package/android/src/main/res/drawable/landfront_d.png +0 -0
  86. package/android/src/main/res/drawable/landfront_dd.png +0 -0
  87. package/android/src/main/res/drawable/landfront_e1.png +0 -0
  88. package/android/src/main/res/drawable/landfront_e5.png +0 -0
  89. package/android/src/main/res/drawable/landfront_ee.png +0 -0
  90. package/android/src/main/res/drawable/landfront_f0.png +0 -0
  91. package/android/src/main/res/drawable/landfront_f1.png +0 -0
  92. package/android/src/main/res/drawable/landfront_f5.png +0 -0
  93. package/android/src/main/res/drawable/landfront_ff.png +0 -0
  94. package/android/src/main/res/drawable/landfront_g3.png +0 -0
  95. package/android/src/main/res/drawable/landfront_g5.png +0 -0
  96. package/android/src/main/res/drawable/landfront_gg.png +0 -0
  97. package/android/src/main/res/drawable/landfront_h1.png +0 -0
  98. package/android/src/main/res/drawable/landfront_h3.png +0 -0
  99. package/android/src/main/res/drawable/landfront_h5.png +0 -0
  100. package/android/src/main/res/drawable/landfront_hh.png +0 -0
  101. package/android/src/main/res/drawable/landfront_i0.png +0 -0
  102. package/android/src/main/res/drawable/landfront_i3.png +0 -0
  103. package/android/src/main/res/drawable/landfront_i5.png +0 -0
  104. package/android/src/main/res/drawable/landfront_ii.png +0 -0
  105. package/android/src/main/res/drawable/landfront_j1.png +0 -0
  106. package/android/src/main/res/drawable/landfront_j8.png +0 -0
  107. package/android/src/main/res/drawable/landfront_jj.png +0 -0
  108. package/android/src/main/res/drawable/landfront_kk.png +0 -0
  109. package/android/src/main/res/drawable/landfront_ll.png +0 -0
  110. package/android/src/main/res/drawable/nav_notification_brand_icon.xml +16 -0
  111. package/android/src/main/res/drawable/navi_arrow_leftline.png +0 -0
  112. package/android/src/main/res/drawable/navi_lane_shape_bg_center.xml +5 -0
  113. package/android/src/main/res/drawable/navi_lane_shape_bg_left.xml +8 -0
  114. package/android/src/main/res/drawable/navi_lane_shape_bg_over.xml +6 -0
  115. package/android/src/main/res/drawable/navi_lane_shape_bg_right.xml +8 -0
  116. package/android/src/main/res/drawable-nodpi/nav_tracker_car.png +0 -0
  117. package/build/ExpoGaodeMapNaviView.d.ts +16 -0
  118. package/build/ExpoGaodeMapNaviView.d.ts.map +1 -1
  119. package/build/ExpoGaodeMapNaviView.js +74 -1
  120. package/build/ExpoGaodeMapNaviView.js.map +1 -1
  121. package/build/index.d.ts +56 -8
  122. package/build/index.d.ts.map +1 -1
  123. package/build/index.js +452 -10
  124. package/build/index.js.map +1 -1
  125. package/build/map/ExpoGaodeMapModule.d.ts +15 -13
  126. package/build/map/ExpoGaodeMapModule.d.ts.map +1 -1
  127. package/build/map/ExpoGaodeMapModule.js +31 -39
  128. package/build/map/ExpoGaodeMapModule.js.map +1 -1
  129. package/build/map/ExpoGaodeMapOfflineModule.d.ts +5 -0
  130. package/build/map/ExpoGaodeMapOfflineModule.d.ts.map +1 -1
  131. package/build/map/ExpoGaodeMapOfflineModule.js.map +1 -1
  132. package/build/map/ExpoGaodeMapView.d.ts +3 -4
  133. package/build/map/ExpoGaodeMapView.d.ts.map +1 -1
  134. package/build/map/ExpoGaodeMapView.js +28 -25
  135. package/build/map/ExpoGaodeMapView.js.map +1 -1
  136. package/build/map/components/overlays/Circle.d.ts.map +1 -1
  137. package/build/map/components/overlays/Circle.js +1 -30
  138. package/build/map/components/overlays/Circle.js.map +1 -1
  139. package/build/map/components/overlays/Cluster.d.ts.map +1 -1
  140. package/build/map/components/overlays/Cluster.js +1 -42
  141. package/build/map/components/overlays/Cluster.js.map +1 -1
  142. package/build/map/components/overlays/HeatMap.d.ts.map +1 -1
  143. package/build/map/components/overlays/HeatMap.js +21 -21
  144. package/build/map/components/overlays/HeatMap.js.map +1 -1
  145. package/build/map/components/overlays/Marker.d.ts.map +1 -1
  146. package/build/map/components/overlays/Marker.js +76 -80
  147. package/build/map/components/overlays/Marker.js.map +1 -1
  148. package/build/map/components/overlays/Polygon.d.ts.map +1 -1
  149. package/build/map/components/overlays/Polygon.js +1 -25
  150. package/build/map/components/overlays/Polygon.js.map +1 -1
  151. package/build/map/components/overlays/Polyline.d.ts.map +1 -1
  152. package/build/map/components/overlays/Polyline.js +1 -31
  153. package/build/map/components/overlays/Polyline.js.map +1 -1
  154. package/build/map/index.d.ts +9 -2
  155. package/build/map/index.d.ts.map +1 -1
  156. package/build/map/index.js +9 -2
  157. package/build/map/index.js.map +1 -1
  158. package/build/map/search/ExpoGaodeMapSearch.types.d.ts +340 -0
  159. package/build/map/search/ExpoGaodeMapSearch.types.d.ts.map +1 -0
  160. package/build/map/search/ExpoGaodeMapSearch.types.js +19 -0
  161. package/build/map/search/ExpoGaodeMapSearch.types.js.map +1 -0
  162. package/build/map/search/ExpoGaodeMapSearchModule.d.ts +74 -0
  163. package/build/map/search/ExpoGaodeMapSearchModule.d.ts.map +1 -0
  164. package/build/map/search/ExpoGaodeMapSearchModule.js +47 -0
  165. package/build/map/search/ExpoGaodeMapSearchModule.js.map +1 -0
  166. package/build/map/search/index.d.ts +156 -0
  167. package/build/map/search/index.d.ts.map +1 -0
  168. package/build/map/search/index.js +171 -0
  169. package/build/map/search/index.js.map +1 -0
  170. package/build/map/types/index.d.ts +2 -2
  171. package/build/map/types/index.d.ts.map +1 -1
  172. package/build/map/types/index.js.map +1 -1
  173. package/build/map/types/map-view.types.d.ts +4 -2
  174. package/build/map/types/map-view.types.d.ts.map +1 -1
  175. package/build/map/types/map-view.types.js.map +1 -1
  176. package/build/map/types/native-module.types.d.ts +11 -12
  177. package/build/map/types/native-module.types.d.ts.map +1 -1
  178. package/build/map/types/native-module.types.js.map +1 -1
  179. package/build/map/types/overlays.types.d.ts +9 -14
  180. package/build/map/types/overlays.types.d.ts.map +1 -1
  181. package/build/map/types/overlays.types.js.map +1 -1
  182. package/build/map/types/route-playback.types.d.ts +16 -0
  183. package/build/map/types/route-playback.types.d.ts.map +1 -1
  184. package/build/map/types/route-playback.types.js.map +1 -1
  185. package/build/map/utils/ErrorHandler.js +11 -11
  186. package/build/map/utils/ErrorHandler.js.map +1 -1
  187. package/build/map/utils/OfflineMapManager.d.ts +4 -0
  188. package/build/map/utils/OfflineMapManager.d.ts.map +1 -1
  189. package/build/map/utils/OfflineMapManager.js +6 -0
  190. package/build/map/utils/OfflineMapManager.js.map +1 -1
  191. package/build/types/coordinates.types.d.ts +3 -0
  192. package/build/types/coordinates.types.d.ts.map +1 -1
  193. package/build/types/coordinates.types.js.map +1 -1
  194. package/build/types/independent.types.d.ts +111 -12
  195. package/build/types/independent.types.d.ts.map +1 -1
  196. package/build/types/independent.types.js.map +1 -1
  197. package/build/types/native-module.types.d.ts +1 -1
  198. package/build/types/native-module.types.js.map +1 -1
  199. package/build/types/naviview.types.d.ts +304 -14
  200. package/build/types/naviview.types.d.ts.map +1 -1
  201. package/build/types/naviview.types.js.map +1 -1
  202. package/build/types/route.types.d.ts +12 -2
  203. package/build/types/route.types.d.ts.map +1 -1
  204. package/build/types/route.types.js.map +1 -1
  205. package/expo-module.config.json +4 -2
  206. package/ios/ExpoGaodeMapNaviView.swift +2331 -201
  207. package/ios/ExpoGaodeMapNaviViewModule.swift +109 -1
  208. package/ios/ExpoGaodeMapNavigation.podspec +2 -1
  209. package/ios/ExpoGaodeMapNavigationModule.swift +7 -5
  210. package/ios/managers/IndependentRouteManager.swift +90 -26
  211. package/ios/map/ExpoGaodeMapModule.swift +72 -21
  212. package/ios/map/ExpoGaodeMapOfflineModule.swift +61 -0
  213. package/ios/map/ExpoGaodeMapSearchModule.swift +773 -0
  214. package/ios/map/ExpoGaodeMapView.swift +23 -5
  215. package/ios/map/GaodeMapPrivacyManager.swift +26 -18
  216. package/ios/map/cpp/GeometryEngine.cpp +112 -0
  217. package/ios/map/cpp/GeometryEngine.hpp +21 -0
  218. package/ios/map/modules/LocationManager.swift +37 -5
  219. package/ios/map/overlays/MarkerView.swift +11 -11
  220. package/ios/map/overlays/MarkerViewModule.swift +4 -4
  221. package/ios/map/overlays/PolylineView.swift +6 -12
  222. package/ios/map/utils/ClusterNative.h +8 -0
  223. package/ios/map/utils/ClusterNative.mm +27 -0
  224. package/ios/map/utils/PermissionManager.swift +115 -6
  225. package/ios/routes/drive/DriveTruckRouteCalculator.swift +165 -77
  226. package/ios/routes/walkride/WalkRideRouteCalculator.swift +127 -1
  227. package/ios/services/IndependentRouteService.swift +198 -39
  228. package/ios/services/NavigationLiveActivityAttributes.swift +48 -0
  229. package/ios/services/NavigationLiveActivityManager.swift +359 -0
  230. package/package.json +22 -7
  231. package/plugin/build/withGaodeMap.d.ts +8 -0
  232. package/plugin/build/withGaodeMap.js +60 -4
  233. package/scripts/check-expo-modules.js +68 -0
  234. package/shared/cpp/GeometryEngine.cpp +112 -0
  235. package/shared/cpp/GeometryEngine.hpp +21 -0
  236. package/widget-template/README.md +46 -0
  237. package/widget-template/ios/NavigationLiveActivityWidget.swift +367 -0
  238. package/android/src/main/java/expo/modules/gaodemap/navigation/managers/RouteCalculator.kt +0 -173
@@ -5,6 +5,7 @@ import com.amap.api.navi.AMapNavi
5
5
  import com.amap.api.navi.model.AMapCarInfo
6
6
  import com.amap.api.navi.model.NaviLatLng
7
7
  import com.amap.api.navi.model.NaviPoi
8
+ import expo.modules.core.arguments.ReadableArguments
8
9
  import expo.modules.gaodemap.navigation.ExpoGaodeMapNavigationModule
9
10
  import expo.modules.gaodemap.navigation.listeners.IndependentRouteListener
10
11
  import expo.modules.gaodemap.navigation.utils.Converters
@@ -25,32 +26,33 @@ class IndependentRouteService(
25
26
  }
26
27
 
27
28
  // 驾车(小客车)
28
- fun independentDriveRoute(options: Map<String, Any?>, promise: Promise) {
29
+ fun independentDriveRoute(options: ReadableArguments, promise: Promise) {
29
30
  try {
31
+ val rawOptions = options.toPlainMap()
30
32
  val navi = AMapNavi.getInstance(context)
31
33
 
32
34
  @Suppress("UNCHECKED_CAST")
33
- val from = options["from"] as? Map<String, Any?>
35
+ val from = rawOptions["from"] as? Map<String, Any?>
34
36
  @Suppress("UNCHECKED_CAST")
35
- val to = options["to"] as? Map<String, Any?> ?: throw Exception("to is required")
37
+ val to = rawOptions["to"] as? Map<String, Any?> ?: throw Exception("to is required")
36
38
 
37
39
  val fromPoi = from?.let { Converters.parseNaviPoi(it) }
38
40
  val toPoi = Converters.parseNaviPoi(to)
39
41
  @Suppress("UNCHECKED_CAST")
40
- val waypointsRaw = options["waypoints"] as? List<Map<String, Any?>>
42
+ val waypointsRaw = rawOptions["waypoints"] as? List<Map<String, Any?>>
41
43
  val waypointsPoi = Converters.parseWaypoints(waypointsRaw)
42
44
 
43
- val strategy = resolveDriveStrategy(navi, options)
45
+ val strategy = resolveDriveStrategy(navi, rawOptions)
44
46
 
45
- val carNumber = options["carNumber"] as? String
46
- val restriction = options["restriction"] as? Boolean
47
+ val carNumber = rawOptions["carNumber"] as? String
48
+ val restriction = rawOptions["restriction"] as? Boolean
47
49
  if (carNumber != null || restriction != null) {
48
50
  setCarInfo(navi, "0", carNumber, restriction)
49
51
  }
50
52
 
51
53
  val listener = IndependentRouteListener(module, promise)
52
- val avoidPolygons = Converters.parseAvoidPolygons(options["avoidPolygons"])
53
- val avoidRoad = (options["avoidRoad"] as? String)?.trim()?.takeIf { it.isNotEmpty() }
54
+ val avoidPolygons = Converters.parseAvoidPolygons(rawOptions["avoidPolygons"])
55
+ val avoidRoad = (rawOptions["avoidRoad"] as? String)?.trim()?.takeIf { it.isNotEmpty() }
54
56
  val hasAvoidPolygon = avoidPolygons.isNotEmpty()
55
57
  val hasAvoidRoad = !avoidRoad.isNullOrBlank()
56
58
 
@@ -92,7 +94,7 @@ class IndependentRouteService(
92
94
  }
93
95
  }
94
96
 
95
- navi.independentCalculateRoute(
97
+ val success = navi.independentCalculateRoute(
96
98
  fromPoi,
97
99
  toPoi,
98
100
  waypointsPoi,
@@ -100,31 +102,36 @@ class IndependentRouteService(
100
102
  1, // 驾车
101
103
  listener
102
104
  )
105
+
106
+ if (!success) {
107
+ promise.reject("CALCULATE_ERROR", "独立驾车路线规划启动失败", null)
108
+ }
103
109
  } catch (e: Exception) {
104
110
  promise.reject("CALCULATE_ERROR", e.message, e)
105
111
  }
106
112
  }
107
113
 
108
114
  // 货车
109
- fun independentTruckRoute(options: Map<String, Any?>, promise: Promise) {
115
+ fun independentTruckRoute(options: ReadableArguments, promise: Promise) {
110
116
  try {
117
+ val rawOptions = options.toPlainMap()
111
118
  val navi = AMapNavi.getInstance(context)
112
119
 
113
- val carNumber = options["carNumber"] as? String
114
- val restriction = options["restriction"] as? Boolean
120
+ val carNumber = rawOptions["carNumber"] as? String
121
+ val restriction = rawOptions["restriction"] as? Boolean
115
122
  setCarInfo(navi, "1", carNumber, restriction)
116
123
 
117
124
  @Suppress("UNCHECKED_CAST")
118
- val from = options["from"] as? Map<String, Any?>
125
+ val from = rawOptions["from"] as? Map<String, Any?>
119
126
  @Suppress("UNCHECKED_CAST")
120
- val to = options["to"] as? Map<String, Any?> ?: throw Exception("to is required")
127
+ val to = rawOptions["to"] as? Map<String, Any?> ?: throw Exception("to is required")
121
128
 
122
129
  val fromPoi = from?.let { Converters.parseNaviPoi(it) }
123
130
  val toPoi = Converters.parseNaviPoi(to)
124
131
  @Suppress("UNCHECKED_CAST")
125
- val waypoints = Converters.parseWaypoints(options["waypoints"] as? List<Map<String, Any?>>)
132
+ val waypoints = Converters.parseWaypoints(rawOptions["waypoints"] as? List<Map<String, Any?>>)
126
133
 
127
- val strategy = resolveDriveStrategy(navi, options)
134
+ val strategy = resolveDriveStrategy(navi, rawOptions)
128
135
 
129
136
  navi.independentCalculateRoute(
130
137
  fromPoi, toPoi, waypoints, strategy,
@@ -137,23 +144,24 @@ class IndependentRouteService(
137
144
  }
138
145
 
139
146
  // 步行
140
- fun independentWalkRoute(options: Map<String, Any?>, promise: Promise) {
147
+ fun independentWalkRoute(options: ReadableArguments, promise: Promise) {
141
148
  try {
149
+ val rawOptions = options.toPlainMap()
142
150
  val navi = AMapNavi.getInstance(context)
143
151
 
144
152
  @Suppress("UNCHECKED_CAST")
145
- val from = options["from"] as? Map<String, Any?>
153
+ val from = rawOptions["from"] as? Map<String, Any?>
146
154
  @Suppress("UNCHECKED_CAST")
147
- val to = options["to"] as? Map<String, Any?> ?: throw Exception("to is required")
155
+ val to = rawOptions["to"] as? Map<String, Any?> ?: throw Exception("to is required")
148
156
 
149
157
  val fromPoi = from?.let { Converters.parseNaviPoi(it) }
150
158
  val toPoi = Converters.parseNaviPoi(to)
151
159
  @Suppress("UNCHECKED_CAST")
152
- val waypoints = Converters.parseWaypoints(options["waypoints"] as? List<Map<String, Any?>>)
160
+ val waypoints = Converters.parseWaypoints(rawOptions["waypoints"] as? List<Map<String, Any?>>)
153
161
 
154
162
  val travelStrategy: Int = when {
155
- options["travelStrategy"] is Number -> (options["travelStrategy"] as Number).toInt()
156
- options["multiple"] as? Boolean == true -> 1001
163
+ rawOptions["travelStrategy"] is Number -> (rawOptions["travelStrategy"] as Number).toInt()
164
+ rawOptions["multiple"] as? Boolean == true -> 1001
157
165
  else -> 1000
158
166
  }
159
167
 
@@ -168,23 +176,24 @@ class IndependentRouteService(
168
176
  }
169
177
 
170
178
  // 骑行
171
- fun independentRideRoute(options: Map<String, Any?>, promise: Promise) {
179
+ fun independentRideRoute(options: ReadableArguments, promise: Promise) {
172
180
  try {
181
+ val rawOptions = options.toPlainMap()
173
182
  val navi = AMapNavi.getInstance(context)
174
183
 
175
184
  @Suppress("UNCHECKED_CAST")
176
- val from = options["from"] as? Map<String, Any?>
185
+ val from = rawOptions["from"] as? Map<String, Any?>
177
186
  @Suppress("UNCHECKED_CAST")
178
- val to = options["to"] as? Map<String, Any?> ?: throw Exception("to is required")
187
+ val to = rawOptions["to"] as? Map<String, Any?> ?: throw Exception("to is required")
179
188
 
180
189
  val fromPoi = from?.let { Converters.parseNaviPoi(it) }
181
190
  val toPoi = Converters.parseNaviPoi(to)
182
191
  @Suppress("UNCHECKED_CAST")
183
- val waypoints = Converters.parseWaypoints(options["waypoints"] as? List<Map<String, Any?>>)
192
+ val waypoints = Converters.parseWaypoints(rawOptions["waypoints"] as? List<Map<String, Any?>>)
184
193
 
185
194
  val travelStrategy: Int = when {
186
- options["travelStrategy"] is Number -> (options["travelStrategy"] as Number).toInt()
187
- options["multiple"] as? Boolean == true -> 1001
195
+ rawOptions["travelStrategy"] is Number -> (rawOptions["travelStrategy"] as Number).toInt()
196
+ rawOptions["multiple"] as? Boolean == true -> 1001
188
197
  else -> 1000
189
198
  }
190
199
 
@@ -199,25 +208,26 @@ class IndependentRouteService(
199
208
  }
200
209
 
201
210
  // 摩托车(carType=11)
202
- fun independentMotorcycleRoute(options: Map<String, Any?>, promise: Promise) {
211
+ fun independentMotorcycleRoute(options: ReadableArguments, promise: Promise) {
203
212
  try {
213
+ val rawOptions = options.toPlainMap()
204
214
  val navi = AMapNavi.getInstance(context)
205
215
 
206
- val carNumber = options["carNumber"] as? String
207
- val motorcycleCC = (options["motorcycleCC"] as? Number)?.toInt()
216
+ val carNumber = rawOptions["carNumber"] as? String
217
+ val motorcycleCC = (rawOptions["motorcycleCC"] as? Number)?.toInt()
208
218
  setCarInfo(navi, "11", carNumber, null, motorcycleCC)
209
219
 
210
220
  @Suppress("UNCHECKED_CAST")
211
- val from = options["from"] as? Map<String, Any?>
221
+ val from = rawOptions["from"] as? Map<String, Any?>
212
222
  @Suppress("UNCHECKED_CAST")
213
- val to = options["to"] as? Map<String, Any?> ?: throw Exception("to is required")
223
+ val to = rawOptions["to"] as? Map<String, Any?> ?: throw Exception("to is required")
214
224
 
215
225
  val fromPoi = from?.let { Converters.parseNaviPoi(it) }
216
226
  val toPoi = Converters.parseNaviPoi(to)
217
227
  @Suppress("UNCHECKED_CAST")
218
- val waypoints = Converters.parseWaypoints(options["waypoints"] as? List<Map<String, Any?>>)
228
+ val waypoints = Converters.parseWaypoints(rawOptions["waypoints"] as? List<Map<String, Any?>>)
219
229
 
220
- val strategy = resolveDriveStrategy(navi, options)
230
+ val strategy = resolveDriveStrategy(navi, rawOptions)
221
231
 
222
232
  navi.independentCalculateRoute(
223
233
  fromPoi, toPoi, waypoints, strategy,
@@ -393,4 +403,8 @@ class IndependentRouteService(
393
403
  else -> type
394
404
  }
395
405
  }
406
+
407
+ private fun ReadableArguments.toPlainMap(): Map<String, Any?> {
408
+ return keys().associateWith { key -> get(key) }
409
+ }
396
410
  }