expo-gaode-map-navigation 2.0.10-next.0 → 2.0.11-next.0
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 +24 -0
- package/build/types/route.types.d.ts +7 -1
- package/build/types/route.types.d.ts.map +1 -1
- package/build/types/route.types.js.map +1 -1
- package/ios/ExpoGaodeMapNaviView.swift +32 -1
- package/ios/ExpoGaodeMapNavigationModule.swift +80 -3
- package/ios/services/IndependentRouteService.swift +186 -44
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -219,6 +219,30 @@ await startNaviWithIndependentPath({
|
|
|
219
219
|
});
|
|
220
220
|
```
|
|
221
221
|
|
|
222
|
+
### 官方导航页(openOfficialNaviPage)
|
|
223
|
+
|
|
224
|
+
新增支持直接调起高德官方导航组件(Android: `AmapNaviPage`,iOS: `AMapNaviCompositeManager`)。
|
|
225
|
+
|
|
226
|
+
```typescript
|
|
227
|
+
import { openOfficialNaviPage } from 'expo-gaode-map-navigation';
|
|
228
|
+
|
|
229
|
+
await openOfficialNaviPage({
|
|
230
|
+
to: { latitude: 39.908823, longitude: 116.39747, name: '终点' }, // 必填
|
|
231
|
+
pageType: 'NAVI', // ROUTE | NAVI
|
|
232
|
+
startNaviDirectly: true,
|
|
233
|
+
naviMode: 2, // 1=实时导航, 2=模拟导航(官方组件)
|
|
234
|
+
theme: 'BLUE', // BLUE | WHITE | BLACK
|
|
235
|
+
trafficEnabled: true,
|
|
236
|
+
showCrossImage: true,
|
|
237
|
+
});
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
说明:
|
|
241
|
+
|
|
242
|
+
- 支持 Android / iOS 平台差异参数(如 `dayAndNightMode`、`broadcastMode`、`mapViewModeType`、`trackingMode` 等)。
|
|
243
|
+
- iOS 直接进导航页时需开启后台定位 `UIBackgroundModes: location`。
|
|
244
|
+
- Android 依赖 `AmapRouteActivity`,Config Plugin 会自动注入 Manifest。
|
|
245
|
+
|
|
222
246
|
### 地图组件 (Map)
|
|
223
247
|
|
|
224
248
|
模块导出了完整的地图组件,与 `expo-gaode-map` API 保持一致。
|
|
@@ -191,8 +191,10 @@ export interface OfficialNaviPageOptions {
|
|
|
191
191
|
routeStrategy?: number;
|
|
192
192
|
/** 是否直接进入导航页(iOS 对应 `setStartNaviDirectly`) */
|
|
193
193
|
startNaviDirectly?: boolean;
|
|
194
|
-
/**
|
|
194
|
+
/** 直接导航模式(仅直接进导航页时生效):1 实时 / 2 模拟 */
|
|
195
195
|
naviMode?: number;
|
|
196
|
+
/** iOS 直接导航模式(可选,优先级高于 naviMode) */
|
|
197
|
+
iosNaviMode?: number;
|
|
196
198
|
needCalculateRouteWhenPresent?: boolean;
|
|
197
199
|
/** 退出导航页时是否销毁 DriveManager 实例,默认 false */
|
|
198
200
|
needDestroyDriveManagerInstanceWhenNaviExit?: boolean;
|
|
@@ -216,6 +218,10 @@ export interface OfficialNaviPageOptions {
|
|
|
216
218
|
truckMultipleRouteNaviMode?: boolean;
|
|
217
219
|
/** 是否显示鹰眼小地图 */
|
|
218
220
|
showEagleMap?: boolean;
|
|
221
|
+
/** iOS 是否显示电子眼距离(7.7.0+,具体以 SDK 版本为准) */
|
|
222
|
+
showCameraDistanceEnable?: boolean;
|
|
223
|
+
/** iOS 地图缩放比例(7.7.0+,具体以 SDK 版本为准) */
|
|
224
|
+
scaleFactor?: number;
|
|
219
225
|
/** 比例尺智能缩放是否开启 */
|
|
220
226
|
scaleAutoChangeEnable?: boolean;
|
|
221
227
|
/** 昼夜模式:0 自动 / 1 白天 / 2 夜间 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.types.d.ts","sourceRoot":"","sources":["../../src/types/route.types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"route.types.d.ts","sourceRoot":"","sources":["../../src/types/route.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.types.js","sourceRoot":"","sources":["../../src/types/route.types.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAN,IAAY,SAWX;AAXD,WAAY,SAAS;IACnB,aAAa;IACb,4BAAe,CAAA;IACf,aAAa;IACb,0BAAa,CAAA;IACb,aAAa;IACb,0BAAa,CAAA;IACb,WAAW;IACX,gCAAmB,CAAA;IACnB,aAAa;IACb,4BAAe,CAAA;AACjB,CAAC,EAXW,SAAS,KAAT,SAAS,QAWpB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,aAqBX;AArBD,WAAY,aAAa;IACvB,iBAAiB;IACjB,uDAAW,CAAA;IACX,wBAAwB;IACxB,2DAAa,CAAA;IACb,iBAAiB;IACjB,yDAAY,CAAA;IACZ,wBAAwB;IACxB,qEAAkB,CAAA;IAClB,mBAAmB;IACnB,yEAAoB,CAAA;IACpB,WAAW;IACX,6DAAc,CAAA;IACd,gBAAgB;IAChB,+FAA+B,CAAA;IAC/B,cAAc;IACd,mFAAyB,CAAA;IACzB,mBAAmB;IACnB,yGAAoC,CAAA;IACpC,cAAc;IACd,mFAAyB,CAAA;AAC3B,CAAC,EArBW,aAAa,KAAb,aAAa,QAqBxB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,WAAW;IACX,qDAAW,CAAA;AACb,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,YAOX;AAPD,WAAY,YAAY;IACtB,WAAW;IACX,qDAAW,CAAA;IACX,WAAW;IACX,qDAAW,CAAA;IACX,WAAW;IACX,uDAAY,CAAA;AACd,CAAC,EAPW,YAAY,KAAZ,YAAY,QAOvB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,SASX;AATD,WAAY,SAAS;IACnB,WAAW;IACX,yCAAQ,CAAA;IACR,WAAW;IACX,2CAAS,CAAA;IACT,WAAW;IACX,6CAAU,CAAA;IACV,WAAW;IACX,2CAAS,CAAA;AACX,CAAC,EATW,SAAS,KAAT,SAAS,QASpB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,0DAAa,CAAA;IACb,8DAAe,CAAA;AACjB,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB;AA6MD;;GAEG;AACH,MAAM,CAAN,IAAY,UAuBX;AAvBD,WAAY,UAAU;IACpB,SAAS;IACT,mDAAY,CAAA;IACZ,SAAS;IACT,2CAAQ,CAAA;IACR,SAAS;IACT,6CAAS,CAAA;IACT,YAAY;IACZ,uDAAc,CAAA;IACd,YAAY;IACZ,yDAAe,CAAA;IACf,YAAY;IACZ,qDAAa,CAAA;IACb,YAAY;IACZ,uDAAc,CAAA;IACd,WAAW;IACX,yDAAe,CAAA;IACf,YAAY;IACZ,+CAAU,CAAA;IACV,WAAW;IACX,mEAAoB,CAAA;IACpB,WAAW;IACX,kEAAoB,CAAA;AACtB,CAAC,EAvBW,UAAU,KAAV,UAAU,QAuBrB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,QAmBX;AAnBD,WAAY,QAAQ;IAClB,WAAW;IACX,6CAAW,CAAA;IACX,SAAS;IACT,yDAAiB,CAAA;IACjB,SAAS;IACT,6DAAmB,CAAA;IACnB,SAAS;IACT,qDAAe,CAAA;IACf,WAAW;IACX,yDAAiB,CAAA;IACjB,YAAY;IACZ,iDAAa,CAAA;IACb,YAAY;IACZ,2DAAkB,CAAA;IAClB,aAAa;IACb,qDAAe,CAAA;IACf,WAAW;IACX,yCAAS,CAAA;AACX,CAAC,EAnBW,QAAQ,KAAR,QAAQ,QAmBnB","sourcesContent":["import type { Coordinates } from './coordinates.types';\n\n/**\n * 路径规划类型\n */\nexport enum RouteType {\n /** 驾车路径规划 */\n DRIVE = 'drive',\n /** 步行路径规划 */\n WALK = 'walk',\n /** 骑行路径规划 */\n RIDE = 'ride',\n /** 公交换乘 */\n TRANSIT = 'transit',\n /** 货车路径规划 */\n TRUCK = 'truck',\n}\n\n/**\n * 驾车路径规划策略\n */\nexport enum DriveStrategy {\n /** 速度优先(时间最短) */\n FASTEST = 0,\n /** 费用优先(不走收费路段的最快路线) */\n FEE_FIRST = 1,\n /** 距离优先(距离最短) */\n SHORTEST = 2,\n /** 不走快速路(不走快速路的最快路线) */\n NO_EXPRESSWAYS = 3,\n /** 结合实时交通(躲避拥堵) */\n AVOID_CONGESTION = 4,\n /** 不走高速 */\n NO_HIGHWAY = 5,\n /** 不走高速且避免收费 */\n NO_HIGHWAY_AVOID_CONGESTION = 6,\n /** 躲避收费和拥堵 */\n AVOID_COST_CONGESTION = 7,\n /** 不走高速且躲避收费和拥堵 */\n NO_HIGHWAY_AVOID_COST_CONGESTION = 8,\n /** 躲避拥堵和收费 */\n AVOID_CONGESTION_COST = 9,\n}\n\n/**\n * 步行路径规划策略\n */\nexport enum WalkStrategy {\n /** 推荐路线 */\n DEFAULT = 0,\n}\n\n/**\n * 骑行路径规划策略\n */\nexport enum RideStrategy {\n /** 推荐路线 */\n DEFAULT = 0,\n /** 速度优先 */\n FASTEST = 1,\n /** 距离优先 */\n SHORTEST = 2,\n}\n\n/**\n * 货车路径规划大小\n */\nexport enum TruckSize {\n /** 微型货车 */\n MINI = 1,\n /** 轻型货车 */\n LIGHT = 2,\n /** 中型货车 */\n MEDIUM = 3,\n /** 重型货车 */\n HEAVY = 4,\n}\n\n/**\n * 步行/骑行 Travel 策略(对齐原生:1000 单路线 / 1001 多路线)\n */\nexport enum TravelStrategy {\n SINGLE = 1000,\n MULTIPLE = 1001,\n}\n\n/**\n * 基础路径规划选项\n */\nexport interface BaseRouteOptions {\n /** 起点坐标 */\n from: Coordinates;\n /** 终点坐标 */\n to: Coordinates;\n /** 途经点列表(可选) */\n waypoints?: Coordinates[];\n}\n\n/**\n * 驾车路径规划选项\n */\nexport interface DriveRouteOptions extends BaseRouteOptions {\n type: RouteType.DRIVE;\n /** 驾车策略,默认速度优先 */\n strategy?: DriveStrategy;\n /** 车牌号(用于限行策略,可选) */\n carNumber?: string;\n /** 避让区域(可选) */\n avoidPolygons?: Coordinates[][];\n /** 避让道路(道路名称,可选) */\n avoidRoad?: string;\n}\n\n/**\n * 步行路径规划选项\n */\nexport interface WalkRouteOptions extends BaseRouteOptions {\n type: RouteType.WALK;\n /** 步行策略 */\n strategy?: WalkStrategy;\n /** 出行策略(单路线/多路线),对齐原生 TravelStrategy:1000/1001 */\n travelStrategy?: TravelStrategy;\n /** 是否返回多路线(等价于 travelStrategy=TravelStrategy.MULTIPLE) */\n multiple?: boolean;\n}\n\n/**\n * 骑行路径规划选项\n */\nexport interface RideRouteOptions extends BaseRouteOptions {\n type: RouteType.RIDE;\n /** 骑行策略 */\n strategy?: RideStrategy;\n /** 出行策略(单路线/多路线),对齐原生 TravelStrategy:1000/1001 */\n travelStrategy?: TravelStrategy;\n /** 是否返回多路线(等价于 travelStrategy=TravelStrategy.MULTIPLE) */\n multiple?: boolean;\n}\n\n/**\n * 骑行电动车路径规划选项\n */\nexport interface EBikeRouteOptions extends BaseRouteOptions {\n /** 出行策略(单路线/多路线),对齐原生 TravelStrategy:1000/1001 */\n travelStrategy?: TravelStrategy;\n /** 是否返回多路线(等价于 travelStrategy=TravelStrategy.MULTIPLE) */\n multiple?: boolean;\n /** 强制使用 POI 算路(若提供 name 或 poiId 时会自动使用) */\n usePoi?: boolean;\n}\n\nexport interface TransitRouteOptions extends BaseRouteOptions {\n type: RouteType.TRANSIT;\n city1: string;\n city2: string;\n strategy?: number;\n alternativeRoute?: 1 | 2 | 3;\n}\n\n/**\n * 货车路径规划选项\n */\nexport interface TruckRouteOptions extends BaseRouteOptions {\n type: RouteType.TRUCK;\n /** 货车大小 */\n size: TruckSize;\n /** 货车高度(米) */\n height?: number;\n /** 货车宽度(米) */\n width?: number;\n /** 货车载重(吨) */\n load?: number;\n /** 货车重量(吨) */\n weight?: number;\n /** 货车轴数 */\n axis?: number;\n}\n\n/**\n * 官方导航页参数(Android: AmapNaviPage.showRouteActivity)\n */\nexport interface OfficialNaviPageOptions {\n /** 起点(可选,不传则由 SDK 使用当前位置) */\n from?: Coordinates & {\n name?: string;\n poiId?: string;\n };\n /** 终点(必填) */\n to: Coordinates & {\n name?: string;\n poiId?: string;\n };\n /** 途经点(可选) */\n waypoints?: Array<\n Coordinates & {\n name?: string;\n poiId?: string;\n }\n >;\n /** 页面类型:`ROUTE` 路线页 / `NAVI` 导航页 */\n pageType?: 'ROUTE' | 'NAVI' | string;\n /** 算路类型:`DRIVER` / `WALK` / `RIDE` / `MOTORCYCLE`(当前主要用于驾车) */\n officialNaviType?: 'DRIVER' | 'WALK' | 'RIDE' | 'MOTORCYCLE' | string;\n /** 组件主题:`BLUE`(默认)/ `WHITE` / `BLACK` */\n theme?: 'BLUE' | 'WHITE' | 'BLACK' | string;\n /** 组件算路策略(参考 PathPlanningStrategy 常量) */\n routeStrategy?: number;\n /** 是否直接进入导航页(iOS 对应 `setStartNaviDirectly`) */\n startNaviDirectly?: boolean;\n /** 直接导航模式(仅直接进导航页时生效) */\n naviMode?: number;\n needCalculateRouteWhenPresent?: boolean;\n /** 退出导航页时是否销毁 DriveManager 实例,默认 false */\n needDestroyDriveManagerInstanceWhenNaviExit?: boolean;\n /** 是否显示退出导航弹窗,默认 true */\n showExitNaviDialog?: boolean;\n /** 是否使用内置语音,默认 true(6.1.0+ 默认 true) */\n useInnerVoice?: boolean;\n /** 路况开关是否打开(默认 false) */\n trafficEnabled?: boolean;\n /** 是否显示路口放大图 */\n showCrossImage?: boolean;\n /** 是否显示“路径偏好策略”页面 */\n showRouteStrategyPreferenceView?: boolean;\n /** 是否显示“下下个路口”引导 */\n secondActionVisible?: boolean;\n /** 是否展示语音设置项(文档原方法名 `setShowVoiceSetings`) */\n showVoiceSettings?: boolean;\n /** 驾车多路线模式(true 多路线 / false 单路线) */\n multipleRouteNaviMode?: boolean;\n /** 货车多路线模式(付费能力) */\n truckMultipleRouteNaviMode?: boolean;\n /** 是否显示鹰眼小地图 */\n showEagleMap?: boolean;\n /** 比例尺智能缩放是否开启 */\n scaleAutoChangeEnable?: boolean;\n /** 昼夜模式:0 自动 / 1 白天 / 2 夜间 */\n dayAndNightMode?: 0 | 1 | 2 | number;\n /** iOS 地图样式类型(覆盖 dayAndNightMode) */\n mapViewModeType?: number;\n /** 播报模式:1 简洁 / 2 详细 / 3 静音 */\n broadcastMode?: 1 | 2 | 3 | number;\n /** iOS 播报类型(覆盖 broadcastMode) */\n broadcastType?: number;\n /** 导航视角:1 正北向上 / 2 车头向上 */\n carDirectionMode?: 1 | 2 | number;\n /** iOS 跟随模式(覆盖 carDirectionMode) */\n trackingMode?: number;\n /** 是否显示“随后转向”图标(iOS) */\n showNextRoadInfo?: boolean;\n /** 多路线模式下是否显示备选路线(iOS) */\n showBackupRoute?: boolean;\n /** 网约车模式(iOS) */\n onlineCarHailingType?: number;\n /** 是否显示限行图层(iOS,付费能力) */\n showRestrictareaEnable?: boolean;\n /** 到达目的地后是否移除路线和牵引线(iOS) */\n removePolylineAndVectorlineWhenArrivedDestination?: boolean;\n /** 车辆信息(用于尾号限行/货车导航) */\n carInfo?: {\n /** 车辆类型:如 `0` 小客车 / `1` 货车 / `11` 摩托车 */\n carType?: string;\n /** 车牌号 */\n carNumber?: string;\n /** 是否考虑限行 */\n restriction?: boolean;\n /** 摩托车排量 */\n motorcycleCC?: number;\n /** 货车轴数 */\n vehicleAxis?: string;\n /** 货车高度(米) */\n vehicleHeight?: string;\n /** 货车长度(米) */\n vehicleLength?: string;\n /** 货车宽度(米) */\n vehicleWidth?: string;\n /** 货车尺寸等级 */\n vehicleSize?: string;\n /** 货车载重(吨) */\n vehicleLoad?: string;\n /** 货车总重(吨) */\n vehicleWeight?: string;\n /** 是否开启载重参数 */\n vehicleLoadSwitch?: boolean;\n /** 算路时是否忽略货车重量(iOS) */\n isLoadIgnore?: boolean;\n };\n}\n\n/**\n * 路径步骤动作类型\n */\nexport enum StepAction {\n /** 直行 */\n STRAIGHT = 0,\n /** 左转 */\n LEFT = 1,\n /** 右转 */\n RIGHT = 2,\n /** 左前方转弯 */\n LEFT_FRONT = 3,\n /** 右前方转弯 */\n RIGHT_FRONT = 4,\n /** 左后方转弯 */\n LEFT_BACK = 5,\n /** 右后方转弯 */\n RIGHT_BACK = 6,\n /** 左转掉头 */\n LEFT_U_TURN = 7,\n /** 到达目的地 */\n ARRIVE = 8,\n /** 进入环岛 */\n ENTER_ROUNDABOUT = 9,\n /** 驶出环岛 */\n EXIT_ROUNDABOUT = 10,\n}\n\n/**\n * 道路类型\n */\nexport enum RoadType {\n /** 高速公路 */\n HIGHWAY = 0,\n /** 国道 */\n NATIONAL_ROAD = 1,\n /** 省道 */\n PROVINCIAL_ROAD = 2,\n /** 县道 */\n COUNTY_ROAD = 3,\n /** 乡镇道路 */\n TOWNSHIP_ROAD = 4,\n /** 城市主干道 */\n MAIN_ROAD = 5,\n /** 城市次干道 */\n SECONDARY_ROAD = 6,\n /** 城市普通道路 */\n NORMAL_ROAD = 7,\n /** 其他道路 */\n OTHER = 8,\n}\n\n/**\n * 路径步骤信息\n */\nexport interface RouteStep {\n /** 步骤说明 */\n instruction: string;\n /** 方向说明 */\n orientation?: string;\n /** 道路名称 */\n road?: string;\n /** 距离(米) */\n distance: number;\n /** 预计时间(秒) */\n duration: number;\n /** 路径坐标点 */\n polyline: Coordinates[];\n /** 动作类型 */\n action?: StepAction;\n /** 辅助动作(可选) */\n assistantAction?: string;\n /** 收费距离(米) */\n tollDistance?: number;\n /** 收费金额(元) */\n tollCost?: number;\n /** 道路类型 */\n roadType?: RoadType;\n}\n\n/**\n * 路径规划结果\n */\nexport interface RouteResult {\n /** 路线ID */\n id: number;\n /** 起点坐标 */\n start: Coordinates;\n /** 终点坐标 */\n end: Coordinates;\n /** 总距离(米) */\n distance: number;\n /** 预计时间(秒) */\n duration: number;\n /** 路径步骤 */\n segments?: RouteStep[];\n /** 路径坐标点(所有步骤的完整路径) */\n polyline?: Coordinates[];\n /** 收费距离(米),驾车时有效 */\n tollDistance?: number;\n /** 收费金额(元),驾车时有效 */\n tollCost?: number;\n /** 红绿灯数量,驾车时有效 */\n trafficLightCount?: number;\n /** 限行状态码,驾车时有效 */\n restrictionCode?: number;\n /** 限行状态说明,驾车时有效 */\n restrictionInfo?: string;\n /** 策略值 */\n strategy?: number;\n}\n\n/**\n * 驾车路径规划结果(包含多条路线)\n */\nexport interface DriveRouteResult {\n /** 路径数量 */\n count: number;\n /** 主路线索引 */\n mainPathIndex: number;\n /** 路线ID列表 */\n routeIds?: number[];\n /** 路径列表,按策略返回1-3条路线 */\n routes: RouteResult[];\n /** 出租车费用(元) */\n taxiCost?: number;\n}\n\n/**\n * 路径规划选项联合类型\n */\nexport type RouteOptions =\n | DriveRouteOptions\n | WalkRouteOptions\n | RideRouteOptions\n | EBikeRouteOptions\n | TransitRouteOptions\n | TruckRouteOptions;\n"]}
|
|
1
|
+
{"version":3,"file":"route.types.js","sourceRoot":"","sources":["../../src/types/route.types.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAN,IAAY,SAWX;AAXD,WAAY,SAAS;IACnB,aAAa;IACb,4BAAe,CAAA;IACf,aAAa;IACb,0BAAa,CAAA;IACb,aAAa;IACb,0BAAa,CAAA;IACb,WAAW;IACX,gCAAmB,CAAA;IACnB,aAAa;IACb,4BAAe,CAAA;AACjB,CAAC,EAXW,SAAS,KAAT,SAAS,QAWpB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,aAqBX;AArBD,WAAY,aAAa;IACvB,iBAAiB;IACjB,uDAAW,CAAA;IACX,wBAAwB;IACxB,2DAAa,CAAA;IACb,iBAAiB;IACjB,yDAAY,CAAA;IACZ,wBAAwB;IACxB,qEAAkB,CAAA;IAClB,mBAAmB;IACnB,yEAAoB,CAAA;IACpB,WAAW;IACX,6DAAc,CAAA;IACd,gBAAgB;IAChB,+FAA+B,CAAA;IAC/B,cAAc;IACd,mFAAyB,CAAA;IACzB,mBAAmB;IACnB,yGAAoC,CAAA;IACpC,cAAc;IACd,mFAAyB,CAAA;AAC3B,CAAC,EArBW,aAAa,KAAb,aAAa,QAqBxB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,WAAW;IACX,qDAAW,CAAA;AACb,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,YAOX;AAPD,WAAY,YAAY;IACtB,WAAW;IACX,qDAAW,CAAA;IACX,WAAW;IACX,qDAAW,CAAA;IACX,WAAW;IACX,uDAAY,CAAA;AACd,CAAC,EAPW,YAAY,KAAZ,YAAY,QAOvB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,SASX;AATD,WAAY,SAAS;IACnB,WAAW;IACX,yCAAQ,CAAA;IACR,WAAW;IACX,2CAAS,CAAA;IACT,WAAW;IACX,6CAAU,CAAA;IACV,WAAW;IACX,2CAAS,CAAA;AACX,CAAC,EATW,SAAS,KAAT,SAAS,QASpB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,0DAAa,CAAA;IACb,8DAAe,CAAA;AACjB,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB;AAmND;;GAEG;AACH,MAAM,CAAN,IAAY,UAuBX;AAvBD,WAAY,UAAU;IACpB,SAAS;IACT,mDAAY,CAAA;IACZ,SAAS;IACT,2CAAQ,CAAA;IACR,SAAS;IACT,6CAAS,CAAA;IACT,YAAY;IACZ,uDAAc,CAAA;IACd,YAAY;IACZ,yDAAe,CAAA;IACf,YAAY;IACZ,qDAAa,CAAA;IACb,YAAY;IACZ,uDAAc,CAAA;IACd,WAAW;IACX,yDAAe,CAAA;IACf,YAAY;IACZ,+CAAU,CAAA;IACV,WAAW;IACX,mEAAoB,CAAA;IACpB,WAAW;IACX,kEAAoB,CAAA;AACtB,CAAC,EAvBW,UAAU,KAAV,UAAU,QAuBrB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,QAmBX;AAnBD,WAAY,QAAQ;IAClB,WAAW;IACX,6CAAW,CAAA;IACX,SAAS;IACT,yDAAiB,CAAA;IACjB,SAAS;IACT,6DAAmB,CAAA;IACnB,SAAS;IACT,qDAAe,CAAA;IACf,WAAW;IACX,yDAAiB,CAAA;IACjB,YAAY;IACZ,iDAAa,CAAA;IACb,YAAY;IACZ,2DAAkB,CAAA;IAClB,aAAa;IACb,qDAAe,CAAA;IACf,WAAW;IACX,yCAAS,CAAA;AACX,CAAC,EAnBW,QAAQ,KAAR,QAAQ,QAmBnB","sourcesContent":["import type { Coordinates } from './coordinates.types';\n\n/**\n * 路径规划类型\n */\nexport enum RouteType {\n /** 驾车路径规划 */\n DRIVE = 'drive',\n /** 步行路径规划 */\n WALK = 'walk',\n /** 骑行路径规划 */\n RIDE = 'ride',\n /** 公交换乘 */\n TRANSIT = 'transit',\n /** 货车路径规划 */\n TRUCK = 'truck',\n}\n\n/**\n * 驾车路径规划策略\n */\nexport enum DriveStrategy {\n /** 速度优先(时间最短) */\n FASTEST = 0,\n /** 费用优先(不走收费路段的最快路线) */\n FEE_FIRST = 1,\n /** 距离优先(距离最短) */\n SHORTEST = 2,\n /** 不走快速路(不走快速路的最快路线) */\n NO_EXPRESSWAYS = 3,\n /** 结合实时交通(躲避拥堵) */\n AVOID_CONGESTION = 4,\n /** 不走高速 */\n NO_HIGHWAY = 5,\n /** 不走高速且避免收费 */\n NO_HIGHWAY_AVOID_CONGESTION = 6,\n /** 躲避收费和拥堵 */\n AVOID_COST_CONGESTION = 7,\n /** 不走高速且躲避收费和拥堵 */\n NO_HIGHWAY_AVOID_COST_CONGESTION = 8,\n /** 躲避拥堵和收费 */\n AVOID_CONGESTION_COST = 9,\n}\n\n/**\n * 步行路径规划策略\n */\nexport enum WalkStrategy {\n /** 推荐路线 */\n DEFAULT = 0,\n}\n\n/**\n * 骑行路径规划策略\n */\nexport enum RideStrategy {\n /** 推荐路线 */\n DEFAULT = 0,\n /** 速度优先 */\n FASTEST = 1,\n /** 距离优先 */\n SHORTEST = 2,\n}\n\n/**\n * 货车路径规划大小\n */\nexport enum TruckSize {\n /** 微型货车 */\n MINI = 1,\n /** 轻型货车 */\n LIGHT = 2,\n /** 中型货车 */\n MEDIUM = 3,\n /** 重型货车 */\n HEAVY = 4,\n}\n\n/**\n * 步行/骑行 Travel 策略(对齐原生:1000 单路线 / 1001 多路线)\n */\nexport enum TravelStrategy {\n SINGLE = 1000,\n MULTIPLE = 1001,\n}\n\n/**\n * 基础路径规划选项\n */\nexport interface BaseRouteOptions {\n /** 起点坐标 */\n from: Coordinates;\n /** 终点坐标 */\n to: Coordinates;\n /** 途经点列表(可选) */\n waypoints?: Coordinates[];\n}\n\n/**\n * 驾车路径规划选项\n */\nexport interface DriveRouteOptions extends BaseRouteOptions {\n type: RouteType.DRIVE;\n /** 驾车策略,默认速度优先 */\n strategy?: DriveStrategy;\n /** 车牌号(用于限行策略,可选) */\n carNumber?: string;\n /** 避让区域(可选) */\n avoidPolygons?: Coordinates[][];\n /** 避让道路(道路名称,可选) */\n avoidRoad?: string;\n}\n\n/**\n * 步行路径规划选项\n */\nexport interface WalkRouteOptions extends BaseRouteOptions {\n type: RouteType.WALK;\n /** 步行策略 */\n strategy?: WalkStrategy;\n /** 出行策略(单路线/多路线),对齐原生 TravelStrategy:1000/1001 */\n travelStrategy?: TravelStrategy;\n /** 是否返回多路线(等价于 travelStrategy=TravelStrategy.MULTIPLE) */\n multiple?: boolean;\n}\n\n/**\n * 骑行路径规划选项\n */\nexport interface RideRouteOptions extends BaseRouteOptions {\n type: RouteType.RIDE;\n /** 骑行策略 */\n strategy?: RideStrategy;\n /** 出行策略(单路线/多路线),对齐原生 TravelStrategy:1000/1001 */\n travelStrategy?: TravelStrategy;\n /** 是否返回多路线(等价于 travelStrategy=TravelStrategy.MULTIPLE) */\n multiple?: boolean;\n}\n\n/**\n * 骑行电动车路径规划选项\n */\nexport interface EBikeRouteOptions extends BaseRouteOptions {\n /** 出行策略(单路线/多路线),对齐原生 TravelStrategy:1000/1001 */\n travelStrategy?: TravelStrategy;\n /** 是否返回多路线(等价于 travelStrategy=TravelStrategy.MULTIPLE) */\n multiple?: boolean;\n /** 强制使用 POI 算路(若提供 name 或 poiId 时会自动使用) */\n usePoi?: boolean;\n}\n\nexport interface TransitRouteOptions extends BaseRouteOptions {\n type: RouteType.TRANSIT;\n city1: string;\n city2: string;\n strategy?: number;\n alternativeRoute?: 1 | 2 | 3;\n}\n\n/**\n * 货车路径规划选项\n */\nexport interface TruckRouteOptions extends BaseRouteOptions {\n type: RouteType.TRUCK;\n /** 货车大小 */\n size: TruckSize;\n /** 货车高度(米) */\n height?: number;\n /** 货车宽度(米) */\n width?: number;\n /** 货车载重(吨) */\n load?: number;\n /** 货车重量(吨) */\n weight?: number;\n /** 货车轴数 */\n axis?: number;\n}\n\n/**\n * 官方导航页参数(Android: AmapNaviPage.showRouteActivity)\n */\nexport interface OfficialNaviPageOptions {\n /** 起点(可选,不传则由 SDK 使用当前位置) */\n from?: Coordinates & {\n name?: string;\n poiId?: string;\n };\n /** 终点(必填) */\n to: Coordinates & {\n name?: string;\n poiId?: string;\n };\n /** 途经点(可选) */\n waypoints?: Array<\n Coordinates & {\n name?: string;\n poiId?: string;\n }\n >;\n /** 页面类型:`ROUTE` 路线页 / `NAVI` 导航页 */\n pageType?: 'ROUTE' | 'NAVI' | string;\n /** 算路类型:`DRIVER` / `WALK` / `RIDE` / `MOTORCYCLE`(当前主要用于驾车) */\n officialNaviType?: 'DRIVER' | 'WALK' | 'RIDE' | 'MOTORCYCLE' | string;\n /** 组件主题:`BLUE`(默认)/ `WHITE` / `BLACK` */\n theme?: 'BLUE' | 'WHITE' | 'BLACK' | string;\n /** 组件算路策略(参考 PathPlanningStrategy 常量) */\n routeStrategy?: number;\n /** 是否直接进入导航页(iOS 对应 `setStartNaviDirectly`) */\n startNaviDirectly?: boolean;\n /** 直接导航模式(仅直接进导航页时生效):1 实时 / 2 模拟 */\n naviMode?: number;\n /** iOS 直接导航模式(可选,优先级高于 naviMode) */\n iosNaviMode?: number;\n needCalculateRouteWhenPresent?: boolean;\n /** 退出导航页时是否销毁 DriveManager 实例,默认 false */\n needDestroyDriveManagerInstanceWhenNaviExit?: boolean;\n /** 是否显示退出导航弹窗,默认 true */\n showExitNaviDialog?: boolean;\n /** 是否使用内置语音,默认 true(6.1.0+ 默认 true) */\n useInnerVoice?: boolean;\n /** 路况开关是否打开(默认 false) */\n trafficEnabled?: boolean;\n /** 是否显示路口放大图 */\n showCrossImage?: boolean;\n /** 是否显示“路径偏好策略”页面 */\n showRouteStrategyPreferenceView?: boolean;\n /** 是否显示“下下个路口”引导 */\n secondActionVisible?: boolean;\n /** 是否展示语音设置项(文档原方法名 `setShowVoiceSetings`) */\n showVoiceSettings?: boolean;\n /** 驾车多路线模式(true 多路线 / false 单路线) */\n multipleRouteNaviMode?: boolean;\n /** 货车多路线模式(付费能力) */\n truckMultipleRouteNaviMode?: boolean;\n /** 是否显示鹰眼小地图 */\n showEagleMap?: boolean;\n /** iOS 是否显示电子眼距离(7.7.0+,具体以 SDK 版本为准) */\n showCameraDistanceEnable?: boolean;\n /** iOS 地图缩放比例(7.7.0+,具体以 SDK 版本为准) */\n scaleFactor?: number;\n /** 比例尺智能缩放是否开启 */\n scaleAutoChangeEnable?: boolean;\n /** 昼夜模式:0 自动 / 1 白天 / 2 夜间 */\n dayAndNightMode?: 0 | 1 | 2 | number;\n /** iOS 地图样式类型(覆盖 dayAndNightMode) */\n mapViewModeType?: number;\n /** 播报模式:1 简洁 / 2 详细 / 3 静音 */\n broadcastMode?: 1 | 2 | 3 | number;\n /** iOS 播报类型(覆盖 broadcastMode) */\n broadcastType?: number;\n /** 导航视角:1 正北向上 / 2 车头向上 */\n carDirectionMode?: 1 | 2 | number;\n /** iOS 跟随模式(覆盖 carDirectionMode) */\n trackingMode?: number;\n /** 是否显示“随后转向”图标(iOS) */\n showNextRoadInfo?: boolean;\n /** 多路线模式下是否显示备选路线(iOS) */\n showBackupRoute?: boolean;\n /** 网约车模式(iOS) */\n onlineCarHailingType?: number;\n /** 是否显示限行图层(iOS,付费能力) */\n showRestrictareaEnable?: boolean;\n /** 到达目的地后是否移除路线和牵引线(iOS) */\n removePolylineAndVectorlineWhenArrivedDestination?: boolean;\n /** 车辆信息(用于尾号限行/货车导航) */\n carInfo?: {\n /** 车辆类型:如 `0` 小客车 / `1` 货车 / `11` 摩托车 */\n carType?: string;\n /** 车牌号 */\n carNumber?: string;\n /** 是否考虑限行 */\n restriction?: boolean;\n /** 摩托车排量 */\n motorcycleCC?: number;\n /** 货车轴数 */\n vehicleAxis?: string;\n /** 货车高度(米) */\n vehicleHeight?: string;\n /** 货车长度(米) */\n vehicleLength?: string;\n /** 货车宽度(米) */\n vehicleWidth?: string;\n /** 货车尺寸等级 */\n vehicleSize?: string;\n /** 货车载重(吨) */\n vehicleLoad?: string;\n /** 货车总重(吨) */\n vehicleWeight?: string;\n /** 是否开启载重参数 */\n vehicleLoadSwitch?: boolean;\n /** 算路时是否忽略货车重量(iOS) */\n isLoadIgnore?: boolean;\n };\n}\n\n/**\n * 路径步骤动作类型\n */\nexport enum StepAction {\n /** 直行 */\n STRAIGHT = 0,\n /** 左转 */\n LEFT = 1,\n /** 右转 */\n RIGHT = 2,\n /** 左前方转弯 */\n LEFT_FRONT = 3,\n /** 右前方转弯 */\n RIGHT_FRONT = 4,\n /** 左后方转弯 */\n LEFT_BACK = 5,\n /** 右后方转弯 */\n RIGHT_BACK = 6,\n /** 左转掉头 */\n LEFT_U_TURN = 7,\n /** 到达目的地 */\n ARRIVE = 8,\n /** 进入环岛 */\n ENTER_ROUNDABOUT = 9,\n /** 驶出环岛 */\n EXIT_ROUNDABOUT = 10,\n}\n\n/**\n * 道路类型\n */\nexport enum RoadType {\n /** 高速公路 */\n HIGHWAY = 0,\n /** 国道 */\n NATIONAL_ROAD = 1,\n /** 省道 */\n PROVINCIAL_ROAD = 2,\n /** 县道 */\n COUNTY_ROAD = 3,\n /** 乡镇道路 */\n TOWNSHIP_ROAD = 4,\n /** 城市主干道 */\n MAIN_ROAD = 5,\n /** 城市次干道 */\n SECONDARY_ROAD = 6,\n /** 城市普通道路 */\n NORMAL_ROAD = 7,\n /** 其他道路 */\n OTHER = 8,\n}\n\n/**\n * 路径步骤信息\n */\nexport interface RouteStep {\n /** 步骤说明 */\n instruction: string;\n /** 方向说明 */\n orientation?: string;\n /** 道路名称 */\n road?: string;\n /** 距离(米) */\n distance: number;\n /** 预计时间(秒) */\n duration: number;\n /** 路径坐标点 */\n polyline: Coordinates[];\n /** 动作类型 */\n action?: StepAction;\n /** 辅助动作(可选) */\n assistantAction?: string;\n /** 收费距离(米) */\n tollDistance?: number;\n /** 收费金额(元) */\n tollCost?: number;\n /** 道路类型 */\n roadType?: RoadType;\n}\n\n/**\n * 路径规划结果\n */\nexport interface RouteResult {\n /** 路线ID */\n id: number;\n /** 起点坐标 */\n start: Coordinates;\n /** 终点坐标 */\n end: Coordinates;\n /** 总距离(米) */\n distance: number;\n /** 预计时间(秒) */\n duration: number;\n /** 路径步骤 */\n segments?: RouteStep[];\n /** 路径坐标点(所有步骤的完整路径) */\n polyline?: Coordinates[];\n /** 收费距离(米),驾车时有效 */\n tollDistance?: number;\n /** 收费金额(元),驾车时有效 */\n tollCost?: number;\n /** 红绿灯数量,驾车时有效 */\n trafficLightCount?: number;\n /** 限行状态码,驾车时有效 */\n restrictionCode?: number;\n /** 限行状态说明,驾车时有效 */\n restrictionInfo?: string;\n /** 策略值 */\n strategy?: number;\n}\n\n/**\n * 驾车路径规划结果(包含多条路线)\n */\nexport interface DriveRouteResult {\n /** 路径数量 */\n count: number;\n /** 主路线索引 */\n mainPathIndex: number;\n /** 路线ID列表 */\n routeIds?: number[];\n /** 路径列表,按策略返回1-3条路线 */\n routes: RouteResult[];\n /** 出租车费用(元) */\n taxiCost?: number;\n}\n\n/**\n * 路径规划选项联合类型\n */\nexport type RouteOptions =\n | DriveRouteOptions\n | WalkRouteOptions\n | RideRouteOptions\n | EBikeRouteOptions\n | TransitRouteOptions\n | TruckRouteOptions;\n"]}
|
|
@@ -68,6 +68,28 @@ public class ExpoGaodeMapNaviView: ExpoView {
|
|
|
68
68
|
)
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
|
+
|
|
72
|
+
/// 检查 iOS 是否配置了后台定位模式(避免导航启动时触发系统异常)
|
|
73
|
+
private func ensureBackgroundLocationModeForNavigation() throws {
|
|
74
|
+
let backgroundModes = Bundle.main.object(forInfoDictionaryKey: "UIBackgroundModes") as? [String]
|
|
75
|
+
guard backgroundModes?.contains("location") == true else {
|
|
76
|
+
throw NSError(
|
|
77
|
+
domain: "ExpoGaodeMapNaviView",
|
|
78
|
+
code: -1003,
|
|
79
|
+
userInfo: [
|
|
80
|
+
NSLocalizedDescriptionKey: "iOS 后台定位模式未开启,无法安全启动导航",
|
|
81
|
+
NSLocalizedFailureReasonErrorKey: "Info.plist 缺少 UIBackgroundModes: location",
|
|
82
|
+
NSLocalizedRecoverySuggestionErrorKey: """
|
|
83
|
+
请在 app.json 插件配置中开启后台定位后重新 prebuild:
|
|
84
|
+
["expo-gaode-map-navigation", {
|
|
85
|
+
"enableBackgroundLocation": true
|
|
86
|
+
}]
|
|
87
|
+
然后执行:npx expo prebuild --clean
|
|
88
|
+
"""
|
|
89
|
+
]
|
|
90
|
+
)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
71
93
|
|
|
72
94
|
/// 格式化错误信息
|
|
73
95
|
private func formatError(_ error: Error) -> String {
|
|
@@ -383,8 +405,17 @@ public class ExpoGaodeMapNaviView: ExpoView {
|
|
|
383
405
|
do {
|
|
384
406
|
try checkPrivacyReady()
|
|
385
407
|
try checkAMapInitialization()
|
|
408
|
+
try ensureBackgroundLocationModeForNavigation()
|
|
386
409
|
} catch {
|
|
387
|
-
let
|
|
410
|
+
let nsError = error as NSError
|
|
411
|
+
let code: String
|
|
412
|
+
if nsError.domain == "ExpoGaodeMapPrivacy" {
|
|
413
|
+
code = "PRIVACY_NOT_AGREED"
|
|
414
|
+
} else if nsError.code == -1003 {
|
|
415
|
+
code = "BACKGROUND_LOCATION_NOT_ENABLED"
|
|
416
|
+
} else {
|
|
417
|
+
code = "AMAP_NOT_INITIALIZED"
|
|
418
|
+
}
|
|
388
419
|
promise.reject(code, formatError(error))
|
|
389
420
|
return
|
|
390
421
|
}
|
|
@@ -74,6 +74,28 @@ public class ExpoGaodeMapNavigationModule: Module {
|
|
|
74
74
|
try checkAMapInitialization()
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
+
/// 检查 iOS 是否开启后台定位模式(避免导航启动时出现系统异常)
|
|
78
|
+
private func ensureBackgroundLocationModeForNavigation() throws {
|
|
79
|
+
let backgroundModes = Bundle.main.object(forInfoDictionaryKey: "UIBackgroundModes") as? [String]
|
|
80
|
+
guard backgroundModes?.contains("location") == true else {
|
|
81
|
+
throw NSError(
|
|
82
|
+
domain: "ExpoGaodeMapNavigation",
|
|
83
|
+
code: -1003,
|
|
84
|
+
userInfo: [
|
|
85
|
+
NSLocalizedDescriptionKey: "iOS 后台定位模式未开启,无法安全启动导航",
|
|
86
|
+
NSLocalizedFailureReasonErrorKey: "Info.plist 缺少 UIBackgroundModes: location",
|
|
87
|
+
NSLocalizedRecoverySuggestionErrorKey: """
|
|
88
|
+
请在 app.json 插件配置中开启后台定位后重新 prebuild:
|
|
89
|
+
["expo-gaode-map-navigation", {
|
|
90
|
+
"enableBackgroundLocation": true
|
|
91
|
+
}]
|
|
92
|
+
然后执行:npx expo prebuild --clean
|
|
93
|
+
"""
|
|
94
|
+
]
|
|
95
|
+
)
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
77
99
|
/// 检查并同步隐私状态(导航 SDK 同样要求在调用任何接口前完成)
|
|
78
100
|
private func ensurePrivacyReady() throws {
|
|
79
101
|
GaodeMapPrivacyManager.restorePersistedState()
|
|
@@ -239,6 +261,7 @@ public class ExpoGaodeMapNavigationModule: Module {
|
|
|
239
261
|
AsyncFunction("startNaviWithIndependentPath") { (options: [String: Any], promise: Promise) in
|
|
240
262
|
do {
|
|
241
263
|
try self.ensureInitialized()
|
|
264
|
+
try self.ensureBackgroundLocationModeForNavigation()
|
|
242
265
|
} catch {
|
|
243
266
|
self.rejectInitializationError(promise, error: error)
|
|
244
267
|
return
|
|
@@ -258,6 +281,12 @@ public class ExpoGaodeMapNavigationModule: Module {
|
|
|
258
281
|
AsyncFunction("openOfficialNaviPage") { (options: [String: Any], promise: Promise) in
|
|
259
282
|
do {
|
|
260
283
|
try self.ensureInitialized()
|
|
284
|
+
let pageType = (options["pageType"] as? String)?.uppercased()
|
|
285
|
+
let startNaviDirectly = (options["startNaviDirectly"] as? Bool) ?? false
|
|
286
|
+
// 只有直接进导航页时才强制要求后台定位模式;纯路线规划页不拦截
|
|
287
|
+
if pageType == "NAVI" || startNaviDirectly {
|
|
288
|
+
try self.ensureBackgroundLocationModeForNavigation()
|
|
289
|
+
}
|
|
261
290
|
} catch {
|
|
262
291
|
self.rejectInitializationError(promise, error: error)
|
|
263
292
|
return
|
|
@@ -343,9 +372,14 @@ public class ExpoGaodeMapNavigationModule: Module {
|
|
|
343
372
|
|
|
344
373
|
private func rejectInitializationError(_ promise: Promise, error: Error) {
|
|
345
374
|
let nsError = error as NSError
|
|
346
|
-
let code
|
|
347
|
-
|
|
348
|
-
|
|
375
|
+
let code: String
|
|
376
|
+
if nsError.domain == "ExpoGaodeMapNavigation" && nsError.code == -1002 {
|
|
377
|
+
code = "PRIVACY_NOT_AGREED"
|
|
378
|
+
} else if nsError.domain == "ExpoGaodeMapNavigation" && nsError.code == -1003 {
|
|
379
|
+
code = "BACKGROUND_LOCATION_NOT_ENABLED"
|
|
380
|
+
} else {
|
|
381
|
+
code = "AMAP_NOT_INITIALIZED"
|
|
382
|
+
}
|
|
349
383
|
promise.reject(code, formatError(error))
|
|
350
384
|
}
|
|
351
385
|
|
|
@@ -424,6 +458,11 @@ public class ExpoGaodeMapNavigationModule: Module {
|
|
|
424
458
|
selectorName: "setStartNaviDirectly:",
|
|
425
459
|
value: startNaviDirectly
|
|
426
460
|
)
|
|
461
|
+
if let naviMode = parseCompositeNaviMode(options: options) {
|
|
462
|
+
// iOS 官方组件头文件未公开该方法,但在实际 SDK 中存在;通过反射安全调用。
|
|
463
|
+
// 仅在 startNaviDirectly = true 时该参数才有意义。
|
|
464
|
+
invokeIntSetter(target: config, selectorName: "setNaviMode:", value: naviMode)
|
|
465
|
+
}
|
|
427
466
|
|
|
428
467
|
if let needCalculateRoute = boolValue(options["needCalculateRouteWhenPresent"]) {
|
|
429
468
|
invokeBoolSetter(target: config, selectorName: "setNeedCalculateRouteWhenPresent:", value: needCalculateRoute)
|
|
@@ -461,6 +500,16 @@ public class ExpoGaodeMapNavigationModule: Module {
|
|
|
461
500
|
if let showEagleMap = boolValue(options["showEagleMap"]) {
|
|
462
501
|
invokeBoolSetter(target: config, selectorName: "setShowEagleMap:", value: showEagleMap)
|
|
463
502
|
}
|
|
503
|
+
if let showCameraDistanceEnable = boolValue(options["showCameraDistanceEnable"]) {
|
|
504
|
+
invokeBoolSetter(
|
|
505
|
+
target: config,
|
|
506
|
+
selectorName: "setShowCameraDistanceEnable:",
|
|
507
|
+
value: showCameraDistanceEnable
|
|
508
|
+
)
|
|
509
|
+
}
|
|
510
|
+
if let scaleFactor = doubleValue(options["scaleFactor"]) {
|
|
511
|
+
invokeDoubleSetter(target: config, selectorName: "setScaleFactor:", value: scaleFactor)
|
|
512
|
+
}
|
|
464
513
|
if let showRestrict = boolValue(options["showRestrictareaEnable"]) {
|
|
465
514
|
invokeBoolSetter(target: config, selectorName: "setShowRestrictareaEnable:", value: showRestrict)
|
|
466
515
|
}
|
|
@@ -656,6 +705,25 @@ public class ExpoGaodeMapNavigationModule: Module {
|
|
|
656
705
|
}
|
|
657
706
|
}
|
|
658
707
|
|
|
708
|
+
private func parseCompositeNaviMode(options: [String: Any]) -> Int? {
|
|
709
|
+
if let iosRaw = intValue(options["iosNaviMode"]) {
|
|
710
|
+
return iosRaw
|
|
711
|
+
}
|
|
712
|
+
guard let raw = intValue(options["naviMode"]) else {
|
|
713
|
+
return nil
|
|
714
|
+
}
|
|
715
|
+
switch raw {
|
|
716
|
+
case 0:
|
|
717
|
+
return 1 // 兼容旧参数:0(旧GPS) -> AMapNaviModeGPS(1)
|
|
718
|
+
case 1:
|
|
719
|
+
return 1 // GPS
|
|
720
|
+
case 2:
|
|
721
|
+
return 2 // Emulator
|
|
722
|
+
default:
|
|
723
|
+
return raw
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
|
|
659
727
|
private func parseBroadcastType(options: [String: Any]) -> Int? {
|
|
660
728
|
if let raw = intValue(options["broadcastType"]) {
|
|
661
729
|
return raw
|
|
@@ -743,6 +811,15 @@ public class ExpoGaodeMapNavigationModule: Module {
|
|
|
743
811
|
function(target, selector, value)
|
|
744
812
|
}
|
|
745
813
|
|
|
814
|
+
private func invokeDoubleSetter(target: NSObject, selectorName: String, value: Double) {
|
|
815
|
+
let selector = NSSelectorFromString(selectorName)
|
|
816
|
+
guard target.responds(to: selector) else { return }
|
|
817
|
+
typealias Function = @convention(c) (AnyObject, Selector, Double) -> Void
|
|
818
|
+
let implementation = target.method(for: selector)
|
|
819
|
+
let function = unsafeBitCast(implementation, to: Function.self)
|
|
820
|
+
function(target, selector, value)
|
|
821
|
+
}
|
|
822
|
+
|
|
746
823
|
private func invokeIntReturnBoolSetter(target: NSObject, selectorName: String, value: Int) -> Bool? {
|
|
747
824
|
let selector = NSSelectorFromString(selectorName)
|
|
748
825
|
guard target.responds(to: selector) else { return nil }
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
// IndependentRouteService.swift
|
|
3
3
|
// expo-gaode-map-navigation
|
|
4
4
|
//
|
|
5
|
-
// 独立路径规划服务
|
|
6
|
-
//
|
|
5
|
+
// 独立路径规划服务
|
|
6
|
+
// 驾车/货车/摩托车:优先使用官方独立算路回调(返回 AMapNaviRouteGroup)
|
|
7
|
+
// 步行/骑行:沿用对应 Manager 的标准算路回调
|
|
7
8
|
//
|
|
8
9
|
|
|
9
10
|
import Foundation
|
|
@@ -47,59 +48,61 @@ class IndependentRouteService: NSObject {
|
|
|
47
48
|
promise.reject("INVALID_PARAMS", "from and to are required")
|
|
48
49
|
return
|
|
49
50
|
}
|
|
50
|
-
|
|
51
|
-
guard let
|
|
52
|
-
let
|
|
53
|
-
promise.reject("INVALID_COORDS", "Invalid coordinates")
|
|
51
|
+
|
|
52
|
+
guard let startPOIInfo = Converters.parseNaviPOIInfo(from),
|
|
53
|
+
let endPOIInfo = Converters.parseNaviPOIInfo(to) else {
|
|
54
|
+
promise.reject("INVALID_COORDS", "Invalid coordinates or POI info")
|
|
54
55
|
return
|
|
55
56
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
|
|
58
|
+
let wayPOIInfos: [AMapNaviPOIInfo]? = {
|
|
59
|
+
guard let waypoints = options["waypoints"] as? [[String: Any]] else { return nil }
|
|
60
|
+
return Converters.parseNaviPOIInfos(waypoints)
|
|
61
|
+
}()
|
|
62
|
+
|
|
63
|
+
if let vehicleInfo = buildVehicleInfo(options: options) {
|
|
64
|
+
driveManager?.setVehicleInfo(vehicleInfo)
|
|
61
65
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
let
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
66
|
+
|
|
67
|
+
let strategyValue = resolveDriveStrategyValue(options: options)
|
|
68
|
+
let strategy = AMapNaviDrivingStrategy(rawValue: strategyValue)
|
|
69
|
+
?? AMapNaviDrivingStrategy.drivingStrategySingleDefault
|
|
70
|
+
let token = independentRouteManager.generateToken()
|
|
71
|
+
|
|
72
|
+
let success = driveManager?.independentCalculateDriveRoute(
|
|
73
|
+
withStart: startPOIInfo,
|
|
74
|
+
end: endPOIInfo,
|
|
75
|
+
wayPOIInfos: wayPOIInfos,
|
|
76
|
+
drivingStrategy: strategy,
|
|
77
|
+
callback: { [weak self] routeGroup, error in
|
|
78
|
+
guard let self else { return }
|
|
79
|
+
if let error = error {
|
|
80
|
+
promise.reject("CALCULATE_FAILED", error.localizedDescription)
|
|
81
|
+
return
|
|
82
|
+
}
|
|
83
|
+
guard let routeGroup = routeGroup else {
|
|
84
|
+
promise.reject("CALCULATE_FAILED", "独立驾车算路成功回调未返回 routeGroup")
|
|
85
|
+
return
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
self.independentRouteManager.storeRouteGroup(token: token, routeGroup: routeGroup)
|
|
89
|
+
let result = self.convertIndependentDriveResult(routeGroup: routeGroup, token: token)
|
|
90
|
+
promise.resolve(result)
|
|
91
|
+
}
|
|
76
92
|
) ?? false
|
|
77
|
-
|
|
93
|
+
|
|
78
94
|
if !success {
|
|
79
|
-
currentPromise = nil
|
|
80
|
-
currentToken = nil
|
|
81
95
|
promise.reject("CALCULATE_FAILED", "独立驾车路线规划启动失败")
|
|
82
96
|
}
|
|
83
97
|
}
|
|
84
98
|
|
|
85
99
|
// MARK: - 独立货车路线规划
|
|
86
100
|
func independentTruckRoute(options: [String: Any], promise: Promise) {
|
|
87
|
-
|
|
88
|
-
if
|
|
89
|
-
|
|
90
|
-
naviVehicleInfo.type = vehicleInfo["type"] as? Int ?? 1
|
|
91
|
-
naviVehicleInfo.size = vehicleInfo["size"] as? Int ?? 2
|
|
92
|
-
naviVehicleInfo.width = vehicleInfo["width"] as? Double ?? 2.5
|
|
93
|
-
naviVehicleInfo.height = vehicleInfo["height"] as? Double ?? 3.0
|
|
94
|
-
naviVehicleInfo.length = vehicleInfo["length"] as? Double ?? 10.0
|
|
95
|
-
naviVehicleInfo.load = vehicleInfo["load"] as? Double ?? 10.0
|
|
96
|
-
naviVehicleInfo.weight = vehicleInfo["weight"] as? Double ?? 15.0
|
|
97
|
-
naviVehicleInfo.axisNums = vehicleInfo["axisNums"] as? Int ?? 2
|
|
98
|
-
driveManager?.setVehicleInfo(naviVehicleInfo)
|
|
101
|
+
var truckOptions = options
|
|
102
|
+
if truckOptions["carType"] == nil && (truckOptions["vehicleInfo"] as? [String: Any]) == nil {
|
|
103
|
+
truckOptions["carType"] = 1
|
|
99
104
|
}
|
|
100
|
-
|
|
101
|
-
// 复用驾车路线规划
|
|
102
|
-
independentDriveRoute(options: options, promise: promise)
|
|
105
|
+
independentDriveRoute(options: truckOptions, promise: promise)
|
|
103
106
|
}
|
|
104
107
|
|
|
105
108
|
// MARK: - 独立步行路线规划
|
|
@@ -158,7 +161,146 @@ class IndependentRouteService: NSObject {
|
|
|
158
161
|
|
|
159
162
|
// MARK: - 独立摩托车路线规划(使用驾车接口)
|
|
160
163
|
func independentMotorcycleRoute(options: [String: Any], promise: Promise) {
|
|
161
|
-
|
|
164
|
+
var motorcycleOptions = options
|
|
165
|
+
if motorcycleOptions["carType"] == nil {
|
|
166
|
+
motorcycleOptions["carType"] = 11
|
|
167
|
+
}
|
|
168
|
+
independentDriveRoute(options: motorcycleOptions, promise: promise)
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
private func resolveDriveStrategyValue(options: [String: Any]) -> Int {
|
|
172
|
+
if let strategy = options["strategy"] as? Int {
|
|
173
|
+
return strategy
|
|
174
|
+
}
|
|
175
|
+
return Converters.convertDrivingPreferenceToStrategy(
|
|
176
|
+
multipleRoute: true,
|
|
177
|
+
avoidCongestion: options["avoidCongestion"] as? Bool ?? false,
|
|
178
|
+
avoidHighway: options["avoidHighway"] as? Bool ?? false,
|
|
179
|
+
avoidCost: options["avoidCost"] as? Bool ?? false,
|
|
180
|
+
prioritiseHighway: options["prioritiseHighway"] as? Bool ?? false
|
|
181
|
+
)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
private func buildVehicleInfo(options: [String: Any]) -> AMapNaviVehicleInfo? {
|
|
185
|
+
let naviVehicleInfo = AMapNaviVehicleInfo()
|
|
186
|
+
var hasAnyValue = false
|
|
187
|
+
|
|
188
|
+
if let vehicleInfo = options["vehicleInfo"] as? [String: Any] {
|
|
189
|
+
if let type = intValue(vehicleInfo["type"]) {
|
|
190
|
+
naviVehicleInfo.type = type
|
|
191
|
+
hasAnyValue = true
|
|
192
|
+
}
|
|
193
|
+
if let size = intValue(vehicleInfo["size"]) {
|
|
194
|
+
naviVehicleInfo.size = size
|
|
195
|
+
hasAnyValue = true
|
|
196
|
+
}
|
|
197
|
+
if let width = doubleValue(vehicleInfo["width"]) {
|
|
198
|
+
naviVehicleInfo.width = width
|
|
199
|
+
hasAnyValue = true
|
|
200
|
+
}
|
|
201
|
+
if let height = doubleValue(vehicleInfo["height"]) {
|
|
202
|
+
naviVehicleInfo.height = height
|
|
203
|
+
hasAnyValue = true
|
|
204
|
+
}
|
|
205
|
+
if let length = doubleValue(vehicleInfo["length"]) {
|
|
206
|
+
naviVehicleInfo.length = length
|
|
207
|
+
hasAnyValue = true
|
|
208
|
+
}
|
|
209
|
+
if let load = doubleValue(vehicleInfo["load"]) {
|
|
210
|
+
naviVehicleInfo.load = load
|
|
211
|
+
hasAnyValue = true
|
|
212
|
+
}
|
|
213
|
+
if let weight = doubleValue(vehicleInfo["weight"]) {
|
|
214
|
+
naviVehicleInfo.weight = weight
|
|
215
|
+
hasAnyValue = true
|
|
216
|
+
}
|
|
217
|
+
if let axisNums = intValue(vehicleInfo["axisNums"]) {
|
|
218
|
+
naviVehicleInfo.axisNums = axisNums
|
|
219
|
+
hasAnyValue = true
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
if let carType = intValue(options["carType"]) {
|
|
224
|
+
naviVehicleInfo.type = carType
|
|
225
|
+
hasAnyValue = true
|
|
226
|
+
}
|
|
227
|
+
if let carNumber = options["carNumber"] as? String, !carNumber.isEmpty {
|
|
228
|
+
naviVehicleInfo.vehicleId = carNumber
|
|
229
|
+
hasAnyValue = true
|
|
230
|
+
}
|
|
231
|
+
if let restriction = options["restriction"] as? Bool {
|
|
232
|
+
naviVehicleInfo.isETARestriction = restriction
|
|
233
|
+
hasAnyValue = true
|
|
234
|
+
}
|
|
235
|
+
if let motorcycleCC = intValue(options["motorcycleCC"]) {
|
|
236
|
+
naviVehicleInfo.motorcycleCC = motorcycleCC
|
|
237
|
+
hasAnyValue = true
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
return hasAnyValue ? naviVehicleInfo : nil
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
private func convertIndependentDriveResult(
|
|
244
|
+
routeGroup: AMapNaviRouteGroup,
|
|
245
|
+
token: Int
|
|
246
|
+
) -> [String: Any] {
|
|
247
|
+
let orderedRouteIds = routeGroup.naviRouteIDs?.map { $0.intValue } ?? []
|
|
248
|
+
var routes: [[String: Any]] = []
|
|
249
|
+
|
|
250
|
+
if let naviRoutes = routeGroup.naviRoutes {
|
|
251
|
+
let fallbackIds = naviRoutes.keys.map { $0.intValue }.sorted()
|
|
252
|
+
let routeIds = orderedRouteIds.isEmpty ? fallbackIds : orderedRouteIds
|
|
253
|
+
for routeId in routeIds {
|
|
254
|
+
let key = NSNumber(value: routeId)
|
|
255
|
+
guard let route = naviRoutes[key] else { continue }
|
|
256
|
+
routes.append([
|
|
257
|
+
"routeId": routeId,
|
|
258
|
+
"distance": route.routeLength,
|
|
259
|
+
"duration": route.routeTime,
|
|
260
|
+
"tollCost": route.routeTollCost,
|
|
261
|
+
"strategy": "推荐路线",
|
|
262
|
+
"polyline": extractCoordinates(from: route)
|
|
263
|
+
])
|
|
264
|
+
}
|
|
265
|
+
} else if let route = routeGroup.naviRoute {
|
|
266
|
+
let routeId = routeGroup.naviRouteID
|
|
267
|
+
routes.append([
|
|
268
|
+
"routeId": routeId,
|
|
269
|
+
"distance": route.routeLength,
|
|
270
|
+
"duration": route.routeTime,
|
|
271
|
+
"tollCost": route.routeTollCost,
|
|
272
|
+
"strategy": "推荐路线",
|
|
273
|
+
"polyline": extractCoordinates(from: route)
|
|
274
|
+
])
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
let finalRouteIds = orderedRouteIds.isEmpty ? routes.compactMap { $0["routeId"] as? Int } : orderedRouteIds
|
|
278
|
+
let mainRouteId = routeGroup.naviRouteID
|
|
279
|
+
let mainPathIndex = finalRouteIds.firstIndex(of: mainRouteId) ?? 0
|
|
280
|
+
|
|
281
|
+
return [
|
|
282
|
+
"success": true,
|
|
283
|
+
"independent": true,
|
|
284
|
+
"token": token,
|
|
285
|
+
"count": routes.count,
|
|
286
|
+
"mainPathIndex": mainPathIndex,
|
|
287
|
+
"routeIds": finalRouteIds,
|
|
288
|
+
"routes": routes
|
|
289
|
+
]
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
private func intValue(_ raw: Any?) -> Int? {
|
|
293
|
+
if let value = raw as? Int { return value }
|
|
294
|
+
if let value = raw as? NSNumber { return value.intValue }
|
|
295
|
+
if let value = raw as? String { return Int(value) }
|
|
296
|
+
return nil
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
private func doubleValue(_ raw: Any?) -> Double? {
|
|
300
|
+
if let value = raw as? Double { return value }
|
|
301
|
+
if let value = raw as? NSNumber { return value.doubleValue }
|
|
302
|
+
if let value = raw as? String { return Double(value) }
|
|
303
|
+
return nil
|
|
162
304
|
}
|
|
163
305
|
|
|
164
306
|
func destroy() {
|
package/package.json
CHANGED