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.
- package/README.md +296 -7
- package/android/build.gradle +12 -4
- package/android/src/main/AndroidManifest.xml +10 -1
- package/android/src/main/cpp/cluster_jni.cpp +56 -0
- package/android/src/main/java/expo/modules/gaodemap/map/ExpoGaodeMapModule.kt +49 -8
- package/android/src/main/java/expo/modules/gaodemap/map/ExpoGaodeMapOfflineModule.kt +83 -15
- package/android/src/main/java/expo/modules/gaodemap/map/ExpoGaodeMapView.kt +13 -3
- package/android/src/main/java/expo/modules/gaodemap/map/managers/UIManager.kt +36 -39
- package/android/src/main/java/expo/modules/gaodemap/map/modules/SDKInitializer.kt +23 -17
- package/android/src/main/java/expo/modules/gaodemap/map/overlays/ClusterView.kt +5 -2
- package/android/src/main/java/expo/modules/gaodemap/map/overlays/HeatMapView.kt +122 -10
- package/android/src/main/java/expo/modules/gaodemap/map/overlays/HeatMapViewModule.kt +2 -2
- package/android/src/main/java/expo/modules/gaodemap/map/overlays/MarkerView.kt +37 -25
- package/android/src/main/java/expo/modules/gaodemap/map/overlays/MarkerViewModule.kt +6 -6
- package/android/src/main/java/expo/modules/gaodemap/map/search/ExpoGaodeMapSearchModule.kt +751 -0
- package/android/src/main/java/expo/modules/gaodemap/map/utils/GeometryUtils.kt +103 -0
- package/android/src/main/java/expo/modules/gaodemap/navigation/ExpoGaodeMapNaviView.kt +1408 -394
- package/android/src/main/java/expo/modules/gaodemap/navigation/ExpoGaodeMapNaviViewModule.kt +121 -1
- package/android/src/main/java/expo/modules/gaodemap/navigation/ExpoGaodeMapNavigationModule.kt +14 -28
- package/android/src/main/java/expo/modules/gaodemap/navigation/listeners/IndependentRouteListener.kt +28 -3
- package/android/src/main/java/expo/modules/gaodemap/navigation/listeners/RouteCalculateListener.kt +2 -2
- package/android/src/main/java/expo/modules/gaodemap/navigation/managers/IndependentRouteManager.kt +114 -15
- package/android/src/main/java/expo/modules/gaodemap/navigation/routes/drive/DriveTruckRouteCalculator.kt +24 -35
- package/android/src/main/java/expo/modules/gaodemap/navigation/services/IndependentRouteService.kt +50 -36
- package/android/src/main/java/expo/modules/gaodemap/navigation/services/NavigationForegroundService.kt +661 -0
- package/android/src/main/java/expo/modules/gaodemap/navigation/utils/Converters.kt +21 -12
- package/android/src/main/res/drawable/ic_nav_notification_small.xml +10 -0
- package/android/src/main/res/drawable/landback_0.png +0 -0
- package/android/src/main/res/drawable/landback_1.png +0 -0
- package/android/src/main/res/drawable/landback_2.png +0 -0
- package/android/src/main/res/drawable/landback_3.png +0 -0
- package/android/src/main/res/drawable/landback_4.png +0 -0
- package/android/src/main/res/drawable/landback_5.png +0 -0
- package/android/src/main/res/drawable/landback_6.png +0 -0
- package/android/src/main/res/drawable/landback_7.png +0 -0
- package/android/src/main/res/drawable/landback_8.png +0 -0
- package/android/src/main/res/drawable/landback_9.png +0 -0
- package/android/src/main/res/drawable/landback_a.png +0 -0
- package/android/src/main/res/drawable/landback_b.png +0 -0
- package/android/src/main/res/drawable/landback_c.png +0 -0
- package/android/src/main/res/drawable/landback_d.png +0 -0
- package/android/src/main/res/drawable/landback_e.png +0 -0
- package/android/src/main/res/drawable/landback_f.png +0 -0
- package/android/src/main/res/drawable/landback_g.png +0 -0
- package/android/src/main/res/drawable/landback_h.png +0 -0
- package/android/src/main/res/drawable/landback_i.png +0 -0
- package/android/src/main/res/drawable/landback_j.png +0 -0
- package/android/src/main/res/drawable/landback_k.png +0 -0
- package/android/src/main/res/drawable/landback_l.png +0 -0
- package/android/src/main/res/drawable/landfront_0.png +0 -0
- package/android/src/main/res/drawable/landfront_00.png +0 -0
- package/android/src/main/res/drawable/landfront_1.png +0 -0
- package/android/src/main/res/drawable/landfront_11.png +0 -0
- package/android/src/main/res/drawable/landfront_20.png +0 -0
- package/android/src/main/res/drawable/landfront_21.png +0 -0
- package/android/src/main/res/drawable/landfront_22.png +0 -0
- package/android/src/main/res/drawable/landfront_3.png +0 -0
- package/android/src/main/res/drawable/landfront_33.png +0 -0
- package/android/src/main/res/drawable/landfront_40.png +0 -0
- package/android/src/main/res/drawable/landfront_43.png +0 -0
- package/android/src/main/res/drawable/landfront_44.png +0 -0
- package/android/src/main/res/drawable/landfront_5.png +0 -0
- package/android/src/main/res/drawable/landfront_55.png +0 -0
- package/android/src/main/res/drawable/landfront_61.png +0 -0
- package/android/src/main/res/drawable/landfront_63.png +0 -0
- package/android/src/main/res/drawable/landfront_66.png +0 -0
- package/android/src/main/res/drawable/landfront_70.png +0 -0
- package/android/src/main/res/drawable/landfront_71.png +0 -0
- package/android/src/main/res/drawable/landfront_73.png +0 -0
- package/android/src/main/res/drawable/landfront_77.png +0 -0
- package/android/src/main/res/drawable/landfront_8.png +0 -0
- package/android/src/main/res/drawable/landfront_88.png +0 -0
- package/android/src/main/res/drawable/landfront_90.png +0 -0
- package/android/src/main/res/drawable/landfront_95.png +0 -0
- package/android/src/main/res/drawable/landfront_99.png +0 -0
- package/android/src/main/res/drawable/landfront_a0.png +0 -0
- package/android/src/main/res/drawable/landfront_a8.png +0 -0
- package/android/src/main/res/drawable/landfront_aa.png +0 -0
- package/android/src/main/res/drawable/landfront_b1.png +0 -0
- package/android/src/main/res/drawable/landfront_b5.png +0 -0
- package/android/src/main/res/drawable/landfront_bb.png +0 -0
- package/android/src/main/res/drawable/landfront_c3.png +0 -0
- package/android/src/main/res/drawable/landfront_c8.png +0 -0
- package/android/src/main/res/drawable/landfront_cc.png +0 -0
- package/android/src/main/res/drawable/landfront_d.png +0 -0
- package/android/src/main/res/drawable/landfront_dd.png +0 -0
- package/android/src/main/res/drawable/landfront_e1.png +0 -0
- package/android/src/main/res/drawable/landfront_e5.png +0 -0
- package/android/src/main/res/drawable/landfront_ee.png +0 -0
- package/android/src/main/res/drawable/landfront_f0.png +0 -0
- package/android/src/main/res/drawable/landfront_f1.png +0 -0
- package/android/src/main/res/drawable/landfront_f5.png +0 -0
- package/android/src/main/res/drawable/landfront_ff.png +0 -0
- package/android/src/main/res/drawable/landfront_g3.png +0 -0
- package/android/src/main/res/drawable/landfront_g5.png +0 -0
- package/android/src/main/res/drawable/landfront_gg.png +0 -0
- package/android/src/main/res/drawable/landfront_h1.png +0 -0
- package/android/src/main/res/drawable/landfront_h3.png +0 -0
- package/android/src/main/res/drawable/landfront_h5.png +0 -0
- package/android/src/main/res/drawable/landfront_hh.png +0 -0
- package/android/src/main/res/drawable/landfront_i0.png +0 -0
- package/android/src/main/res/drawable/landfront_i3.png +0 -0
- package/android/src/main/res/drawable/landfront_i5.png +0 -0
- package/android/src/main/res/drawable/landfront_ii.png +0 -0
- package/android/src/main/res/drawable/landfront_j1.png +0 -0
- package/android/src/main/res/drawable/landfront_j8.png +0 -0
- package/android/src/main/res/drawable/landfront_jj.png +0 -0
- package/android/src/main/res/drawable/landfront_kk.png +0 -0
- package/android/src/main/res/drawable/landfront_ll.png +0 -0
- package/android/src/main/res/drawable/nav_notification_brand_icon.xml +16 -0
- package/android/src/main/res/drawable/navi_arrow_leftline.png +0 -0
- package/android/src/main/res/drawable/navi_lane_shape_bg_center.xml +5 -0
- package/android/src/main/res/drawable/navi_lane_shape_bg_left.xml +8 -0
- package/android/src/main/res/drawable/navi_lane_shape_bg_over.xml +6 -0
- package/android/src/main/res/drawable/navi_lane_shape_bg_right.xml +8 -0
- package/android/src/main/res/drawable-nodpi/nav_tracker_car.png +0 -0
- package/build/ExpoGaodeMapNaviView.d.ts +16 -0
- package/build/ExpoGaodeMapNaviView.d.ts.map +1 -1
- package/build/ExpoGaodeMapNaviView.js +74 -1
- package/build/ExpoGaodeMapNaviView.js.map +1 -1
- package/build/index.d.ts +56 -8
- package/build/index.d.ts.map +1 -1
- package/build/index.js +452 -10
- package/build/index.js.map +1 -1
- package/build/map/ExpoGaodeMapModule.d.ts +15 -13
- package/build/map/ExpoGaodeMapModule.d.ts.map +1 -1
- package/build/map/ExpoGaodeMapModule.js +31 -39
- package/build/map/ExpoGaodeMapModule.js.map +1 -1
- package/build/map/ExpoGaodeMapOfflineModule.d.ts +5 -0
- package/build/map/ExpoGaodeMapOfflineModule.d.ts.map +1 -1
- package/build/map/ExpoGaodeMapOfflineModule.js.map +1 -1
- package/build/map/ExpoGaodeMapView.d.ts +3 -4
- package/build/map/ExpoGaodeMapView.d.ts.map +1 -1
- package/build/map/ExpoGaodeMapView.js +28 -25
- package/build/map/ExpoGaodeMapView.js.map +1 -1
- package/build/map/components/overlays/Circle.d.ts.map +1 -1
- package/build/map/components/overlays/Circle.js +1 -30
- package/build/map/components/overlays/Circle.js.map +1 -1
- package/build/map/components/overlays/Cluster.d.ts.map +1 -1
- package/build/map/components/overlays/Cluster.js +1 -42
- package/build/map/components/overlays/Cluster.js.map +1 -1
- package/build/map/components/overlays/HeatMap.d.ts.map +1 -1
- package/build/map/components/overlays/HeatMap.js +21 -21
- package/build/map/components/overlays/HeatMap.js.map +1 -1
- package/build/map/components/overlays/Marker.d.ts.map +1 -1
- package/build/map/components/overlays/Marker.js +76 -80
- package/build/map/components/overlays/Marker.js.map +1 -1
- package/build/map/components/overlays/Polygon.d.ts.map +1 -1
- package/build/map/components/overlays/Polygon.js +1 -25
- package/build/map/components/overlays/Polygon.js.map +1 -1
- package/build/map/components/overlays/Polyline.d.ts.map +1 -1
- package/build/map/components/overlays/Polyline.js +1 -31
- package/build/map/components/overlays/Polyline.js.map +1 -1
- package/build/map/index.d.ts +9 -2
- package/build/map/index.d.ts.map +1 -1
- package/build/map/index.js +9 -2
- package/build/map/index.js.map +1 -1
- package/build/map/search/ExpoGaodeMapSearch.types.d.ts +340 -0
- package/build/map/search/ExpoGaodeMapSearch.types.d.ts.map +1 -0
- package/build/map/search/ExpoGaodeMapSearch.types.js +19 -0
- package/build/map/search/ExpoGaodeMapSearch.types.js.map +1 -0
- package/build/map/search/ExpoGaodeMapSearchModule.d.ts +74 -0
- package/build/map/search/ExpoGaodeMapSearchModule.d.ts.map +1 -0
- package/build/map/search/ExpoGaodeMapSearchModule.js +47 -0
- package/build/map/search/ExpoGaodeMapSearchModule.js.map +1 -0
- package/build/map/search/index.d.ts +156 -0
- package/build/map/search/index.d.ts.map +1 -0
- package/build/map/search/index.js +171 -0
- package/build/map/search/index.js.map +1 -0
- package/build/map/types/index.d.ts +2 -2
- package/build/map/types/index.d.ts.map +1 -1
- package/build/map/types/index.js.map +1 -1
- package/build/map/types/map-view.types.d.ts +4 -2
- package/build/map/types/map-view.types.d.ts.map +1 -1
- package/build/map/types/map-view.types.js.map +1 -1
- package/build/map/types/native-module.types.d.ts +11 -12
- package/build/map/types/native-module.types.d.ts.map +1 -1
- package/build/map/types/native-module.types.js.map +1 -1
- package/build/map/types/overlays.types.d.ts +9 -14
- package/build/map/types/overlays.types.d.ts.map +1 -1
- package/build/map/types/overlays.types.js.map +1 -1
- package/build/map/types/route-playback.types.d.ts +16 -0
- package/build/map/types/route-playback.types.d.ts.map +1 -1
- package/build/map/types/route-playback.types.js.map +1 -1
- package/build/map/utils/ErrorHandler.js +11 -11
- package/build/map/utils/ErrorHandler.js.map +1 -1
- package/build/map/utils/OfflineMapManager.d.ts +4 -0
- package/build/map/utils/OfflineMapManager.d.ts.map +1 -1
- package/build/map/utils/OfflineMapManager.js +6 -0
- package/build/map/utils/OfflineMapManager.js.map +1 -1
- package/build/types/coordinates.types.d.ts +3 -0
- package/build/types/coordinates.types.d.ts.map +1 -1
- package/build/types/coordinates.types.js.map +1 -1
- package/build/types/independent.types.d.ts +111 -12
- package/build/types/independent.types.d.ts.map +1 -1
- package/build/types/independent.types.js.map +1 -1
- package/build/types/native-module.types.d.ts +1 -1
- package/build/types/native-module.types.js.map +1 -1
- package/build/types/naviview.types.d.ts +304 -14
- package/build/types/naviview.types.d.ts.map +1 -1
- package/build/types/naviview.types.js.map +1 -1
- package/build/types/route.types.d.ts +12 -2
- package/build/types/route.types.d.ts.map +1 -1
- package/build/types/route.types.js.map +1 -1
- package/expo-module.config.json +4 -2
- package/ios/ExpoGaodeMapNaviView.swift +2331 -201
- package/ios/ExpoGaodeMapNaviViewModule.swift +109 -1
- package/ios/ExpoGaodeMapNavigation.podspec +2 -1
- package/ios/ExpoGaodeMapNavigationModule.swift +7 -5
- package/ios/managers/IndependentRouteManager.swift +90 -26
- package/ios/map/ExpoGaodeMapModule.swift +72 -21
- package/ios/map/ExpoGaodeMapOfflineModule.swift +61 -0
- package/ios/map/ExpoGaodeMapSearchModule.swift +773 -0
- package/ios/map/ExpoGaodeMapView.swift +23 -5
- package/ios/map/GaodeMapPrivacyManager.swift +26 -18
- package/ios/map/cpp/GeometryEngine.cpp +112 -0
- package/ios/map/cpp/GeometryEngine.hpp +21 -0
- package/ios/map/modules/LocationManager.swift +37 -5
- package/ios/map/overlays/MarkerView.swift +11 -11
- package/ios/map/overlays/MarkerViewModule.swift +4 -4
- package/ios/map/overlays/PolylineView.swift +6 -12
- package/ios/map/utils/ClusterNative.h +8 -0
- package/ios/map/utils/ClusterNative.mm +27 -0
- package/ios/map/utils/PermissionManager.swift +115 -6
- package/ios/routes/drive/DriveTruckRouteCalculator.swift +165 -77
- package/ios/routes/walkride/WalkRideRouteCalculator.swift +127 -1
- package/ios/services/IndependentRouteService.swift +198 -39
- package/ios/services/NavigationLiveActivityAttributes.swift +48 -0
- package/ios/services/NavigationLiveActivityManager.swift +359 -0
- package/package.json +22 -7
- package/plugin/build/withGaodeMap.d.ts +8 -0
- package/plugin/build/withGaodeMap.js +60 -4
- package/scripts/check-expo-modules.js +68 -0
- package/shared/cpp/GeometryEngine.cpp +112 -0
- package/shared/cpp/GeometryEngine.hpp +21 -0
- package/widget-template/README.md +46 -0
- package/widget-template/ios/NavigationLiveActivityWidget.swift +367 -0
- package/android/src/main/java/expo/modules/gaodemap/navigation/managers/RouteCalculator.kt +0 -173
|
@@ -40,18 +40,35 @@ class IndependentRouteService: NSObject {
|
|
|
40
40
|
rideManager = AMapNaviRideManager.sharedInstance()
|
|
41
41
|
rideManager?.delegate = self
|
|
42
42
|
}
|
|
43
|
+
|
|
44
|
+
private func bindDriveManagerDelegate() {
|
|
45
|
+
driveManager = AMapNaviDriveManager.sharedInstance()
|
|
46
|
+
driveManager?.delegate = self
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
private func bindWalkManagerDelegate() {
|
|
50
|
+
walkManager = AMapNaviWalkManager.sharedInstance()
|
|
51
|
+
walkManager?.delegate = self
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
private func bindRideManagerDelegate() {
|
|
55
|
+
rideManager = AMapNaviRideManager.sharedInstance()
|
|
56
|
+
rideManager?.delegate = self
|
|
57
|
+
}
|
|
43
58
|
|
|
44
59
|
// MARK: - 独立驾车路线规划
|
|
45
60
|
func independentDriveRoute(options: [String: Any], promise: Promise) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
promise.reject("INVALID_PARAMS", "
|
|
61
|
+
bindDriveManagerDelegate()
|
|
62
|
+
guard let to = options["to"] as? [String: Any] else {
|
|
63
|
+
promise.reject("INVALID_PARAMS", "to is required")
|
|
49
64
|
return
|
|
50
65
|
}
|
|
51
66
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
67
|
+
let from = options["from"] as? [String: Any]
|
|
68
|
+
let startPOIInfo = Converters.parseNaviPOIInfo(from)
|
|
69
|
+
|
|
70
|
+
guard let endPOIInfo = Converters.parseNaviPOIInfo(to) else {
|
|
71
|
+
promise.reject("INVALID_COORDS", "Invalid destination coordinates or POI info")
|
|
55
72
|
return
|
|
56
73
|
}
|
|
57
74
|
|
|
@@ -66,7 +83,7 @@ class IndependentRouteService: NSObject {
|
|
|
66
83
|
|
|
67
84
|
let strategyValue = resolveDriveStrategyValue(options: options)
|
|
68
85
|
let strategy = AMapNaviDrivingStrategy(rawValue: strategyValue)
|
|
69
|
-
?? AMapNaviDrivingStrategy.
|
|
86
|
+
?? AMapNaviDrivingStrategy.drivingStrategyMultipleDefault
|
|
70
87
|
let token = independentRouteManager.generateToken()
|
|
71
88
|
|
|
72
89
|
let success = driveManager?.independentCalculateDriveRoute(
|
|
@@ -98,6 +115,7 @@ class IndependentRouteService: NSObject {
|
|
|
98
115
|
|
|
99
116
|
// MARK: - 独立货车路线规划
|
|
100
117
|
func independentTruckRoute(options: [String: Any], promise: Promise) {
|
|
118
|
+
bindDriveManagerDelegate()
|
|
101
119
|
var truckOptions = options
|
|
102
120
|
if truckOptions["carType"] == nil && (truckOptions["vehicleInfo"] as? [String: Any]) == nil {
|
|
103
121
|
truckOptions["carType"] = 1
|
|
@@ -107,60 +125,117 @@ class IndependentRouteService: NSObject {
|
|
|
107
125
|
|
|
108
126
|
// MARK: - 独立步行路线规划
|
|
109
127
|
func independentWalkRoute(options: [String: Any], promise: Promise) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
promise.reject("INVALID_PARAMS", "
|
|
128
|
+
bindWalkManagerDelegate()
|
|
129
|
+
guard let to = options["to"] as? [String: Any] else {
|
|
130
|
+
promise.reject("INVALID_PARAMS", "to is required")
|
|
113
131
|
return
|
|
114
132
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
133
|
+
|
|
134
|
+
let from = options["from"] as? [String: Any]
|
|
135
|
+
let startPOIInfo = Converters.parseNaviPOIInfo(from)
|
|
136
|
+
|
|
137
|
+
guard let endPOIInfo = Converters.parseNaviPOIInfo(to) else {
|
|
138
|
+
promise.reject("INVALID_COORDS", "Invalid destination coordinates or POI info")
|
|
119
139
|
return
|
|
120
140
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
141
|
+
|
|
142
|
+
let wayPOIInfos: [AMapNaviPOIInfo]? = {
|
|
143
|
+
guard let waypoints = options["waypoints"] as? [[String: Any]] else { return nil }
|
|
144
|
+
return Converters.parseNaviPOIInfos(waypoints)
|
|
145
|
+
}()
|
|
146
|
+
|
|
147
|
+
let strategy = resolveTravelStrategy(options: options)
|
|
148
|
+
let token = independentRouteManager.generateToken()
|
|
149
|
+
|
|
150
|
+
let success = walkManager?.independentCalculateWalkRoute(
|
|
151
|
+
withStart: startPOIInfo,
|
|
152
|
+
end: endPOIInfo,
|
|
153
|
+
wayPOIInfos: wayPOIInfos,
|
|
154
|
+
strategy: strategy,
|
|
155
|
+
callback: { [weak self] routeGroup, error in
|
|
156
|
+
guard let self else { return }
|
|
157
|
+
if let error = error {
|
|
158
|
+
promise.reject("CALCULATE_FAILED", error.localizedDescription)
|
|
159
|
+
return
|
|
160
|
+
}
|
|
161
|
+
guard let routeGroup = routeGroup else {
|
|
162
|
+
promise.reject("CALCULATE_FAILED", "独立步行算路成功回调未返回 routeGroup")
|
|
163
|
+
return
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
self.independentRouteManager.storeRouteGroup(token: token, scene: "walk", routeGroup: routeGroup)
|
|
167
|
+
let result = self.convertIndependentTravelResult(
|
|
168
|
+
routeGroup: routeGroup,
|
|
169
|
+
token: token,
|
|
170
|
+
scene: "walk"
|
|
171
|
+
)
|
|
172
|
+
promise.resolve(result)
|
|
173
|
+
}
|
|
174
|
+
) ?? false
|
|
175
|
+
|
|
128
176
|
if !success {
|
|
129
|
-
currentPromise = nil
|
|
130
|
-
currentToken = nil
|
|
131
177
|
promise.reject("CALCULATE_FAILED", "独立步行路线规划启动失败")
|
|
132
178
|
}
|
|
133
179
|
}
|
|
134
180
|
|
|
135
181
|
// MARK: - 独立骑行路线规划
|
|
136
182
|
func independentRideRoute(options: [String: Any], promise: Promise) {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
promise.reject("INVALID_PARAMS", "
|
|
183
|
+
bindRideManagerDelegate()
|
|
184
|
+
guard let to = options["to"] as? [String: Any] else {
|
|
185
|
+
promise.reject("INVALID_PARAMS", "to is required")
|
|
140
186
|
return
|
|
141
187
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
188
|
+
|
|
189
|
+
let from = options["from"] as? [String: Any]
|
|
190
|
+
let startPOIInfo = Converters.parseNaviPOIInfo(from)
|
|
191
|
+
|
|
192
|
+
guard let endPOIInfo = Converters.parseNaviPOIInfo(to) else {
|
|
193
|
+
promise.reject("INVALID_COORDS", "Invalid destination coordinates or POI info")
|
|
146
194
|
return
|
|
147
195
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
196
|
+
|
|
197
|
+
let wayPOIInfos: [AMapNaviPOIInfo]? = {
|
|
198
|
+
guard let waypoints = options["waypoints"] as? [[String: Any]] else { return nil }
|
|
199
|
+
return Converters.parseNaviPOIInfos(waypoints)
|
|
200
|
+
}()
|
|
201
|
+
|
|
202
|
+
let strategy = resolveTravelStrategy(options: options)
|
|
203
|
+
let token = independentRouteManager.generateToken()
|
|
204
|
+
|
|
205
|
+
let success = rideManager?.independentCalculateRideRoute(
|
|
206
|
+
withStart: startPOIInfo,
|
|
207
|
+
end: endPOIInfo,
|
|
208
|
+
wayPOIInfos: wayPOIInfos ?? [],
|
|
209
|
+
strategy: strategy,
|
|
210
|
+
callback: { [weak self] routeGroup, error in
|
|
211
|
+
guard let self else { return }
|
|
212
|
+
if let error = error {
|
|
213
|
+
promise.reject("CALCULATE_FAILED", error.localizedDescription)
|
|
214
|
+
return
|
|
215
|
+
}
|
|
216
|
+
guard let routeGroup = routeGroup else {
|
|
217
|
+
promise.reject("CALCULATE_FAILED", "独立骑行算路成功回调未返回 routeGroup")
|
|
218
|
+
return
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
self.independentRouteManager.storeRouteGroup(token: token, scene: "ride", routeGroup: routeGroup)
|
|
222
|
+
let result = self.convertIndependentTravelResult(
|
|
223
|
+
routeGroup: routeGroup,
|
|
224
|
+
token: token,
|
|
225
|
+
scene: "ride"
|
|
226
|
+
)
|
|
227
|
+
promise.resolve(result)
|
|
228
|
+
}
|
|
229
|
+
) ?? false
|
|
230
|
+
|
|
155
231
|
if !success {
|
|
156
|
-
currentPromise = nil
|
|
157
|
-
currentToken = nil
|
|
158
232
|
promise.reject("CALCULATE_FAILED", "独立骑行路线规划启动失败")
|
|
159
233
|
}
|
|
160
234
|
}
|
|
161
235
|
|
|
162
236
|
// MARK: - 独立摩托车路线规划(使用驾车接口)
|
|
163
237
|
func independentMotorcycleRoute(options: [String: Any], promise: Promise) {
|
|
238
|
+
bindDriveManagerDelegate()
|
|
164
239
|
var motorcycleOptions = options
|
|
165
240
|
if motorcycleOptions["carType"] == nil {
|
|
166
241
|
motorcycleOptions["carType"] = 11
|
|
@@ -240,6 +315,82 @@ class IndependentRouteService: NSObject {
|
|
|
240
315
|
return hasAnyValue ? naviVehicleInfo : nil
|
|
241
316
|
}
|
|
242
317
|
|
|
318
|
+
private func resolveTravelStrategy(options: [String: Any]) -> AMapNaviTravelStrategy {
|
|
319
|
+
if let rawValue = intValue(options["travelStrategy"]),
|
|
320
|
+
let strategy = AMapNaviTravelStrategy(rawValue: rawValue) {
|
|
321
|
+
return strategy
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
if (options["multiple"] as? Bool) == true {
|
|
325
|
+
return .multipleDefault
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
return .singleDefault
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
private func convertIndependentTravelResult(
|
|
332
|
+
routeGroup: AMapNaviRouteGroup,
|
|
333
|
+
token: Int,
|
|
334
|
+
scene: String
|
|
335
|
+
) -> [String: Any] {
|
|
336
|
+
let orderedRouteIds = routeGroup.naviRouteIDs?.map { $0.intValue } ?? []
|
|
337
|
+
var routes: [[String: Any]] = []
|
|
338
|
+
|
|
339
|
+
if let naviRoutes = routeGroup.naviRoutes {
|
|
340
|
+
let fallbackIds = naviRoutes.keys.map { $0.intValue }.sorted()
|
|
341
|
+
let routeIds = orderedRouteIds.isEmpty ? fallbackIds : orderedRouteIds
|
|
342
|
+
for routeId in routeIds {
|
|
343
|
+
let key = NSNumber(value: routeId)
|
|
344
|
+
guard let route = naviRoutes[key] else { continue }
|
|
345
|
+
routes.append([
|
|
346
|
+
"id": routeId,
|
|
347
|
+
"routeId": routeId,
|
|
348
|
+
"distance": route.routeLength,
|
|
349
|
+
"duration": route.routeTime,
|
|
350
|
+
"strategy": buildTravelRouteStrategyLabel(scene: scene, routeId: routeId),
|
|
351
|
+
"polyline": extractCoordinates(from: route)
|
|
352
|
+
])
|
|
353
|
+
}
|
|
354
|
+
} else if let route = routeGroup.naviRoute {
|
|
355
|
+
let routeId = routeGroup.naviRouteID
|
|
356
|
+
routes.append([
|
|
357
|
+
"id": routeId,
|
|
358
|
+
"routeId": routeId,
|
|
359
|
+
"distance": route.routeLength,
|
|
360
|
+
"duration": route.routeTime,
|
|
361
|
+
"strategy": scene == "ride" ? "骑行路线" : "步行路线",
|
|
362
|
+
"polyline": extractCoordinates(from: route)
|
|
363
|
+
])
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
let finalRouteIds = orderedRouteIds.isEmpty ? routes.compactMap { $0["routeId"] as? Int } : orderedRouteIds
|
|
367
|
+
let mainRouteId = routeGroup.naviRouteID
|
|
368
|
+
let mainPathIndex = finalRouteIds.firstIndex(of: mainRouteId) ?? 0
|
|
369
|
+
|
|
370
|
+
return [
|
|
371
|
+
"success": true,
|
|
372
|
+
"independent": true,
|
|
373
|
+
"token": token,
|
|
374
|
+
"count": routes.count,
|
|
375
|
+
"mainPathIndex": mainPathIndex,
|
|
376
|
+
"routeIds": finalRouteIds,
|
|
377
|
+
"routes": routes
|
|
378
|
+
]
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
private func buildTravelRouteStrategyLabel(scene: String, routeId: Int) -> String {
|
|
382
|
+
switch routeId {
|
|
383
|
+
case 12:
|
|
384
|
+
return "推荐"
|
|
385
|
+
case 13:
|
|
386
|
+
return scene == "ride" ? "时间短" : "步行便捷"
|
|
387
|
+
case 14:
|
|
388
|
+
return scene == "ride" ? "距离短" : "少换向"
|
|
389
|
+
default:
|
|
390
|
+
return scene == "ride" ? "骑行路线" : "步行路线"
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
|
|
243
394
|
private func convertIndependentDriveResult(
|
|
244
395
|
routeGroup: AMapNaviRouteGroup,
|
|
245
396
|
token: Int
|
|
@@ -254,10 +405,12 @@ class IndependentRouteService: NSObject {
|
|
|
254
405
|
let key = NSNumber(value: routeId)
|
|
255
406
|
guard let route = naviRoutes[key] else { continue }
|
|
256
407
|
routes.append([
|
|
408
|
+
"id": routeId,
|
|
257
409
|
"routeId": routeId,
|
|
258
410
|
"distance": route.routeLength,
|
|
259
411
|
"duration": route.routeTime,
|
|
260
412
|
"tollCost": route.routeTollCost,
|
|
413
|
+
"trafficLightCount": route.routeTrafficLightCount,
|
|
261
414
|
"strategy": "推荐路线",
|
|
262
415
|
"polyline": extractCoordinates(from: route)
|
|
263
416
|
])
|
|
@@ -265,10 +418,12 @@ class IndependentRouteService: NSObject {
|
|
|
265
418
|
} else if let route = routeGroup.naviRoute {
|
|
266
419
|
let routeId = routeGroup.naviRouteID
|
|
267
420
|
routes.append([
|
|
421
|
+
"id": routeId,
|
|
268
422
|
"routeId": routeId,
|
|
269
423
|
"distance": route.routeLength,
|
|
270
424
|
"duration": route.routeTime,
|
|
271
425
|
"tollCost": route.routeTollCost,
|
|
426
|
+
"trafficLightCount": route.routeTrafficLightCount,
|
|
272
427
|
"strategy": "推荐路线",
|
|
273
428
|
"polyline": extractCoordinates(from: route)
|
|
274
429
|
])
|
|
@@ -326,10 +481,12 @@ extension IndependentRouteService: AMapNaviDriveManagerDelegate {
|
|
|
326
481
|
for routeID in routeIDs {
|
|
327
482
|
if let route = driveManager.naviRoutes?[routeID] {
|
|
328
483
|
routes.append([
|
|
484
|
+
"id": routeID.intValue,
|
|
329
485
|
"routeId": routeID.intValue,
|
|
330
486
|
"distance": route.routeLength,
|
|
331
487
|
"duration": route.routeTime,
|
|
332
488
|
"tollCost": route.routeTollCost,
|
|
489
|
+
"trafficLightCount": route.routeTrafficLightCount,
|
|
333
490
|
"strategy": "推荐路线",
|
|
334
491
|
"polyline": extractCoordinates(from: route)
|
|
335
492
|
])
|
|
@@ -365,6 +522,7 @@ extension IndependentRouteService: AMapNaviWalkManagerDelegate {
|
|
|
365
522
|
var routes: [[String: Any]] = []
|
|
366
523
|
if let naviRoute = walkManager.naviRoute {
|
|
367
524
|
routes.append([
|
|
525
|
+
"id": 1,
|
|
368
526
|
"routeId": 1,
|
|
369
527
|
"distance": naviRoute.routeLength,
|
|
370
528
|
"duration": naviRoute.routeTime,
|
|
@@ -401,6 +559,7 @@ extension IndependentRouteService: AMapNaviRideManagerDelegate {
|
|
|
401
559
|
var routes: [[String: Any]] = []
|
|
402
560
|
if let naviRoute = rideManager.naviRoute {
|
|
403
561
|
routes.append([
|
|
562
|
+
"id": 1,
|
|
404
563
|
"routeId": 1,
|
|
405
564
|
"distance": naviRoute.routeLength,
|
|
406
565
|
"duration": naviRoute.routeTime,
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
|
|
3
|
+
#if canImport(ActivityKit)
|
|
4
|
+
import ActivityKit
|
|
5
|
+
|
|
6
|
+
@available(iOS 16.1, *)
|
|
7
|
+
public struct NavigationLiveActivityAttributes: ActivityAttributes {
|
|
8
|
+
public struct ContentState: Codable, Hashable {
|
|
9
|
+
public var currentRoadName: String
|
|
10
|
+
public var nextRoadName: String
|
|
11
|
+
public var pathRetainDistance: Int
|
|
12
|
+
public var routeTotalDistance: Int
|
|
13
|
+
public var pathRetainTime: Int
|
|
14
|
+
public var curStepRetainDistance: Int
|
|
15
|
+
public var iconType: Int
|
|
16
|
+
public var turnIconBase64: String?
|
|
17
|
+
public var updatedAt: Date
|
|
18
|
+
|
|
19
|
+
public init(
|
|
20
|
+
currentRoadName: String,
|
|
21
|
+
nextRoadName: String,
|
|
22
|
+
pathRetainDistance: Int,
|
|
23
|
+
routeTotalDistance: Int,
|
|
24
|
+
pathRetainTime: Int,
|
|
25
|
+
curStepRetainDistance: Int,
|
|
26
|
+
iconType: Int,
|
|
27
|
+
turnIconBase64: String? = nil,
|
|
28
|
+
updatedAt: Date
|
|
29
|
+
) {
|
|
30
|
+
self.currentRoadName = currentRoadName
|
|
31
|
+
self.nextRoadName = nextRoadName
|
|
32
|
+
self.pathRetainDistance = pathRetainDistance
|
|
33
|
+
self.routeTotalDistance = routeTotalDistance
|
|
34
|
+
self.pathRetainTime = pathRetainTime
|
|
35
|
+
self.curStepRetainDistance = curStepRetainDistance
|
|
36
|
+
self.iconType = iconType
|
|
37
|
+
self.turnIconBase64 = turnIconBase64
|
|
38
|
+
self.updatedAt = updatedAt
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
public var appName: String
|
|
43
|
+
|
|
44
|
+
public init(appName: String) {
|
|
45
|
+
self.appName = appName
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
#endif
|