Commit b02a9847 authored by 7c00's avatar 7c00

移除导航组件

本来导航组件就只是实验性的,因一个暂时无法解决的 bug,无法继续下去。在重新审视导航组件的必要性以及维护成本之后,决定移除导航组件。

同时被移除的还有距离计算,这个功能在 js 端有更好的库可以替代。
parent f2118976
......@@ -57,8 +57,7 @@ jobs:
- brew install yarn
- yarn
- cd ios
- pod repo update
- pod install
- pod install --repo-update
- xcodebuild -workspace RNAMap3D.xcworkspace -scheme RNAMap3D -sdk iphonesimulator -quiet
- stage: "build test for new project"
......@@ -102,8 +101,7 @@ jobs:
pod 'react-native-amap3d', path: '../node_modules/react-native-amap3d/lib/ios'
end
EOF
- pod repo update
- pod install
- pod install --repo-update
- xcodebuild -workspace App.xcworkspace -scheme App -sdk iphonesimulator -quiet
stages:
......
......@@ -196,15 +196,6 @@ $ yarn run-ios
- 尽量使用设备进行测试,在模拟器可能存在一些问题(常见的是 Android 模拟器因为缺少硬件加速而导致闪退)。
## 关于编译问题
鉴于编译问题重复提得太多,且没有什么讨论价值,有必要单独做一些说明。
为了方便排除问题,这个项目是有在持续集成里做编译测试的。
其中在 master 分支做 example 的编译测试,在 release 分支做新项目的编译测试。
在提编译问题之前,请先检查最新的编译测试。当然,如果你熟悉编译过程,
并且发现这个项目的配置确实存在问题,欢迎提出、讨论。
[npm]: https://www.npmjs.com/package/react-native-amap3d
[version-badge]: https://badge.fury.io/js/react-native-amap3d.svg
[build-badge]: https://travis-ci.org/qiuxiang/react-native-amap3d.svg?branch=master
......
......@@ -88,9 +88,6 @@ export default class Examples extends Component {
<View style={styles.separator} />
{this._renderItem('海量点', 'MultiPoint')}
</View>
<View style={styles.group}>
{this._renderItem('导航', 'Navigation')}
</View>
</ScrollView>
)
}
......
......@@ -44,7 +44,6 @@ export default class EventsExample extends Component {
_logPressEvent = ({ nativeEvent }) => this._log('onPress', nativeEvent)
_logLongPressEvent = ({ nativeEvent }) => this._log('onLongPress', nativeEvent)
_logLocationEvent = ({ nativeEvent }) => this._log('onLocation', nativeEvent)
_logStatusChangeEvent = ({ nativeEvent }) => this._log('onStatusChange', nativeEvent)
_logStatusChangeCompleteEvent = ({ nativeEvent }) => this._log('onStatusChangeComplete', nativeEvent)
_renderItem = ({ item }) =>
......@@ -60,7 +59,6 @@ export default class EventsExample extends Component {
onPress={this._logPressEvent}
onLongPress={this._logLongPressEvent}
onLocation={this._logLocationEvent}
onStatusChange={this._logStatusChangeEvent}
onStatusChangeComplete={this._logStatusChangeCompleteEvent}
style={styles.body}
/>
......
import React, { Component } from 'react'
import { StyleSheet } from 'react-native'
import { Navigation } from 'react-native-amap3d'
export default class NavigationExample extends Component {
static navigationOptions = {
title: '导航',
}
componentDidMount() {
this._navigation.calculateRoute(
{
latitude: 39.906901,
longitude: 116.397972,
},
{
latitude: 39.806901,
longitude: 116.397972,
},
[
{
latitude: 39.866901,
longitude: 116.407972,
},
],
)
}
_start = () => this._navigation.start()
render() {
return (
<Navigation.Drive
ref={ref => this._navigation = ref}
style={StyleSheet.absoluteFill}
onCalculateRouteSuccess={this._start}
/>
)
}
}
......@@ -13,7 +13,6 @@ import Polygon from './examples/polygon'
import Circle from './examples/circle'
import Events from './examples/events'
import Offline from './examples/offline'
import Navigation from './examples/navigation'
import HeatMap from './examples/heat-map'
import MultiPoint from './examples/multi-point'
......@@ -31,7 +30,6 @@ export default StackNavigator({
Circle: { screen: Circle },
Events: { screen: Events },
Offline: { screen: Offline },
Navigation: { screen: Navigation },
HeatMap: { screen: HeatMap },
MultiPoint: { screen: MultiPoint },
}, {
......
......@@ -1063,12 +1063,10 @@
inputPaths = (
"${SRCROOT}/Pods/Target Support Files/Pods-RNAMap3D/Pods-RNAMap3D-resources.sh",
"${PODS_ROOT}/AMap3DMap/MAMapKit.framework/AMap.bundle",
"${PODS_ROOT}/AMapNavi/AMapNaviKit.framework/AMapNavi.bundle",
);
name = "[CP] Copy Pods Resources";
outputPaths = (
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AMap.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AMapNavi.bundle",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
......
......@@ -26,6 +26,6 @@ android {
dependencies {
provided 'com.facebook.react:react-native:+'
compile 'com.amap.api:navi-3dmap:6.0.1_3dmap6.1.0'
compile 'com.amap.api:3dmap:6.1.0'
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
package cn.qiuxiang.react.amap3d
import cn.qiuxiang.react.amap3d.maps.*
import cn.qiuxiang.react.amap3d.navigation.AMapDriveManager
import cn.qiuxiang.react.amap3d.navigation.AMapRideManager
import cn.qiuxiang.react.amap3d.navigation.AMapWalkManager
import com.facebook.react.ReactPackage
import com.facebook.react.bridge.NativeModule
import com.facebook.react.bridge.ReactApplicationContext
......@@ -12,7 +9,6 @@ import com.facebook.react.uimanager.ViewManager
class AMap3DPackage : ReactPackage {
override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
return listOf(
AMapUtilsModule(reactContext),
AMapOfflineModule(reactContext)
)
}
......@@ -26,10 +22,7 @@ class AMap3DPackage : ReactPackage {
AMapPolygonManager(),
AMapCircleManager(),
AMapHeatMapManager(),
AMapMultiPointManager(),
AMapDriveManager(),
AMapWalkManager(),
AMapRideManager()
AMapMultiPointManager()
)
}
}
package cn.qiuxiang.react.amap3d
import android.content.res.Resources
val Float.toPx: Int
get() = (this * Resources.getSystem().displayMetrics.density).toInt()
package cn.qiuxiang.react.amap3d
import android.content.res.Resources
import com.amap.api.maps.AMapUtils
import com.amap.api.maps.model.LatLng
import com.facebook.react.bridge.Promise
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReactContextBaseJavaModule
import com.facebook.react.bridge.ReactMethod
@Suppress("unused")
class AMapUtilsModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) {
override fun getName(): String {
return "AMapUtils"
}
@ReactMethod
fun distance(lat1: Double, lng1: Double, lat2: Double, lng2: Double, promise: Promise) {
promise.resolve(AMapUtils.calculateLineDistance(LatLng(lat1, lng1), LatLng(lat2, lng2)))
}
}
val Float.toPx: Int
get() = (this * Resources.getSystem().displayMetrics.density).toInt()
package cn.qiuxiang.react.amap3d.navigation
import android.annotation.SuppressLint
import com.amap.api.navi.enums.PathPlanningStrategy
import com.facebook.react.bridge.ReadableArray
import com.facebook.react.uimanager.ThemedReactContext
@SuppressLint("ViewConstructor")
class AMapDrive(context: ThemedReactContext) : AMapNavigation(context) {
override fun calculateRoute(args: ReadableArray?) {
val points = args?.getArray(2)!!
navigation.calculateDriveRoute(
listOf(latLngFromReadableMap(args.getMap(0))),
listOf(latLngFromReadableMap(args.getMap(1))),
(0 until points.size()).map { latLngFromReadableMap(points.getMap(it)) },
PathPlanningStrategy.DRIVING_DEFAULT
)
}
}
package cn.qiuxiang.react.amap3d.navigation
import com.facebook.react.uimanager.ThemedReactContext
class AMapDriveManager : AMapNavigationManager<AMapDrive>() {
override fun getName(): String {
return "AMapDrive"
}
override fun createViewInstance(reactContext: ThemedReactContext): AMapDrive {
return AMapDrive(reactContext)
}
}
@file:Suppress("OverridingDeprecatedMember", "DEPRECATION", "LeakingThis")
package cn.qiuxiang.react.amap3d.navigation
import com.amap.api.navi.AMapNavi
import com.amap.api.navi.AMapNaviListener
import com.amap.api.navi.AMapNaviView
import com.amap.api.navi.AMapNaviViewListener
import com.amap.api.navi.enums.NaviType
import com.amap.api.navi.model.*
import com.autonavi.tbt.TrafficFacilityInfo
import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.ReadableArray
import com.facebook.react.bridge.ReadableMap
import com.facebook.react.bridge.WritableMap
import com.facebook.react.uimanager.ThemedReactContext
import com.facebook.react.uimanager.events.RCTEventEmitter
abstract class AMapNavigation(context: ThemedReactContext) :
AMapNaviView(context.currentActivity), AMapNaviViewListener, AMapNaviListener {
private val eventEmitter: RCTEventEmitter = context.getJSModule(RCTEventEmitter::class.java)
protected val navigation = AMapNavi.getInstance(context)!!
abstract fun calculateRoute(args: ReadableArray?)
init {
super.onCreate(null)
this.setAMapNaviViewListener(this)
navigation.addAMapNaviListener(this)
}
fun start() {
navigation.startNavi(NaviType.GPS)
}
fun stop() {
navigation.stopNavi()
}
protected fun latLngFromReadableMap(map: ReadableMap): NaviLatLng {
return NaviLatLng(map.getDouble("latitude"), map.getDouble("longitude"))
}
private fun sendEvent(name: String, data: WritableMap = Arguments.createMap()) {
eventEmitter.receiveEvent(id, name, data)
}
override fun onCalculateRouteSuccess(array: IntArray) {
sendEvent("onCalculateRouteSuccess")
}
override fun onCalculateRouteFailure(code: Int) {
val event = Arguments.createMap()
event.putInt("code", code)
sendEvent("onCalculateRouteFailure", event)
}
override fun onInitNaviSuccess() {
}
override fun onServiceAreaUpdate(p0: Array<out AMapServiceAreaInfo>?) {
}
override fun onEndEmulatorNavi() {
}
override fun onArrivedWayPoint(p0: Int) {
}
override fun onArriveDestination() {
}
override fun onPlayRing(p0: Int) {
}
override fun onTrafficStatusUpdate() {
}
override fun onGpsOpenStatus(p0: Boolean) {
}
override fun updateAimlessModeCongestionInfo(p0: AimLessModeCongestionInfo?) {
}
override fun showCross(p0: AMapNaviCross?) {
}
override fun onGetNavigationText(p0: Int, p1: String?) {
}
override fun onGetNavigationText(p0: String?) {
}
override fun updateAimlessModeStatistics(p0: AimLessModeStat?) {
}
override fun hideCross() {
}
override fun onInitNaviFailure() {
}
override fun onReCalculateRouteForTrafficJam() {
}
override fun hideLaneInfo() {
}
override fun onNaviInfoUpdated(p0: AMapNaviInfo?) {
}
override fun updateCameraInfo(p0: Array<out AMapNaviCameraInfo>?) {
}
override fun onLocationChange(p0: AMapNaviLocation?) {
}
override fun onReCalculateRouteForYaw() {
}
override fun onStartNavi(p0: Int) {
}
override fun notifyParallelRoad(p0: Int) {
}
override fun OnUpdateTrafficFacility(p0: AMapNaviTrafficFacilityInfo?) {
}
override fun OnUpdateTrafficFacility(p0: Array<out AMapNaviTrafficFacilityInfo>?) {
}
override fun OnUpdateTrafficFacility(p0: TrafficFacilityInfo?) {
}
override fun onNaviInfoUpdate(p0: NaviInfo?) {
}
override fun onNaviTurnClick() {
}
override fun onNaviViewLoaded() {
}
override fun onNaviBackClick(): Boolean {
return false
}
override fun onNaviMapMode(p0: Int) {
}
override fun onNextRoadClick() {
}
override fun onScanViewButtonClick() {
}
override fun onLockMap(p0: Boolean) {
}
override fun onNaviSetting() {
}
override fun onNaviCancel() {
}
override fun updateIntervalCameraInfo(p0: AMapNaviCameraInfo?, p1: AMapNaviCameraInfo?, p2: Int) {
}
override fun showModeCross(p0: AMapModelCross?) {
}
override fun hideModeCross() {
}
override fun showLaneInfo(p0: Array<out AMapLaneInfo>?, p1: ByteArray?, p2: ByteArray?) {
}
override fun showLaneInfo(p0: AMapLaneInfo?) {
}
}
package cn.qiuxiang.react.amap3d.navigation
import com.facebook.react.bridge.ReadableArray
import com.facebook.react.common.MapBuilder
import com.facebook.react.uimanager.SimpleViewManager
abstract class AMapNavigationManager<T : AMapNavigation> : SimpleViewManager<T>() {
override fun onDropViewInstance(view: T) {
super.onDropViewInstance(view)
view.stop()
view.onDestroy()
}
companion object {
val START = 1
val CALCULATE_ROUTE = 2
}
override fun getCommandsMap(): Map<String, Int> {
return mapOf(
"start" to START,
"calculateRoute" to CALCULATE_ROUTE
)
}
override fun receiveCommand(view: T, commandId: Int, args: ReadableArray?) {
when (commandId) {
START -> view.start()
CALCULATE_ROUTE -> view.calculateRoute(args)
}
}
override fun getExportedCustomDirectEventTypeConstants(): Map<String, Any> {
return MapBuilder.of(
"onCalculateRouteSuccess", MapBuilder.of("registrationName", "onCalculateRouteSuccess"),
"onCalculateRouteFailure", MapBuilder.of("registrationName", "onCalculateRouteFailure")
)
}
}
package cn.qiuxiang.react.amap3d.navigation
import android.annotation.SuppressLint
import com.facebook.react.bridge.ReadableArray
import com.facebook.react.uimanager.ThemedReactContext
@SuppressLint("ViewConstructor")
class AMapRide(context: ThemedReactContext) : AMapNavigation(context) {
override fun calculateRoute(args: ReadableArray?) {
navigation.calculateRideRoute(
latLngFromReadableMap(args?.getMap(0)!!),
latLngFromReadableMap(args.getMap(1))
)
}
}
\ No newline at end of file
package cn.qiuxiang.react.amap3d.navigation
import com.facebook.react.uimanager.ThemedReactContext
class AMapRideManager : AMapNavigationManager<AMapRide>() {
override fun getName(): String {
return "AMapRide"
}
override fun createViewInstance(reactContext: ThemedReactContext): AMapRide {
return AMapRide(reactContext)
}
}
\ No newline at end of file
package cn.qiuxiang.react.amap3d.navigation
import android.annotation.SuppressLint
import com.facebook.react.bridge.ReadableArray
import com.facebook.react.uimanager.ThemedReactContext
@SuppressLint("ViewConstructor")
class AMapWalk(context: ThemedReactContext) : AMapNavigation(context) {
override fun calculateRoute(args: ReadableArray?) {
navigation.calculateWalkRoute(
latLngFromReadableMap(args?.getMap(0)!!),
latLngFromReadableMap(args.getMap(1))
)
}
}
\ No newline at end of file
package cn.qiuxiang.react.amap3d.navigation
import com.facebook.react.uimanager.ThemedReactContext
class AMapWalkManager : AMapNavigationManager<AMapWalk>() {
override fun getName(): String {
return "AMapWalk"
}
override fun createViewInstance(reactContext: ThemedReactContext): AMapWalk {
return AMapWalk(reactContext)
}
}
\ No newline at end of file
This diff is collapsed.
#import <React/RCTBridgeModule.h>
#import <MAMapKit/MAGeometry.h>
#pragma ide diagnostic ignored "OCUnusedClassInspection"
@interface AMapUtils : NSObject <RCTBridgeModule>
@end
@implementation AMapUtils
RCT_EXPORT_MODULE()
RCT_EXPORT_METHOD(distance:(double)lat1
lng1:(double)lng1
lat2:(double)lat2
lng2:(double)lng2
resolve:(RCTPromiseResolveBlock)resolve
reject:(RCTPromiseRejectBlock)reject) {
resolve(@(MAMetersBetweenMapPoints(
MAMapPointForCoordinate(CLLocationCoordinate2DMake(lat1, lng1)),
MAMapPointForCoordinate(CLLocationCoordinate2DMake(lat2, lng2))
)));
}
@end
#import <MAMapKit/MAMapView.h>
#import <AMapNaviKit/AMapNaviCommonObj.h>
#import <React/RCTConvert.h>
#import <React/RCTConvert+CoreLocation.h>
#import "Coordinate.h"
......@@ -55,15 +54,8 @@ RCT_ENUM_CONVERTER(MAPinAnnotationColor, (@{
[self CLLocationDegrees:json[@"longitudeDelta"]]));
}
+ (AMapNaviPoint *)AMapNaviPoint:(id)json {
return [AMapNaviPoint
locationWithLatitude:[self CGFloat:json[@"latitude"]]
longitude:[self CGFloat:json[@"longitude"]]];
}
RCT_ARRAY_CONVERTER(Coordinate)
RCT_ARRAY_CONVERTER(MAHeatMapNode)
RCT_ARRAY_CONVERTER(MAMultiPointItem)
RCT_ARRAY_CONVERTER(AMapNaviPoint)
@end
#import <AMapNaviKit/AMapNaviDriveView.h>
#import <React/RCTComponent.h>
@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/AMapNaviDriveManager.h>
#import "AMapNavigationManager.h"
#import "AMapDrive.h"
@interface AMapDriveManager : RCTViewManager <AMapNaviDriveManagerDelegate>
+ (AMapDrive *)navigationView;
+ (AMapNaviDriveManager *)navigationManager;
@end
@implementation AMapDriveManager {
AMapDrive *_navigationView;
AMapNaviDriveManager *_navigationManager;
}
INIT(AMapDriveManager)
NAVIGATION_VIEW(AMapDrive)
NAVIGATION_MANAGER(AMapDriveManager, AMapNaviDriveManager)
RCT_EXPORT_METHOD(calculateRoute:(nonnull NSNumber *)reactTag
start:(AMapNaviPoint *)start
end:(AMapNaviPoint *)end
way:(NSArray<AMapNaviPoint *> *)way) {
[_navigationManager calculateDriveRouteWithStartPoints:@[start]
endPoints:@[end]
wayPoints:way
drivingStrategy:AMapNaviDrivingStrategySingleDefault];
}
- (void)driveManagerOnCalculateRouteSuccess:(AMapNaviDriveManager *)driveManager {
if (_navigationView.onCalculateRouteSuccess) {
_navigationView.onCalculateRouteSuccess(nil);
}
}
- (void)driveManager:(AMapNaviDriveManager *)driveManager onCalculateRouteFailure:(NSError *)error {
if (_navigationView.onCalculateRouteFailure) {
_navigationView.onCalculateRouteFailure(@{
@"code": @(error.code),
});
}
}
@end
#define INIT(clazz) \
- (instancetype)init { \
if (self = [super init]) { \
_navigationView = [clazz navigationView]; \
_navigationManager = [clazz navigationManager]; \
_navigationManager.delegate = self; \
} \
return self; \
} \
\
- (UIView *)view { \
return _navigationView; \
} \
\
RCT_EXPORT_MODULE() \
RCT_EXPORT_VIEW_PROPERTY(onCalculateRouteSuccess, RCTBubblingEventBlock) \
RCT_EXPORT_VIEW_PROPERTY(onCalculateRouteFailure, RCTBubblingEventBlock) \
RCT_EXPORT_METHOD(start:(nonnull NSNumber *)reactTag) { \
[_navigationManager startGPSNavi]; \
} \
#define NAVIGATION_VIEW(type) \
+ (type *)navigationView { \
static type *view; \
if (view == nil) view = [type new]; \
return view; \
} \
#define NAVIGATION_MANAGER(clazz, type) \
+ (type *)navigationManager { \
static type *manager; \
if (manager == nil) { \
manager = [type new]; \
[manager addDataRepresentative:[clazz navigationView]]; \
} \
return manager; \
} \
#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/AMapNaviRideManager.h>
#import "AMapNavigationManager.h"
#import "AMapRide.h"
@interface AMapRideManager : RCTViewManager <AMapNaviRideManagerDelegate>
+ (AMapRide *)navigationView;
+ (AMapNaviRideManager *)navigationManager;
@end
@implementation AMapRideManager {
AMapRide *_navigationView;
AMapNaviRideManager *_navigationManager;
}
INIT(AMapRideManager)
NAVIGATION_VIEW(AMapRide)
NAVIGATION_MANAGER(AMapRideManager, AMapNaviRideManager)
RCT_EXPORT_METHOD(calculateRoute:(nonnull NSNumber *)reactTag
start:(AMapNaviPoint *)start
end:(AMapNaviPoint *)end
way:(NSArray<AMapNaviPoint *> *)way) {
[_navigationManager calculateRideRouteWithStartPoint:start endPoint:end];
}
- (void)rideManagerOnCalculateRouteSuccess:(AMapNaviRideManager *)rideManager {
if (_navigationView.onCalculateRouteSuccess) {
_navigationView.onCalculateRouteSuccess(nil);
}
}
- (void)rideManager:(AMapNaviRideManager *)rideManager onCalculateRouteFailure:(NSError *)error {
if (_navigationView.onCalculateRouteFailure) {
_navigationView.onCalculateRouteFailure(@{
@"code": @(error.code),
});
}
}
@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/AMapNaviWalkManager.h>
#import "AMapNavigationManager.h"
#import "AMapWalk.h"
@interface AMapWalkManager : RCTViewManager <AMapNaviWalkManagerDelegate>
+ (AMapWalk *)navigationView;
+ (AMapNaviWalkManager *)navigationManager;
@end
@implementation AMapWalkManager {
AMapWalk *_navigationView;
AMapNaviWalkManager *_navigationManager;
}
INIT(AMapWalkManager)
NAVIGATION_VIEW(AMapWalk)
NAVIGATION_MANAGER(AMapWalkManager, AMapNaviWalkManager)
RCT_EXPORT_METHOD(calculateRoute:(nonnull NSNumber *)reactTag
start:(AMapNaviPoint *)start
end:(AMapNaviPoint *)end
way:(NSArray<AMapNaviPoint *> *)way) {
[_navigationManager calculateWalkRouteWithStartPoints:@[start] endPoints:@[end]];
}
- (void)walkManagerOnCalculateRouteSuccess:(AMapNaviWalkManager *)walkManager {
if (_navigationView.onCalculateRouteSuccess) {
_navigationView.onCalculateRouteSuccess(nil);
}
}
- (void)walkManager:(AMapNaviWalkManager *)walkManager onCalculateRouteFailure:(NSError *)error {
if (_navigationView.onCalculateRouteFailure) {
_navigationView.onCalculateRouteFailure(@{
@"code": @(error.code),
});
}
}
@end
......@@ -16,5 +16,5 @@ Pod::Spec.new do |s|
s.source_files = '**/*.{h,m}'
s.dependency 'React'
s.dependency 'AMapNavi', "~> 6.0.0"
s.dependency 'AMap3DMap', "~> 6.1.0"
end
// @flow
import { NativeModules } from 'react-native'
const { AMapUtils } = NativeModules
export default {
/**
* 计算两点距离
*/
distance: (
lat1: number,
lng1: number,
lat2: number,
lng2: number,
): Promise<number> => AMapUtils.distance(lat1, lng1, lat2, lng2),
}
......@@ -5,8 +5,6 @@ import Polygon from './maps/Polygon'
import Circle from './maps/Circle'
import HeatMap from './maps/HeatMap'
import MultiPoint from './maps/MultiPoint'
import Navigation from './navigation'
import Utils from './Utils'
import Offline from './Offline'
MapView.Marker = Marker
......@@ -25,7 +23,5 @@ export {
Circle,
HeatMap,
MultiPoint,
Navigation,
Utils,
Offline,
}
// @flow
import PropTypes from 'prop-types'
import { ViewPropTypes } from 'react-native'
import { LatLng } from '../PropTypes'
import Component from '../Component'
export default class Base extends Component<any> {
static propTypes = {
...ViewPropTypes,
/**
* 路径规划成功事件
*/
onCalculateRouteSuccess: PropTypes.func,
/**
* 路径规划失败事件
*/
onCalculateRouteFailure: PropTypes.func,
}
/**
* 路线规划
*/
calculateRoute(start: LatLng, end: LatLng, way: LatLng[] = []) {
this.sendCommand('calculateRoute', [start, end, way])
}
/**
* 开始导航
*/
start() {
this.sendCommand('start')
}
}
// @flow
import React from 'react'
import { requireNativeComponent } from 'react-native'
import Base from './Base'
export default class Drive extends Base {
render() {
return <AMapDrive {...this.props} />
}
name = 'AMapDrive'
}
const AMapDrive = requireNativeComponent('AMapDrive', Drive)
// @flow
import React from 'react'
import { requireNativeComponent } from 'react-native'
import Base from './Base'
export default class Ride extends Base {
render() {
return <AMapRide {...this.props} />
}
name = 'AMapRide'
}
const AMapRide = requireNativeComponent('AMapRide', Ride)
// @flow
import React from 'react'
import { requireNativeComponent } from 'react-native'
import Base from './Base'
export default class Walk extends Base {
render() {
return <AMapWalk {...this.props} />
}
name = 'AMapWalk'
}
const AMapWalk = requireNativeComponent('AMapWalk', Walk)
import Drive from './Drive'
import Ride from './Ride'
import Walk from './Walk'
export default { Drive, Ride, Walk }
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