Commit b02a9847 authored by 7c00's avatar 7c00

移除导航组件

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

同时被移除的还有距离计算,这个功能在 js 端有更好的库可以替代。
parent f2118976
...@@ -57,8 +57,7 @@ jobs: ...@@ -57,8 +57,7 @@ jobs:
- brew install yarn - brew install yarn
- yarn - yarn
- cd ios - cd ios
- pod repo update - pod install --repo-update
- pod install
- xcodebuild -workspace RNAMap3D.xcworkspace -scheme RNAMap3D -sdk iphonesimulator -quiet - xcodebuild -workspace RNAMap3D.xcworkspace -scheme RNAMap3D -sdk iphonesimulator -quiet
- stage: "build test for new project" - stage: "build test for new project"
...@@ -102,8 +101,7 @@ jobs: ...@@ -102,8 +101,7 @@ jobs:
pod 'react-native-amap3d', path: '../node_modules/react-native-amap3d/lib/ios' pod 'react-native-amap3d', path: '../node_modules/react-native-amap3d/lib/ios'
end end
EOF EOF
- pod repo update - pod install --repo-update
- pod install
- xcodebuild -workspace App.xcworkspace -scheme App -sdk iphonesimulator -quiet - xcodebuild -workspace App.xcworkspace -scheme App -sdk iphonesimulator -quiet
stages: stages:
......
...@@ -196,15 +196,6 @@ $ yarn run-ios ...@@ -196,15 +196,6 @@ $ yarn run-ios
- 尽量使用设备进行测试,在模拟器可能存在一些问题(常见的是 Android 模拟器因为缺少硬件加速而导致闪退)。 - 尽量使用设备进行测试,在模拟器可能存在一些问题(常见的是 Android 模拟器因为缺少硬件加速而导致闪退)。
## 关于编译问题
鉴于编译问题重复提得太多,且没有什么讨论价值,有必要单独做一些说明。
为了方便排除问题,这个项目是有在持续集成里做编译测试的。
其中在 master 分支做 example 的编译测试,在 release 分支做新项目的编译测试。
在提编译问题之前,请先检查最新的编译测试。当然,如果你熟悉编译过程,
并且发现这个项目的配置确实存在问题,欢迎提出、讨论。
[npm]: https://www.npmjs.com/package/react-native-amap3d [npm]: https://www.npmjs.com/package/react-native-amap3d
[version-badge]: https://badge.fury.io/js/react-native-amap3d.svg [version-badge]: https://badge.fury.io/js/react-native-amap3d.svg
[build-badge]: https://travis-ci.org/qiuxiang/react-native-amap3d.svg?branch=master [build-badge]: https://travis-ci.org/qiuxiang/react-native-amap3d.svg?branch=master
......
...@@ -88,9 +88,6 @@ export default class Examples extends Component { ...@@ -88,9 +88,6 @@ export default class Examples extends Component {
<View style={styles.separator} /> <View style={styles.separator} />
{this._renderItem('海量点', 'MultiPoint')} {this._renderItem('海量点', 'MultiPoint')}
</View> </View>
<View style={styles.group}>
{this._renderItem('导航', 'Navigation')}
</View>
</ScrollView> </ScrollView>
) )
} }
......
...@@ -44,7 +44,6 @@ export default class EventsExample extends Component { ...@@ -44,7 +44,6 @@ export default class EventsExample extends Component {
_logPressEvent = ({ nativeEvent }) => this._log('onPress', nativeEvent) _logPressEvent = ({ nativeEvent }) => this._log('onPress', nativeEvent)
_logLongPressEvent = ({ nativeEvent }) => this._log('onLongPress', nativeEvent) _logLongPressEvent = ({ nativeEvent }) => this._log('onLongPress', nativeEvent)
_logLocationEvent = ({ nativeEvent }) => this._log('onLocation', nativeEvent) _logLocationEvent = ({ nativeEvent }) => this._log('onLocation', nativeEvent)
_logStatusChangeEvent = ({ nativeEvent }) => this._log('onStatusChange', nativeEvent)
_logStatusChangeCompleteEvent = ({ nativeEvent }) => this._log('onStatusChangeComplete', nativeEvent) _logStatusChangeCompleteEvent = ({ nativeEvent }) => this._log('onStatusChangeComplete', nativeEvent)
_renderItem = ({ item }) => _renderItem = ({ item }) =>
...@@ -60,7 +59,6 @@ export default class EventsExample extends Component { ...@@ -60,7 +59,6 @@ export default class EventsExample extends Component {
onPress={this._logPressEvent} onPress={this._logPressEvent}
onLongPress={this._logLongPressEvent} onLongPress={this._logLongPressEvent}
onLocation={this._logLocationEvent} onLocation={this._logLocationEvent}
onStatusChange={this._logStatusChangeEvent}
onStatusChangeComplete={this._logStatusChangeCompleteEvent} onStatusChangeComplete={this._logStatusChangeCompleteEvent}
style={styles.body} 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' ...@@ -13,7 +13,6 @@ import Polygon from './examples/polygon'
import Circle from './examples/circle' import Circle from './examples/circle'
import Events from './examples/events' import Events from './examples/events'
import Offline from './examples/offline' import Offline from './examples/offline'
import Navigation from './examples/navigation'
import HeatMap from './examples/heat-map' import HeatMap from './examples/heat-map'
import MultiPoint from './examples/multi-point' import MultiPoint from './examples/multi-point'
...@@ -31,7 +30,6 @@ export default StackNavigator({ ...@@ -31,7 +30,6 @@ export default StackNavigator({
Circle: { screen: Circle }, Circle: { screen: Circle },
Events: { screen: Events }, Events: { screen: Events },
Offline: { screen: Offline }, Offline: { screen: Offline },
Navigation: { screen: Navigation },
HeatMap: { screen: HeatMap }, HeatMap: { screen: HeatMap },
MultiPoint: { screen: MultiPoint }, MultiPoint: { screen: MultiPoint },
}, { }, {
......
...@@ -1063,12 +1063,10 @@ ...@@ -1063,12 +1063,10 @@
inputPaths = ( inputPaths = (
"${SRCROOT}/Pods/Target Support Files/Pods-RNAMap3D/Pods-RNAMap3D-resources.sh", "${SRCROOT}/Pods/Target Support Files/Pods-RNAMap3D/Pods-RNAMap3D-resources.sh",
"${PODS_ROOT}/AMap3DMap/MAMapKit.framework/AMap.bundle", "${PODS_ROOT}/AMap3DMap/MAMapKit.framework/AMap.bundle",
"${PODS_ROOT}/AMapNavi/AMapNaviKit.framework/AMapNavi.bundle",
); );
name = "[CP] Copy Pods Resources"; name = "[CP] Copy Pods Resources";
outputPaths = ( outputPaths = (
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AMap.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AMap.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AMapNavi.bundle",
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
......
...@@ -26,6 +26,6 @@ android { ...@@ -26,6 +26,6 @@ android {
dependencies { dependencies {
provided 'com.facebook.react:react-native:+' 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" compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
} }
package cn.qiuxiang.react.amap3d package cn.qiuxiang.react.amap3d
import cn.qiuxiang.react.amap3d.maps.* 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.ReactPackage
import com.facebook.react.bridge.NativeModule import com.facebook.react.bridge.NativeModule
import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.ReactApplicationContext
...@@ -12,7 +9,6 @@ import com.facebook.react.uimanager.ViewManager ...@@ -12,7 +9,6 @@ import com.facebook.react.uimanager.ViewManager
class AMap3DPackage : ReactPackage { class AMap3DPackage : ReactPackage {
override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> { override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
return listOf( return listOf(
AMapUtilsModule(reactContext),
AMapOfflineModule(reactContext) AMapOfflineModule(reactContext)
) )
} }
...@@ -26,10 +22,7 @@ class AMap3DPackage : ReactPackage { ...@@ -26,10 +22,7 @@ class AMap3DPackage : ReactPackage {
AMapPolygonManager(), AMapPolygonManager(),
AMapCircleManager(), AMapCircleManager(),
AMapHeatMapManager(), AMapHeatMapManager(),
AMapMultiPointManager(), AMapMultiPointManager()
AMapDriveManager(),
AMapWalkManager(),
AMapRideManager()
) )
} }
} }
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
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
39D927782001411800857EB9 /* Coordinate.m in Sources */ = {isa = PBXBuildFile; fileRef = 39D927702001411700857EB9 /* Coordinate.m */; };
39D927792001411800857EB9 /* RCTConvert+AMap3D.m in Sources */ = {isa = PBXBuildFile; fileRef = 39D927712001411700857EB9 /* RCTConvert+AMap3D.m */; };
39D9277A2001411800857EB9 /* AMapUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 39D927742001411700857EB9 /* AMapUtils.m */; };
39D9277B2001411800857EB9 /* LocationStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 39D927762001411800857EB9 /* LocationStyle.m */; };
39D9277C2001411800857EB9 /* AMapOffline.m in Sources */ = {isa = PBXBuildFile; fileRef = 39D927772001411800857EB9 /* AMapOffline.m */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
58B511D91A9E6C8500147676 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "include/$(PRODUCT_NAME)";
dstSubfolderSpec = 16;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
134814201AA4EA6300B7C361 /* libAMap3D.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAMap3D.a; sourceTree = BUILT_PRODUCTS_DIR; };
39D9276F2001411700857EB9 /* Coordinate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Coordinate.h; path = AMap3D/Coordinate.h; sourceTree = "<group>"; };
39D927702001411700857EB9 /* Coordinate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Coordinate.m; path = AMap3D/Coordinate.m; sourceTree = "<group>"; };
39D927712001411700857EB9 /* RCTConvert+AMap3D.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "RCTConvert+AMap3D.m"; path = "AMap3D/RCTConvert+AMap3D.m"; sourceTree = "<group>"; };
39D927722001411700857EB9 /* maps */ = {isa = PBXFileReference; lastKnownFileType = folder; name = maps; path = AMap3D/maps; sourceTree = "<group>"; };
39D927732001411700857EB9 /* navigation */ = {isa = PBXFileReference; lastKnownFileType = folder; name = navigation; path = AMap3D/navigation; sourceTree = "<group>"; };
39D927742001411700857EB9 /* AMapUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AMapUtils.m; path = AMap3D/AMapUtils.m; sourceTree = "<group>"; };
39D927752001411800857EB9 /* LocationStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LocationStyle.h; path = AMap3D/LocationStyle.h; sourceTree = "<group>"; };
39D927762001411800857EB9 /* LocationStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LocationStyle.m; path = AMap3D/LocationStyle.m; sourceTree = "<group>"; };
39D927772001411800857EB9 /* AMapOffline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AMapOffline.m; path = AMap3D/AMapOffline.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
58B511D81A9E6C8500147676 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
134814211AA4EA7D00B7C361 /* Products */ = {
isa = PBXGroup;
children = (
134814201AA4EA6300B7C361 /* libAMap3D.a */,
);
name = Products;
sourceTree = "<group>";
};
58B511D21A9E6C8500147676 = {
isa = PBXGroup;
children = (
39D927772001411800857EB9 /* AMapOffline.m */,
39D927742001411700857EB9 /* AMapUtils.m */,
39D9276F2001411700857EB9 /* Coordinate.h */,
39D927702001411700857EB9 /* Coordinate.m */,
39D927752001411800857EB9 /* LocationStyle.h */,
39D927762001411800857EB9 /* LocationStyle.m */,
39D927722001411700857EB9 /* maps */,
39D927732001411700857EB9 /* navigation */,
39D927712001411700857EB9 /* RCTConvert+AMap3D.m */,
134814211AA4EA7D00B7C361 /* Products */,
);
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
58B511DA1A9E6C8500147676 /* AMap3D */ = {
isa = PBXNativeTarget;
buildConfigurationList = 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "AMap3D" */;
buildPhases = (
58B511D71A9E6C8500147676 /* Sources */,
58B511D81A9E6C8500147676 /* Frameworks */,
58B511D91A9E6C8500147676 /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
name = AMap3D;
productName = RCTDataManager;
productReference = 134814201AA4EA6300B7C361 /* libAMap3D.a */;
productType = "com.apple.product-type.library.static";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
58B511D31A9E6C8500147676 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0610;
ORGANIZATIONNAME = Facebook;
TargetAttributes = {
58B511DA1A9E6C8500147676 = {
CreatedOnToolsVersion = 6.1.1;
};
};
};
buildConfigurationList = 58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "AMap3D" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = 58B511D21A9E6C8500147676;
productRefGroup = 58B511D21A9E6C8500147676;
projectDirPath = "";
projectRoot = "";
targets = (
58B511DA1A9E6C8500147676 /* AMap3D */,
);
};
/* End PBXProject section */
/* Begin PBXSourcesBuildPhase section */
58B511D71A9E6C8500147676 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
39D9277B2001411800857EB9 /* LocationStyle.m in Sources */,
39D927782001411800857EB9 /* Coordinate.m in Sources */,
39D927792001411800857EB9 /* RCTConvert+AMap3D.m in Sources */,
39D9277A2001411800857EB9 /* AMapUtils.m in Sources */,
39D9277C2001411800857EB9 /* AMapOffline.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
58B511ED1A9E6C8500147676 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
};
name = Debug;
};
58B511EE1A9E6C8500147676 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = YES;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
58B511F01A9E6C8500147676 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
HEADER_SEARCH_PATHS = (
"$(inherited)",
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
"$(SRCROOT)/../../../React/**",
"$(SRCROOT)/../../react-native/React/**",
);
LIBRARY_SEARCH_PATHS = "$(inherited)";
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = AMap3D;
SKIP_INSTALL = YES;
};
name = Debug;
};
58B511F11A9E6C8500147676 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
HEADER_SEARCH_PATHS = (
"$(inherited)",
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
"$(SRCROOT)/../../../React/**",
"$(SRCROOT)/../../react-native/React/**",
);
LIBRARY_SEARCH_PATHS = "$(inherited)";
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = AMap3D;
SKIP_INSTALL = YES;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "AMap3D" */ = {
isa = XCConfigurationList;
buildConfigurations = (
58B511ED1A9E6C8500147676 /* Debug */,
58B511EE1A9E6C8500147676 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "AMap3D" */ = {
isa = XCConfigurationList;
buildConfigurations = (
58B511F01A9E6C8500147676 /* Debug */,
58B511F11A9E6C8500147676 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 58B511D31A9E6C8500147676 /* Project object */;
}
#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 <MAMapKit/MAMapView.h>
#import <AMapNaviKit/AMapNaviCommonObj.h>
#import <React/RCTConvert.h> #import <React/RCTConvert.h>
#import <React/RCTConvert+CoreLocation.h> #import <React/RCTConvert+CoreLocation.h>
#import "Coordinate.h" #import "Coordinate.h"
...@@ -55,15 +54,8 @@ RCT_ENUM_CONVERTER(MAPinAnnotationColor, (@{ ...@@ -55,15 +54,8 @@ RCT_ENUM_CONVERTER(MAPinAnnotationColor, (@{
[self CLLocationDegrees:json[@"longitudeDelta"]])); [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(Coordinate)
RCT_ARRAY_CONVERTER(MAHeatMapNode) RCT_ARRAY_CONVERTER(MAHeatMapNode)
RCT_ARRAY_CONVERTER(MAMultiPointItem) RCT_ARRAY_CONVERTER(MAMultiPointItem)
RCT_ARRAY_CONVERTER(AMapNaviPoint)
@end @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| ...@@ -16,5 +16,5 @@ Pod::Spec.new do |s|
s.source_files = '**/*.{h,m}' s.source_files = '**/*.{h,m}'
s.dependency 'React' s.dependency 'React'
s.dependency 'AMapNavi', "~> 6.0.0" s.dependency 'AMap3DMap', "~> 6.1.0"
end 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' ...@@ -5,8 +5,6 @@ import Polygon from './maps/Polygon'
import Circle from './maps/Circle' import Circle from './maps/Circle'
import HeatMap from './maps/HeatMap' import HeatMap from './maps/HeatMap'
import MultiPoint from './maps/MultiPoint' import MultiPoint from './maps/MultiPoint'
import Navigation from './navigation'
import Utils from './Utils'
import Offline from './Offline' import Offline from './Offline'
MapView.Marker = Marker MapView.Marker = Marker
...@@ -25,7 +23,5 @@ export { ...@@ -25,7 +23,5 @@ export {
Circle, Circle,
HeatMap, HeatMap,
MultiPoint, MultiPoint,
Navigation,
Utils,
Offline, 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