@evnydd0sf/react-native-amap3d-fix 3.2.4-fix.1

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.
Files changed (59) hide show
  1. package/lib/android/build.gradle +34 -0
  2. package/lib/android/src/main/AndroidManifest.xml +10 -0
  3. package/lib/android/src/main/java/qiuxiang/amap3d/AMap3DPackage.kt +28 -0
  4. package/lib/android/src/main/java/qiuxiang/amap3d/Utils.kt +114 -0
  5. package/lib/android/src/main/java/qiuxiang/amap3d/map_view/Circle.kt +65 -0
  6. package/lib/android/src/main/java/qiuxiang/amap3d/map_view/CircleManager.kt +49 -0
  7. package/lib/android/src/main/java/qiuxiang/amap3d/map_view/HeatMap.kt +32 -0
  8. package/lib/android/src/main/java/qiuxiang/amap3d/map_view/HeatMapManager.kt +33 -0
  9. package/lib/android/src/main/java/qiuxiang/amap3d/map_view/MapView.kt +174 -0
  10. package/lib/android/src/main/java/qiuxiang/amap3d/map_view/MapViewManager.kt +153 -0
  11. package/lib/android/src/main/java/qiuxiang/amap3d/map_view/Marker.kt +102 -0
  12. package/lib/android/src/main/java/qiuxiang/amap3d/map_view/MarkerManager.kt +78 -0
  13. package/lib/android/src/main/java/qiuxiang/amap3d/map_view/MultiPoint.kt +53 -0
  14. package/lib/android/src/main/java/qiuxiang/amap3d/map_view/MultiPointManager.kt +33 -0
  15. package/lib/android/src/main/java/qiuxiang/amap3d/map_view/Overlay.kt +8 -0
  16. package/lib/android/src/main/java/qiuxiang/amap3d/map_view/Polygon.kt +58 -0
  17. package/lib/android/src/main/java/qiuxiang/amap3d/map_view/PolygonManager.kt +44 -0
  18. package/lib/android/src/main/java/qiuxiang/amap3d/map_view/Polyline.kt +69 -0
  19. package/lib/android/src/main/java/qiuxiang/amap3d/map_view/PolylineManager.kt +64 -0
  20. package/lib/android/src/main/java/qiuxiang/amap3d/modules/SdkModule.kt +31 -0
  21. package/lib/ios/.swiftformat +2 -0
  22. package/lib/ios/Bridging-Header.h +4 -0
  23. package/lib/ios/MapView/CircleManager.m +11 -0
  24. package/lib/ios/MapView/CircleManager.swift +30 -0
  25. package/lib/ios/MapView/HeatMapManager.m +9 -0
  26. package/lib/ios/MapView/HeatMapManager.swift +29 -0
  27. package/lib/ios/MapView/MapViewManager.m +35 -0
  28. package/lib/ios/MapView/MapViewManager.swift +159 -0
  29. package/lib/ios/MapView/MarkerManager.m +18 -0
  30. package/lib/ios/MapView/MarkerManager.swift +100 -0
  31. package/lib/ios/MapView/MultiPointManager.m +9 -0
  32. package/lib/ios/MapView/MultiPointManager.swift +47 -0
  33. package/lib/ios/MapView/Overlay.swift +4 -0
  34. package/lib/ios/MapView/PolygonManager.m +10 -0
  35. package/lib/ios/MapView/PolygonManager.swift +30 -0
  36. package/lib/ios/MapView/PolylineManager.m +12 -0
  37. package/lib/ios/MapView/PolylineManager.swift +41 -0
  38. package/lib/ios/Modules/SdkModule.m +8 -0
  39. package/lib/ios/Modules/SdkModule.swift +16 -0
  40. package/lib/ios/Utils.swift +104 -0
  41. package/lib/ios/react-native-amap3d.podspec +20 -0
  42. package/lib/src/circle.tsx +36 -0
  43. package/lib/src/cluster/cluster-view.tsx +47 -0
  44. package/lib/src/cluster/index.tsx +159 -0
  45. package/lib/src/component.ts +31 -0
  46. package/lib/src/heat-map.tsx +21 -0
  47. package/lib/src/index.ts +11 -0
  48. package/lib/src/map-view.tsx +230 -0
  49. package/lib/src/marker.tsx +128 -0
  50. package/lib/src/multi-point.tsx +28 -0
  51. package/lib/src/polygon.tsx +31 -0
  52. package/lib/src/polyline.tsx +65 -0
  53. package/lib/src/sdk.ts +11 -0
  54. package/lib/src/types.ts +137 -0
  55. package/license +21 -0
  56. package/package.json +56 -0
  57. package/react-native-amap3d.podspec +20 -0
  58. package/react-native.config.js +20 -0
  59. package/readme.md +186 -0
@@ -0,0 +1,159 @@
1
+ @objc(AMapViewManager)
2
+ class AMapViewManager: RCTViewManager {
3
+ override class func requiresMainQueueSetup() -> Bool { false }
4
+
5
+ override func view() -> UIView {
6
+ let view = MapView()
7
+ view.delegate = view
8
+ return view
9
+ }
10
+
11
+ @objc func moveCamera(_ reactTag: NSNumber, position: NSDictionary, duration: Int) {
12
+ getView(reactTag: reactTag) { view in
13
+ view.moveCamera(position: position, duration: duration)
14
+ }
15
+ }
16
+
17
+ @objc func call(_ reactTag: NSNumber, callerId: Double, name: String, args: NSDictionary) {
18
+ getView(reactTag: reactTag) { view in
19
+ view.call(id: callerId, name: name, args: args)
20
+ }
21
+ }
22
+
23
+ func getView(reactTag: NSNumber, callback: @escaping (MapView) -> Void) {
24
+ bridge.uiManager.addUIBlock { _, viewRegistry in
25
+ callback(viewRegistry![reactTag] as! MapView)
26
+ }
27
+ }
28
+ }
29
+
30
+ class MapView: MAMapView, MAMapViewDelegate {
31
+ var initialized = false
32
+ var overlayMap: [MABaseOverlay: Overlay] = [:]
33
+ var markerMap: [MAPointAnnotation: Marker] = [:]
34
+
35
+ @objc var onLoad: RCTBubblingEventBlock = { _ in }
36
+ @objc var onCameraMove: RCTBubblingEventBlock = { _ in }
37
+ @objc var onCameraIdle: RCTBubblingEventBlock = { _ in }
38
+ @objc var onPress: RCTBubblingEventBlock = { _ in }
39
+ @objc var onPressPoi: RCTBubblingEventBlock = { _ in }
40
+ @objc var onLongPress: RCTBubblingEventBlock = { _ in }
41
+ @objc var onLocation: RCTBubblingEventBlock = { _ in }
42
+ @objc var onCallback: RCTBubblingEventBlock = { _ in }
43
+
44
+ @objc func setInitialCameraPosition(_ json: NSDictionary) {
45
+ if !initialized {
46
+ initialized = true
47
+ moveCamera(position: json)
48
+ }
49
+ }
50
+
51
+ func moveCamera(position: NSDictionary, duration: Int = 0) {
52
+ let status = MAMapStatus()
53
+ status.zoomLevel = (position["zoom"] as? Double)?.cgFloat ?? zoomLevel
54
+ status.cameraDegree = (position["tilt"] as? Double)?.cgFloat ?? cameraDegree
55
+ status.rotationDegree = (position["bearing"] as? Double)?.cgFloat ?? rotationDegree
56
+ status.centerCoordinate = (position["target"] as? NSDictionary)?.coordinate ?? centerCoordinate
57
+ setMapStatus(status, animated: true, duration: Double(duration) / 1000)
58
+ }
59
+
60
+ func call(id: Double, name: String, args: NSDictionary) {
61
+ switch name {
62
+ case "getLatLng":
63
+ callback(id: id, data: convert(args.point, toCoordinateFrom: self).json)
64
+ default:
65
+ break
66
+ }
67
+ }
68
+
69
+ func callback(id: Double, data: [String: Any]) {
70
+ onCallback(["id": id, "data": data])
71
+ }
72
+
73
+ override func didAddSubview(_ subview: UIView) {
74
+ if let overlay = (subview as? Overlay)?.getOverlay() {
75
+ overlayMap[overlay] = subview as? Overlay
76
+ add(overlay)
77
+ }
78
+ if let annotation = (subview as? Marker)?.annotation {
79
+ markerMap[annotation] = subview as? Marker
80
+ addAnnotation(annotation)
81
+ }
82
+ }
83
+
84
+ override func removeReactSubview(_ subview: UIView!) {
85
+ super.removeReactSubview(subview)
86
+ if let overlay = (subview as? Overlay)?.getOverlay() {
87
+ overlayMap.removeValue(forKey: overlay)
88
+ remove(overlay)
89
+ }
90
+ if let annotation = (subview as? Marker)?.annotation {
91
+ markerMap.removeValue(forKey: annotation)
92
+ removeAnnotation(annotation)
93
+ }
94
+ }
95
+
96
+ func mapView(_: MAMapView, rendererFor overlay: MAOverlay) -> MAOverlayRenderer? {
97
+ if let key = overlay as? MABaseOverlay {
98
+ return overlayMap[key]?.getRenderer()
99
+ }
100
+ return nil
101
+ }
102
+
103
+ func mapView(_: MAMapView!, viewFor annotation: MAAnnotation) -> MAAnnotationView? {
104
+ if let key = annotation as? MAPointAnnotation {
105
+ return markerMap[key]?.getView()
106
+ }
107
+ return nil
108
+ }
109
+
110
+ func mapView(_: MAMapView!, annotationView view: MAAnnotationView!, didChange newState: MAAnnotationViewDragState, fromOldState _: MAAnnotationViewDragState) {
111
+ if let key = view.annotation as? MAPointAnnotation {
112
+ let market = markerMap[key]!
113
+ if newState == MAAnnotationViewDragState.starting {
114
+ market.onDragStart(nil)
115
+ }
116
+ if newState == MAAnnotationViewDragState.dragging {
117
+ market.onDrag(nil)
118
+ }
119
+ if newState == MAAnnotationViewDragState.ending {
120
+ market.onDragEnd(view.annotation.coordinate.json)
121
+ }
122
+ }
123
+ }
124
+
125
+ func mapView(_: MAMapView!, didAnnotationViewTapped view: MAAnnotationView!) {
126
+ if let key = view.annotation as? MAPointAnnotation {
127
+ markerMap[key]?.onPress(nil)
128
+ }
129
+ }
130
+
131
+ func mapInitComplete(_: MAMapView!) {
132
+ onLoad(nil)
133
+ }
134
+
135
+ func mapView(_: MAMapView!, didSingleTappedAt coordinate: CLLocationCoordinate2D) {
136
+ onPress(coordinate.json)
137
+ }
138
+
139
+ func mapView(_: MAMapView!, didTouchPois pois: [Any]!) {
140
+ let poi = pois[0] as! MATouchPoi
141
+ onPressPoi(["name": poi.name!, "id": poi.uid!, "position": poi.coordinate.json])
142
+ }
143
+
144
+ func mapView(_: MAMapView!, didLongPressedAt coordinate: CLLocationCoordinate2D) {
145
+ onLongPress(coordinate.json)
146
+ }
147
+
148
+ func mapViewRegionChanged(_: MAMapView!) {
149
+ onCameraMove(cameraEvent)
150
+ }
151
+
152
+ func mapView(_: MAMapView!, regionDidChangeAnimated _: Bool) {
153
+ onCameraIdle(cameraEvent)
154
+ }
155
+
156
+ func mapView(_: MAMapView!, didUpdate userLocation: MAUserLocation!, updatingLocation _: Bool) {
157
+ onLocation(userLocation.json)
158
+ }
159
+ }
@@ -0,0 +1,18 @@
1
+ #import <React/RCTUIManager.h>
2
+
3
+ @interface RCT_EXTERN_MODULE(AMapMarkerManager, RCTViewManager)
4
+
5
+ RCT_EXPORT_VIEW_PROPERTY(latLng, CLLocationCoordinate2D)
6
+ RCT_EXPORT_VIEW_PROPERTY(centerOffset, CGPoint)
7
+ RCT_EXPORT_VIEW_PROPERTY(draggable, BOOL)
8
+ RCT_EXPORT_VIEW_PROPERTY(zIndex, int)
9
+ RCT_EXPORT_VIEW_PROPERTY(icon, NSDictionary)
10
+
11
+ RCT_EXPORT_VIEW_PROPERTY(onPress, RCTBubblingEventBlock)
12
+ RCT_EXPORT_VIEW_PROPERTY(onDragStart, RCTBubblingEventBlock)
13
+ RCT_EXPORT_VIEW_PROPERTY(onDrag, RCTBubblingEventBlock)
14
+ RCT_EXPORT_VIEW_PROPERTY(onDragEnd, RCTBubblingEventBlock)
15
+
16
+ RCT_EXTERN_METHOD(update:(nonnull NSNumber *)reactTag)
17
+
18
+ @end
@@ -0,0 +1,100 @@
1
+ @objc(AMapMarkerManager)
2
+ class AMapMarkerManager: RCTViewManager {
3
+ override class func requiresMainQueueSetup() -> Bool { false }
4
+
5
+ override func view() -> UIView {
6
+ let view = Marker()
7
+ view.imageLoader = bridge.module(forName: "ImageLoader") as? RCTImageLoader
8
+ return view
9
+ }
10
+
11
+ @objc func update(_ reactTag: NSNumber) {
12
+ getView(reactTag: reactTag) { view in view.update() }
13
+ }
14
+
15
+ func getView(reactTag: NSNumber, callback: @escaping (Marker) -> Void) {
16
+ bridge.uiManager.addUIBlock { _, viewRegistry in
17
+ callback(viewRegistry![reactTag] as! Marker)
18
+ }
19
+ }
20
+ }
21
+
22
+ class Marker: UIView {
23
+ var imageLoader: RCTImageLoader?
24
+ var view: MAAnnotationView?
25
+ var annotation = MAPointAnnotation()
26
+ var icon: UIImage?
27
+ var iconView: UIView?
28
+ var centerOffset: CGPoint?
29
+
30
+ @objc var draggable = false { didSet { view?.isDraggable = draggable } }
31
+ @objc var zIndex = 1 { didSet { view?.zIndex = zIndex } }
32
+
33
+ @objc var onPress: RCTDirectEventBlock = { _ in }
34
+ @objc var onDragStart: RCTDirectEventBlock = { _ in }
35
+ @objc var onDrag: RCTDirectEventBlock = { _ in }
36
+ @objc var onDragEnd: RCTDirectEventBlock = { _ in }
37
+
38
+ @objc func setIcon(_ icon: NSDictionary?) {
39
+ imageLoader?.loadImage(icon) { image in
40
+ self.icon = image
41
+ self.view?.image = image
42
+ self.updateCenterOffset()
43
+ }
44
+ }
45
+
46
+ @objc func setLatLng(_ coordinate: CLLocationCoordinate2D) {
47
+ annotation.coordinate = coordinate
48
+ }
49
+
50
+ @objc func setCenterOffset(_ centerOffset: CGPoint) {
51
+ self.centerOffset = centerOffset
52
+ view?.centerOffset = centerOffset
53
+ }
54
+
55
+ override func didAddSubview(_ subview: UIView) {
56
+ subview.layer.opacity = 0
57
+ iconView = subview
58
+ }
59
+
60
+ /**
61
+ * subview 不能直接用作 marker 的 icon,因为在实现点聚合的时候发现,subview 一定概率无法正常 layout,会堆在右上角。
62
+ * 于是索性把 subview 渲染成 image,原来用 subview 带来的 offset、点击问题也都不用处理了。
63
+ * 正常情况下就把 subview 的 opacity 设成 0,需要渲染的时候才设成 1,渲染然后马上设回 0。
64
+ */
65
+ func update() {
66
+ if centerOffset == nil, view != nil {
67
+ iconView?.layer.opacity = 1
68
+ let renderer = UIGraphicsImageRenderer(bounds: iconView!.bounds)
69
+ view?.image = renderer.image { context in layer.render(in: context.cgContext) }
70
+ iconView?.layer.opacity = 0
71
+ updateCenterOffset()
72
+ }
73
+ }
74
+
75
+ func updateCenterOffset() {
76
+ if centerOffset == nil, view != nil {
77
+ let size: CGSize = (view?.image.size)!
78
+ view?.centerOffset = CGPoint(x: 0, y: -size.height / 2)
79
+ }
80
+ }
81
+
82
+ func getView() -> MAAnnotationView {
83
+ if view == nil {
84
+ view = MAAnnotationView(annotation: annotation, reuseIdentifier: nil)
85
+ if icon == nil, iconView == nil {
86
+ view?.image = MAPinAnnotationView(annotation: annotation, reuseIdentifier: nil).image
87
+ }
88
+ view?.isDraggable = draggable
89
+ view?.zIndex = zIndex
90
+ if centerOffset != nil {
91
+ view?.centerOffset = centerOffset!
92
+ }
93
+ if icon != nil {
94
+ view?.image = icon
95
+ updateCenterOffset()
96
+ }
97
+ }
98
+ return view!
99
+ }
100
+ }
@@ -0,0 +1,9 @@
1
+ #import <React/RCTUIManager.h>
2
+
3
+ @interface RCT_EXTERN_MODULE(AMapMultiPointManager, RCTViewManager)
4
+
5
+ RCT_EXPORT_VIEW_PROPERTY(items, NSArray)
6
+ RCT_EXPORT_VIEW_PROPERTY(icon, NSDictionary)
7
+ RCT_EXPORT_VIEW_PROPERTY(onPress, RCTBubblingEventBlock)
8
+
9
+ @end
@@ -0,0 +1,47 @@
1
+ @objc(AMapMultiPointManager)
2
+ class AMapMultiPointManager: RCTViewManager {
3
+ override class func requiresMainQueueSetup() -> Bool { false }
4
+
5
+ override func view() -> UIView {
6
+ let view = MultiPoint()
7
+ view.imageLoader = bridge.module(forName: "ImageLoader") as? RCTImageLoader
8
+ return view
9
+ }
10
+ }
11
+
12
+ class MultiPoint: UIView, Overlay, MAMultiPointOverlayRendererDelegate {
13
+ var imageLoader: RCTImageLoader?
14
+ var overlay: MAMultiPointOverlay?
15
+ var renderer: MAMultiPointOverlayRenderer?
16
+ var icon: UIImage?
17
+
18
+ @objc var onPress: RCTDirectEventBlock = { _ in }
19
+
20
+ @objc func setIcon(_ icon: NSDictionary) {
21
+ imageLoader?.loadImage(icon) { image in
22
+ self.renderer?.icon = image
23
+ }
24
+ }
25
+
26
+ @objc func setItems(_ items: NSArray) {
27
+ overlay = MAMultiPointOverlay(multiPointItems: items.map { it -> MAMultiPointItem in
28
+ let item = MAMultiPointItem()
29
+ item.coordinate = (it as! NSDictionary).coordinate
30
+ return item
31
+ })
32
+ }
33
+
34
+ func getOverlay() -> MABaseOverlay { overlay! }
35
+ func getRenderer() -> MAOverlayRenderer {
36
+ if renderer == nil {
37
+ renderer = MAMultiPointOverlayRenderer(multiPointOverlay: overlay)
38
+ renderer?.icon = icon
39
+ renderer?.delegate = self
40
+ }
41
+ return renderer!
42
+ }
43
+
44
+ func multiPointOverlayRenderer(_: MAMultiPointOverlayRenderer!, didItemTapped item: MAMultiPointItem!) {
45
+ onPress(["index": (overlay?.items.firstIndex(of: item))!])
46
+ }
47
+ }
@@ -0,0 +1,4 @@
1
+ protocol Overlay: UIView {
2
+ func getOverlay() -> MABaseOverlay
3
+ func getRenderer() -> MAOverlayRenderer
4
+ }
@@ -0,0 +1,10 @@
1
+ #import <React/RCTUIManager.h>
2
+
3
+ @interface RCT_EXTERN_MODULE(AMapPolygonManager, RCTViewManager)
4
+
5
+ RCT_EXPORT_VIEW_PROPERTY(points, NSArray)
6
+ RCT_EXPORT_VIEW_PROPERTY(strokeWidth, double)
7
+ RCT_EXPORT_VIEW_PROPERTY(strokeColor, UIColor)
8
+ RCT_EXPORT_VIEW_PROPERTY(fillColor, UIColor)
9
+
10
+ @end
@@ -0,0 +1,30 @@
1
+ @objc(AMapPolygonManager)
2
+ class AMapPolygonManager: RCTViewManager {
3
+ override class func requiresMainQueueSetup() -> Bool { false }
4
+ override func view() -> UIView { Polygon() }
5
+ }
6
+
7
+ class Polygon: UIView, Overlay {
8
+ var overlay = MAPolygon()
9
+ var renderer: MAPolygonRenderer?
10
+
11
+ @objc var strokeWidth = 1.0 { didSet { renderer?.lineWidth = strokeWidth } }
12
+ @objc var strokeColor = UIColor.black { didSet { renderer?.strokeColor = strokeColor } }
13
+ @objc var fillColor = UIColor.white { didSet { renderer?.fillColor = fillColor } }
14
+
15
+ @objc func setPoints(_ points: NSArray) {
16
+ var coordinates = points.map { it -> CLLocationCoordinate2D in (it as! NSDictionary).coordinate }
17
+ overlay.setPolygonWithCoordinates(&coordinates, count: points.count)
18
+ }
19
+
20
+ func getOverlay() -> MABaseOverlay { overlay }
21
+ func getRenderer() -> MAOverlayRenderer {
22
+ if renderer == nil {
23
+ renderer = MAPolygonRenderer(polygon: overlay)
24
+ renderer?.fillColor = fillColor
25
+ renderer?.strokeColor = strokeColor
26
+ renderer?.lineWidth = strokeWidth
27
+ }
28
+ return renderer!
29
+ }
30
+ }
@@ -0,0 +1,12 @@
1
+ #import <React/RCTUIManager.h>
2
+
3
+ @interface RCT_EXTERN_MODULE(AMapPolylineManager, RCTViewManager)
4
+
5
+ RCT_EXPORT_VIEW_PROPERTY(points, NSArray)
6
+ RCT_EXPORT_VIEW_PROPERTY(width, double)
7
+ RCT_EXPORT_VIEW_PROPERTY(color, UIColor)
8
+ RCT_EXPORT_VIEW_PROPERTY(dotted, BOOL)
9
+ RCT_EXPORT_VIEW_PROPERTY(gradient, BOOL)
10
+ RCT_EXPORT_VIEW_PROPERTY(colors, UIColorArray)
11
+
12
+ @end
@@ -0,0 +1,41 @@
1
+ @objc(AMapPolylineManager)
2
+ class AMapPolylineManager: RCTViewManager {
3
+ override class func requiresMainQueueSetup() -> Bool { false }
4
+ override func view() -> UIView { Polyline() }
5
+ }
6
+
7
+ class Polyline: UIView, Overlay {
8
+ var overlay = MAMultiPolyline()
9
+ var renderer: MAMultiColoredPolylineRenderer?
10
+
11
+ @objc var width = 1.0 { didSet { renderer?.lineWidth = width } }
12
+ @objc var color = UIColor.black { didSet { renderer?.strokeColor = color } }
13
+ @objc var gradient = false { didSet { renderer?.isGradient = gradient } }
14
+ @objc var dotted = false { didSet { setDotted() } }
15
+ @objc var colors: [UIColor] = [] { didSet {
16
+ renderer?.strokeColors = colors
17
+ overlay.drawStyleIndexes = (0 ..< colors.count).map { it in NSNumber(value: it) }
18
+ } }
19
+
20
+ @objc func setPoints(_ points: NSArray) {
21
+ var coordinates = points.map { it -> CLLocationCoordinate2D in (it as! NSDictionary).coordinate }
22
+ overlay.setPolylineWithCoordinates(&coordinates, count: points.count)
23
+ }
24
+
25
+ func setDotted() {
26
+ renderer?.lineDashType = dotted ? kMALineDashTypeDot : kMALineDashTypeNone
27
+ }
28
+
29
+ func getOverlay() -> MABaseOverlay { overlay }
30
+ func getRenderer() -> MAOverlayRenderer {
31
+ if renderer == nil {
32
+ renderer = MAMultiColoredPolylineRenderer(multiPolyline: overlay)
33
+ renderer?.strokeColor = color
34
+ renderer?.lineWidth = width
35
+ renderer?.isGradient = gradient
36
+ renderer?.strokeColors = colors
37
+ setDotted()
38
+ }
39
+ return renderer!
40
+ }
41
+ }
@@ -0,0 +1,8 @@
1
+ #import <React/RCTBridgeModule.h>
2
+
3
+ @interface RCT_EXTERN_MODULE(AMapSdk, NSObject)
4
+
5
+ RCT_EXTERN_METHOD(initSDK: (NSString)apiKey)
6
+ RCT_EXTERN_METHOD(getVersion: (RCTPromiseResolveBlock)resolve reject: (RCTPromiseRejectBlock)_)
7
+
8
+ @end
@@ -0,0 +1,16 @@
1
+ @objc(AMapSdk)
2
+ class AMapSdk: NSObject {
3
+ @objc static func requiresMainQueueSetup() -> Bool {
4
+ false
5
+ }
6
+
7
+ @objc func initSDK(_ apiKey: String) {
8
+ AMapServices.shared().apiKey = apiKey
9
+ MAMapView.updatePrivacyAgree(AMapPrivacyAgreeStatus.didAgree)
10
+ MAMapView.updatePrivacyShow(AMapPrivacyShowStatus.didShow, privacyInfo: AMapPrivacyInfoStatus.didContain)
11
+ }
12
+
13
+ @objc func getVersion(_ resolve: RCTPromiseResolveBlock, reject _: RCTPromiseRejectBlock) {
14
+ resolve("8.0.1")
15
+ }
16
+ }
@@ -0,0 +1,104 @@
1
+ extension NSDictionary {
2
+ var coordinate: CLLocationCoordinate2D {
3
+ CLLocationCoordinate2DMake(self["latitude"] as! Double, self["longitude"] as! Double)
4
+ }
5
+
6
+ var point: CGPoint {
7
+ CGPoint(x: self["x"] as! Double, y: self["y"] as! Double)
8
+ }
9
+ }
10
+
11
+ extension CLLocationCoordinate2D {
12
+ var json: [String: Double] {
13
+ ["latitude": latitude, "longitude": longitude]
14
+ }
15
+ }
16
+
17
+ extension MAUserLocation {
18
+ var json: [String: Any] {
19
+ [
20
+ "coords": [
21
+ "latitude": coordinate.latitude,
22
+ "longitude": coordinate.longitude,
23
+ "altitude": location?.altitude ?? 0,
24
+ "heading": heading?.trueHeading,
25
+ "accuracy": location?.horizontalAccuracy ?? 0,
26
+ "speed": location?.speed ?? 0,
27
+ ],
28
+ "timestamp": NSDate().timeIntervalSince1970 * 1000,
29
+ ]
30
+ }
31
+ }
32
+
33
+ extension MACoordinateRegion {
34
+ var json: [String: Any] {
35
+ [
36
+ "southwest": [
37
+ "latitude": center.latitude - span.latitudeDelta / 2,
38
+ "longitude": center.longitude - span.longitudeDelta / 2,
39
+ ],
40
+ "northeast": [
41
+ "latitude": center.latitude + span.latitudeDelta / 2,
42
+ "longitude": center.longitude + span.longitudeDelta / 2,
43
+ ],
44
+ ]
45
+ }
46
+ }
47
+
48
+ extension MAMapStatus {
49
+ var json: [String: Any] {
50
+ [
51
+ "target": centerCoordinate.json,
52
+ "zoom": zoomLevel,
53
+ "bearing": rotationDegree,
54
+ "tilt": cameraDegree,
55
+ ]
56
+ }
57
+ }
58
+
59
+ extension MAMapView {
60
+ var cameraEvent: [String: Any] {
61
+ [
62
+ "cameraPosition": getMapStatus().json,
63
+ "latLngBounds": region.json,
64
+ ]
65
+ }
66
+ }
67
+
68
+ extension Double {
69
+ var cgFloat: CGFloat {
70
+ CGFloat(self)
71
+ }
72
+ }
73
+
74
+ extension RCTConvert {
75
+ @objc static func MAMapType(_ json: Any) -> MAMapType {
76
+ MAMapKit.MAMapType(rawValue: json as! NSInteger)!
77
+ }
78
+ }
79
+
80
+ extension RCTImageLoader {
81
+ func loadImage(_ icon: NSDictionary?, callback: @escaping (UIImage) -> Void) {
82
+ if icon == nil {
83
+ return
84
+ }
85
+ let width = icon?["width"] as? Double ?? 0
86
+ let height = icon?["height"] as? Double ?? 0
87
+ loadImage(
88
+ with: RCTConvert.nsurlRequest(icon),
89
+ size: CGSize(width: width, height: height),
90
+ scale: RCTScreenScale(),
91
+ clipped: false,
92
+ resizeMode: RCTResizeMode.cover,
93
+ progressBlock: { _, _ in },
94
+ partialLoad: { _ in },
95
+ completionBlock: { _, image in
96
+ if image != nil {
97
+ DispatchQueue.main.async {
98
+ callback(image!)
99
+ }
100
+ }
101
+ }
102
+ )
103
+ }
104
+ }
@@ -0,0 +1,20 @@
1
+ require "json"
2
+
3
+ package = JSON.parse(File.read(File.join(__dir__, "../../package.json")))
4
+
5
+ Pod::Spec.new do |s|
6
+ s.name = "react-native-amap3d"
7
+ s.version = package["version"]
8
+ s.summary = package["description"]
9
+ s.homepage = package["homepage"]
10
+ s.license = package["license"]
11
+ s.authors = package["author"]
12
+
13
+ s.platforms = { :ios => "10.0" }
14
+ s.source = { :git => "https://github.com/evnydd0sf/react-native-amap3d.git", :tag => "#{s.version}" }
15
+
16
+ s.source_files = "**/*.{h,m,mm,swift}"
17
+
18
+ s.dependency "React-Core"
19
+ s.dependency 'AMap3DMap', "10.0.1000"
20
+ end
@@ -0,0 +1,36 @@
1
+ import { requireNativeComponent } from "react-native";
2
+ import { LatLng } from "./types";
3
+
4
+ export interface CircleProps {
5
+ /**
6
+ * 圆点坐标
7
+ */
8
+ center: LatLng;
9
+
10
+ /**
11
+ * 半径(米)
12
+ */
13
+ radius: number;
14
+
15
+ /**
16
+ * 边线宽度
17
+ */
18
+ strokeWidth?: number;
19
+
20
+ /**
21
+ * 边线颜色
22
+ */
23
+ strokeColor?: string;
24
+
25
+ /**
26
+ * 填充颜色
27
+ */
28
+ fillColor?: string;
29
+
30
+ /**
31
+ * 层级
32
+ */
33
+ zIndex?: number;
34
+ }
35
+
36
+ export default requireNativeComponent<CircleProps>("AMapCircle");
@@ -0,0 +1,47 @@
1
+ import * as React from "react";
2
+ import { StyleSheet, Text, View, ViewStyle } from "react-native";
3
+ import { ClusterParams } from ".";
4
+ import Marker from "../marker";
5
+
6
+ interface Props {
7
+ cluster: ClusterParams;
8
+ style?: ViewStyle;
9
+ textStyle?: ViewStyle;
10
+ onPress?: (params: ClusterParams) => void;
11
+ }
12
+
13
+ export default class ClusterView extends React.PureComponent<Props> {
14
+ onPress = () => {
15
+ this.props.onPress?.call(this, this.props.cluster);
16
+ };
17
+
18
+ renderClusterView = () => {
19
+ const { count } = this.props.cluster;
20
+ const size = 36 + Math.log2(count);
21
+ const clusterStyle = { width: size, height: size, borderRadius: size / 2 };
22
+ return (
23
+ <View style={[style.cluster, clusterStyle, this.props.style]}>
24
+ <Text style={[style.text, this.props.textStyle]}>{count}</Text>
25
+ </View>
26
+ );
27
+ };
28
+
29
+ render() {
30
+ return (
31
+ <Marker onPress={this.onPress} position={this.props.cluster.position}>
32
+ {this.renderClusterView()}
33
+ </Marker>
34
+ );
35
+ }
36
+ }
37
+
38
+ const style = StyleSheet.create({
39
+ cluster: {
40
+ borderWidth: 4,
41
+ borderColor: "#fff",
42
+ backgroundColor: "rgba(245,83,61,0.9)",
43
+ alignItems: "center",
44
+ justifyContent: "center",
45
+ },
46
+ text: { color: "#fff", fontWeight: "600" },
47
+ });