Commit 065c2f0e authored by 7c00's avatar 7c00

实现 iOS 步行、骑行导航

parent 633d5e78
import React, {Component} from 'react'
import {StyleSheet} from 'react-native'
import {Navigation} from 'react-native-amap3d'
import {Drive} from 'react-native-amap3d'
export default class NavigationExample extends Component {
static navigationOptions = {
......@@ -8,7 +8,7 @@ export default class NavigationExample extends Component {
}
componentDidMount() {
this._navigation.calculateDriveRoute(
this._navigation.calculateRoute(
{
latitude: 39.906901,
longitude: 116.397972,
......@@ -20,10 +20,10 @@ export default class NavigationExample extends Component {
)
}
_start = () => this._navigation.start()
_start = () => {}
render() {
return <Navigation
return <Drive
ref={ref => this._navigation = ref}
style={StyleSheet.absoluteFill}
onCalculateRouteSuccess={this._start}
......
#import <AMapNaviKit/AMapNaviDriveView.h>
#import <React/RCTComponent.h>
@interface AMapNavigation : AMapNaviDriveView
@interface AMapDrive : AMapNaviDriveView
@property(nonatomic, copy) RCTBubblingEventBlock onCalculateRouteSuccess;
@property(nonatomic, copy) RCTBubblingEventBlock onCalculateRouteFailure;
@end
\ No newline at end of file
#import "AMapDrive.h"
@implementation AMapDrive {
}
@end
\ No newline at end of file
#import <React/RCTUIManager.h>
#import <AMapNaviKit/AMapNaviDriveView.h>
#import <AMapNaviKit/AMapNaviDriveManager.h>
#import "AMapNavigation.h"
#import "AMapDrive.h"
#pragma ide diagnostic ignored "OCUnusedClassInspection"
@interface AMapNavigationManager : RCTViewManager <AMapNaviDriveManagerDelegate>
+ (AMapNavigation *)driveView;
@interface AMapDriveManager : RCTViewManager <AMapNaviDriveManagerDelegate>
+ (AMapDrive *)driveView;
+ (AMapNaviDriveManager *)driveManager;
@end
@implementation AMapNavigationManager {
AMapNavigation *_driveView;
@implementation AMapDriveManager {
AMapDrive *_driveView;
AMapNaviDriveManager *_driveManager;
}
- (instancetype)init {
if (self = [super init]) {
_driveView = [AMapNavigationManager driveView];
_driveManager = [AMapNavigationManager driveManager];
_driveView = [AMapDriveManager driveView];
_driveManager = [AMapDriveManager driveManager];
_driveManager.delegate = self;
}
return self;
......@@ -27,8 +27,9 @@
RCT_EXPORT_MODULE()
RCT_EXPORT_VIEW_PROPERTY(onCalculateRouteSuccess, RCTBubblingEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onCalculateRouteFailure, RCTBubblingEventBlock)
RCT_EXPORT_METHOD(calculateDriveRoute:(nonnull NSNumber *)reactTag start:(AMapNaviPoint *)start endPoints:(AMapNaviPoint *)end) {
RCT_EXPORT_METHOD(calculateRoute:(nonnull NSNumber *)reactTag start:(AMapNaviPoint *)start end:(AMapNaviPoint *)end way:(NSArray<AMapNaviPoint *> *)way) {
[self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
[_driveManager calculateDriveRouteWithStartPoints:@[start]
endPoints:@[end]
......@@ -53,19 +54,27 @@ RCT_EXPORT_METHOD(start:(nonnull NSNumber *)reactTag) {
}
}
- (void)driveManager:(AMapNaviDriveManager *)driveManager onCalculateRouteFailure:(NSError *)error {
if (_driveView.onCalculateRouteFailure) {
_driveView.onCalculateRouteFailure(@{
@"code": @(error.code),
});
}
}
+ (AMapNaviDriveManager *)driveManager {
static AMapNaviDriveManager *driveManager;
if (driveManager == nil) {
driveManager = [AMapNaviDriveManager new];
[driveManager addDataRepresentative:[AMapNavigationManager driveView]];
[driveManager addDataRepresentative:[AMapDriveManager driveView]];
}
return driveManager;
}
+ (AMapNavigation *)driveView {
static AMapNavigation *driveView;
+ (AMapDrive *)driveView {
static AMapDrive *driveView;
if (driveView == nil) {
driveView = [AMapNavigation new];
driveView = [AMapDrive new];
}
return driveView;
}
......
#import "AMapNavigation.h"
@implementation AMapNavigation {
}
@end
\ No newline at end of file
#import <AMapNaviKit/AMapNaviRideView.h>
#import <React/RCTComponent.h>
@interface AMapRide : AMapNaviRideView
@property(nonatomic, copy) RCTBubblingEventBlock onCalculateRouteSuccess;
@property(nonatomic, copy) RCTBubblingEventBlock onCalculateRouteFailure;
@end
\ No newline at end of file
#import "AMapRide.h"
@implementation AMapRide {
}
@end
\ No newline at end of file
#import <React/RCTUIManager.h>
#import <AMapNaviKit/AMapNaviRideView.h>
#import <AMapNaviKit/AMapNaviRideManager.h>
#import "AMapRide.h"
#pragma ide diagnostic ignored "OCUnusedClassInspection"
@interface AMapRideManager : RCTViewManager <AMapNaviRideManagerDelegate>
+ (AMapRide *)rideView;
+ (AMapNaviRideManager *)rideManager;
@end
@implementation AMapRideManager {
AMapRide *_rideView;
AMapNaviRideManager *_rideManager;
}
- (instancetype)init {
if (self = [super init]) {
_rideView = [AMapRideManager rideView];
_rideManager = [AMapRideManager rideManager];
_rideManager.delegate = self;
}
return self;
}
RCT_EXPORT_MODULE()
RCT_EXPORT_VIEW_PROPERTY(onCalculateRouteSuccess, RCTBubblingEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onCalculateRouteFailure, RCTBubblingEventBlock)
RCT_EXPORT_METHOD(calculateRoute:(nonnull NSNumber *)reactTag start:(AMapNaviPoint *)start end:(AMapNaviPoint *)end) {
[self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
[_rideManager calculateRideRouteWithStartPoint:start
endPoint:end];
}];
}
RCT_EXPORT_METHOD(start:(nonnull NSNumber *)reactTag) {
[self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
[_rideManager startGPSNavi];
}];
}
- (UIView *)view {
return _rideView;
}
- (void)rideManagerOnCalculateRouteSuccess:(AMapNaviRideManager *)rideManager {
if (_rideView.onCalculateRouteSuccess) {
_rideView.onCalculateRouteSuccess(nil);
}
}
- (void)rideManager:(AMapNaviRideManager *)rideManager onCalculateRouteFailure:(NSError *)error {
if (_rideView.onCalculateRouteFailure) {
_rideView.onCalculateRouteFailure(@{
@"code": @(error.code),
});
}
}
+ (AMapNaviRideManager *)rideManager {
static AMapNaviRideManager *rideManager;
if (rideManager == nil) {
rideManager = [AMapNaviRideManager new];
[rideManager addDataRepresentative:[AMapRideManager rideView]];
}
return rideManager;
}
+ (AMapRide *)rideView {
static AMapRide *rideView;
if (rideView == nil) {
rideView = [AMapRide new];
}
return rideView;
}
@end
#import <AMapNaviKit/AMapNaviWalkView.h>
#import <React/RCTComponent.h>
@interface AMapWalk : AMapNaviWalkView
@property(nonatomic, copy) RCTBubblingEventBlock onCalculateRouteSuccess;
@property(nonatomic, copy) RCTBubblingEventBlock onCalculateRouteFailure;
@end
\ No newline at end of file
#import "AMapWalk.h"
@implementation AMapWalk {
}
@end
\ No newline at end of file
#import <React/RCTUIManager.h>
#import <AMapNaviKit/AMapNaviWalkView.h>
#import <AMapNaviKit/AMapNaviWalkManager.h>
#import "AMapWalk.h"
#pragma ide diagnostic ignored "OCUnusedClassInspection"
@interface AMapWalkManager : RCTViewManager <AMapNaviWalkManagerDelegate>
+ (AMapWalk *)walkView;
+ (AMapNaviWalkManager *)walkManager;
@end
@implementation AMapWalkManager {
AMapWalk *_walkView;
AMapNaviWalkManager *_walkManager;
}
- (instancetype)init {
if (self = [super init]) {
_walkView = [AMapWalkManager walkView];
_walkManager = [AMapWalkManager walkManager];
_walkManager.delegate = self;
}
return self;
}
RCT_EXPORT_MODULE()
RCT_EXPORT_VIEW_PROPERTY(onCalculateRouteSuccess, RCTBubblingEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onCalculateRouteFailure, RCTBubblingEventBlock)
RCT_EXPORT_METHOD(calculateRoute:(nonnull NSNumber *)reactTag start:(AMapNaviPoint *)start end:(AMapNaviPoint *)end) {
[self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
[_walkManager calculateWalkRouteWithStartPoints:@[start]
endPoints:@[end]];
}];
}
RCT_EXPORT_METHOD(start:(nonnull NSNumber *)reactTag) {
[self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
[_walkManager startGPSNavi];
}];
}
- (UIView *)view {
return _walkView;
}
- (void)walkManagerOnCalculateRouteSuccess:(AMapNaviWalkManager *)walkManager {
if (_walkView.onCalculateRouteSuccess) {
_walkView.onCalculateRouteSuccess(nil);
}
}
- (void)walkManager:(AMapNaviWalkManager *)walkManager onCalculateRouteFailure:(NSError *)error {
if (_walkView.onCalculateRouteFailure) {
_walkView.onCalculateRouteFailure(@{
@"code": @(error.code),
});
}
}
+ (AMapNaviWalkManager *)walkManager {
static AMapNaviWalkManager *walkManager;
if (walkManager == nil) {
walkManager = [AMapNaviWalkManager new];
[walkManager addDataRepresentative:[AMapWalkManager walkView]];
}
return walkManager;
}
+ (AMapWalk *)walkView {
static AMapWalk *walkView;
if (walkView == nil) {
walkView = [AMapWalk new];
}
return walkView;
}
@end
......@@ -39,5 +39,6 @@ RCT_ENUM_CONVERTER(MAPinAnnotationColor, (@{
}
RCT_ARRAY_CONVERTER(Coordinate)
RCT_ARRAY_CONVERTER(AMapNaviPoint)
@end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment