react-native-map4d-map-dtqg 0.1.1 → 0.1.3

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 (229) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +133 -88
  3. package/android/build.gradle +60 -60
  4. package/android/src/main/AndroidManifest.xml +4 -4
  5. package/android/src/main/java/com/reactnativemap4dmap/ImageUtils.java +87 -87
  6. package/android/src/main/java/com/reactnativemap4dmap/Map4dMapModule.java +298 -298
  7. package/android/src/main/java/com/reactnativemap4dmap/Map4dMapPackage.java +35 -35
  8. package/android/src/main/java/com/reactnativemap4dmap/Map4dMapViewManager.java +31 -31
  9. package/android/src/main/java/com/reactnativemap4dmap/RMFBuilding.java +167 -167
  10. package/android/src/main/java/com/reactnativemap4dmap/RMFBuildingManager.java +121 -121
  11. package/android/src/main/java/com/reactnativemap4dmap/RMFCircle.java +105 -105
  12. package/android/src/main/java/com/reactnativemap4dmap/RMFCircleManager.java +121 -121
  13. package/android/src/main/java/com/reactnativemap4dmap/RMFDirectionsRenderer.java +502 -502
  14. package/android/src/main/java/com/reactnativemap4dmap/RMFDirectionsRendererManager.java +143 -143
  15. package/android/src/main/java/com/reactnativemap4dmap/RMFFeature.java +17 -17
  16. package/android/src/main/java/com/reactnativemap4dmap/RMFMapView.java +1172 -1172
  17. package/android/src/main/java/com/reactnativemap4dmap/RMFMapViewManager.java +231 -226
  18. package/android/src/main/java/com/reactnativemap4dmap/RMFMarker.java +412 -412
  19. package/android/src/main/java/com/reactnativemap4dmap/RMFMarkerManager.java +211 -211
  20. package/android/src/main/java/com/reactnativemap4dmap/RMFPOI.java +222 -222
  21. package/android/src/main/java/com/reactnativemap4dmap/RMFPOIManager.java +119 -119
  22. package/android/src/main/java/com/reactnativemap4dmap/RMFPolygon.java +172 -172
  23. package/android/src/main/java/com/reactnativemap4dmap/RMFPolygonManager.java +147 -147
  24. package/android/src/main/java/com/reactnativemap4dmap/RMFPolyline.java +146 -146
  25. package/android/src/main/java/com/reactnativemap4dmap/RMFPolylineManager.java +137 -137
  26. package/android/src/main/java/com/reactnativemap4dmap/RMFTileOverlay.java +95 -95
  27. package/android/src/main/java/com/reactnativemap4dmap/RMFTileOverlayManager.java +64 -64
  28. package/android/src/main/java/com/reactnativemap4dmap/SizeReportingShadowNode.java +31 -31
  29. package/android/src/main/java/com/reactnativemap4dmap/ViewAttacherGroup.java +31 -31
  30. package/android/src/main/java/com/reactnativemap4dmap/ViewChangesTracker.java +70 -70
  31. package/android/src/main/java/vn/map4d/map/annotations/RMFBitmapDescriptor.java +9 -9
  32. package/ios/Map4dMap.h +7 -7
  33. package/ios/Map4dMap.m +14 -14
  34. package/ios/Map4dMap.xcodeproj/project.pbxproj +2 -2
  35. package/ios/Map4dMapViewManager.m +34 -34
  36. package/ios/RCTConvert+Map4dMap.h +33 -33
  37. package/ios/RCTConvert+Map4dMap.m +112 -112
  38. package/ios/RMFCircle.h +37 -37
  39. package/ios/RMFCircle.m +100 -100
  40. package/ios/RMFCircleManager.h +18 -18
  41. package/ios/RMFCircleManager.m +155 -155
  42. package/ios/RMFCircleMap4d.h +23 -23
  43. package/ios/RMFCircleMap4d.m +13 -13
  44. package/ios/RMFCoordinate.h +22 -22
  45. package/ios/RMFCoordinate.m +13 -13
  46. package/ios/RMFDirectionsMarkerOptions.h +24 -24
  47. package/ios/RMFDirectionsMarkerOptions.m +23 -23
  48. package/ios/RMFDirectionsRenderer.h +47 -47
  49. package/ios/RMFDirectionsRenderer.m +182 -182
  50. package/ios/RMFDirectionsRendererManager.h +17 -17
  51. package/ios/RMFDirectionsRendererManager.m +84 -84
  52. package/ios/RMFDirectionsRendererMap4d.h +21 -21
  53. package/ios/RMFDirectionsRendererMap4d.m +12 -12
  54. package/ios/RMFDummyView.h +6 -6
  55. package/ios/RMFDummyView.m +12 -12
  56. package/ios/RMFEventResponse.h +39 -39
  57. package/ios/RMFEventResponse.m +98 -98
  58. package/ios/RMFIcon.h +24 -24
  59. package/ios/RMFIcon.m +35 -35
  60. package/ios/RMFMapView.h +84 -84
  61. package/ios/RMFMapView.m +376 -376
  62. package/ios/RMFMapViewManager.h +17 -17
  63. package/ios/RMFMapViewManager.m +509 -493
  64. package/ios/RMFMarker.h +57 -57
  65. package/ios/RMFMarker.m +267 -267
  66. package/ios/RMFMarkerManager.h +17 -17
  67. package/ios/RMFMarkerManager.m +156 -156
  68. package/ios/RMFMarkerMap4d.h +19 -19
  69. package/ios/RMFMarkerMap4d.m +13 -13
  70. package/ios/RMFPOI.h +38 -38
  71. package/ios/RMFPOI.m +123 -123
  72. package/ios/RMFPOIManager.h +18 -18
  73. package/ios/RMFPOIManager.m +168 -168
  74. package/ios/RMFPOIMap4d.h +22 -22
  75. package/ios/RMFPOIMap4d.m +12 -12
  76. package/ios/RMFPolygon.h +41 -41
  77. package/ios/RMFPolygon.m +106 -106
  78. package/ios/RMFPolygonManager.h +18 -18
  79. package/ios/RMFPolygonManager.m +141 -141
  80. package/ios/RMFPolygonMap4d.h +23 -23
  81. package/ios/RMFPolygonMap4d.m +15 -15
  82. package/ios/RMFPolyline.h +38 -38
  83. package/ios/RMFPolyline.m +101 -101
  84. package/ios/RMFPolylineManager.h +18 -18
  85. package/ios/RMFPolylineManager.m +139 -139
  86. package/ios/RMFPolylineMap4d.h +22 -22
  87. package/ios/RMFPolylineMap4d.m +15 -15
  88. package/ios/building/RMFBuilding.h +41 -41
  89. package/ios/building/RMFBuilding.m +104 -104
  90. package/ios/building/RMFBuildingManager.h +19 -19
  91. package/ios/building/RMFBuildingManager.m +133 -133
  92. package/ios/building/RMFBuildingMap4d.h +23 -23
  93. package/ios/building/RMFBuildingMap4d.m +15 -15
  94. package/ios/overlays/RMFTileOverlay.h +36 -36
  95. package/ios/overlays/RMFTileOverlay.m +64 -64
  96. package/ios/overlays/RMFTileOverlayManager.h +17 -17
  97. package/ios/overlays/RMFTileOverlayManager.m +27 -27
  98. package/lib/commonjs/components/MFBanDoSo.js +109 -0
  99. package/lib/commonjs/components/MFBanDoSo.js.map +1 -0
  100. package/lib/commonjs/components/MFBuilding.js +26 -26
  101. package/lib/commonjs/components/MFBuilding.js.map +1 -1
  102. package/lib/commonjs/components/MFCircle.js +20 -20
  103. package/lib/commonjs/components/MFCircle.js.map +1 -1
  104. package/lib/commonjs/components/MFDirectionsRenderer.js +32 -32
  105. package/lib/commonjs/components/MFDirectionsRenderer.js.map +1 -1
  106. package/lib/commonjs/components/MFMapView.js +89 -70
  107. package/lib/commonjs/components/MFMapView.js.map +1 -1
  108. package/lib/commonjs/components/MFMarker.js +35 -35
  109. package/lib/commonjs/components/MFMarker.js.map +1 -1
  110. package/lib/commonjs/components/MFPOI.js +20 -20
  111. package/lib/commonjs/components/MFPOI.js.map +1 -1
  112. package/lib/commonjs/components/MFPolygon.js +22 -22
  113. package/lib/commonjs/components/MFPolygon.js.map +1 -1
  114. package/lib/commonjs/components/MFPolyline.js +18 -18
  115. package/lib/commonjs/components/MFPolyline.js.map +1 -1
  116. package/lib/commonjs/components/MFTileOverlay.js +9 -9
  117. package/lib/commonjs/components/MFTileOverlay.js.map +1 -1
  118. package/lib/commonjs/components/Map4dMapView.js.map +1 -1
  119. package/lib/commonjs/components/extends/AreaFocusManager.js +205 -0
  120. package/lib/commonjs/components/extends/AreaFocusManager.js.map +1 -0
  121. package/lib/commonjs/components/extends/AreaFocuser.js +21 -259
  122. package/lib/commonjs/components/extends/AreaFocuser.js.map +1 -1
  123. package/lib/commonjs/components/extends/BoundHelper.js +36 -0
  124. package/lib/commonjs/components/extends/BoundHelper.js.map +1 -0
  125. package/lib/commonjs/components/extends/area/AreaFocusAreas.js +167 -0
  126. package/lib/commonjs/components/extends/area/AreaFocusAreas.js.map +1 -0
  127. package/lib/commonjs/components/extends/area/AreaFocusGeometryUtils.js +164 -0
  128. package/lib/commonjs/components/extends/area/AreaFocusGeometryUtils.js.map +1 -0
  129. package/lib/commonjs/components/extends/area/AreaFocusSession.js +100 -0
  130. package/lib/commonjs/components/extends/area/AreaFocusSession.js.map +1 -0
  131. package/lib/commonjs/components/extends/area/AreaFocusTypes.js +40 -0
  132. package/lib/commonjs/components/extends/area/AreaFocusTypes.js.map +1 -0
  133. package/lib/commonjs/components/internal/DefaultRoadmapStyle.js +2288 -0
  134. package/lib/commonjs/components/internal/DefaultRoadmapStyle.js.map +1 -0
  135. package/lib/commonjs/components/internal/GeojsonStyleUtils.js +139 -0
  136. package/lib/commonjs/components/internal/GeojsonStyleUtils.js.map +1 -0
  137. package/lib/commonjs/index.js +8 -0
  138. package/lib/commonjs/index.js.map +1 -1
  139. package/lib/module/components/MFBanDoSo.js +92 -0
  140. package/lib/module/components/MFBanDoSo.js.map +1 -0
  141. package/lib/module/components/MFBuilding.js +26 -26
  142. package/lib/module/components/MFBuilding.js.map +1 -1
  143. package/lib/module/components/MFCircle.js +20 -20
  144. package/lib/module/components/MFCircle.js.map +1 -1
  145. package/lib/module/components/MFDirectionsRenderer.js +32 -32
  146. package/lib/module/components/MFDirectionsRenderer.js.map +1 -1
  147. package/lib/module/components/MFMapView.js +88 -70
  148. package/lib/module/components/MFMapView.js.map +1 -1
  149. package/lib/module/components/MFMarker.js +35 -35
  150. package/lib/module/components/MFMarker.js.map +1 -1
  151. package/lib/module/components/MFPOI.js +20 -20
  152. package/lib/module/components/MFPOI.js.map +1 -1
  153. package/lib/module/components/MFPolygon.js +22 -22
  154. package/lib/module/components/MFPolygon.js.map +1 -1
  155. package/lib/module/components/MFPolyline.js +18 -18
  156. package/lib/module/components/MFPolyline.js.map +1 -1
  157. package/lib/module/components/MFTileOverlay.js +9 -9
  158. package/lib/module/components/MFTileOverlay.js.map +1 -1
  159. package/lib/module/components/Map4dMapView.js.map +1 -1
  160. package/lib/module/components/extends/AreaFocusManager.js +193 -0
  161. package/lib/module/components/extends/AreaFocusManager.js.map +1 -0
  162. package/lib/module/components/extends/AreaFocuser.js +21 -259
  163. package/lib/module/components/extends/AreaFocuser.js.map +1 -1
  164. package/lib/module/components/extends/BoundHelper.js +29 -0
  165. package/lib/module/components/extends/BoundHelper.js.map +1 -0
  166. package/lib/module/components/extends/area/AreaFocusAreas.js +156 -0
  167. package/lib/module/components/extends/area/AreaFocusAreas.js.map +1 -0
  168. package/lib/module/components/extends/area/AreaFocusGeometryUtils.js +153 -0
  169. package/lib/module/components/extends/area/AreaFocusGeometryUtils.js.map +1 -0
  170. package/lib/module/components/extends/area/AreaFocusSession.js +93 -0
  171. package/lib/module/components/extends/area/AreaFocusSession.js.map +1 -0
  172. package/lib/module/components/extends/area/AreaFocusTypes.js +33 -0
  173. package/lib/module/components/extends/area/AreaFocusTypes.js.map +1 -0
  174. package/lib/module/components/internal/DefaultRoadmapStyle.js +2281 -0
  175. package/lib/module/components/internal/DefaultRoadmapStyle.js.map +1 -0
  176. package/lib/module/components/internal/GeojsonStyleUtils.js +130 -0
  177. package/lib/module/components/internal/GeojsonStyleUtils.js.map +1 -0
  178. package/lib/module/index.js +2 -1
  179. package/lib/module/index.js.map +1 -1
  180. package/lib/typescript/components/Map4dMapView.d.ts +7 -7
  181. package/package.json +152 -152
  182. package/react-native-map4d-map.podspec +20 -20
  183. package/src/components/MFBanDoSo.js +124 -0
  184. package/src/components/MFBuilding.js +187 -187
  185. package/src/components/MFCircle.js +173 -173
  186. package/src/components/MFDirectionsRenderer.js +237 -237
  187. package/src/components/MFMapView.js +464 -447
  188. package/src/components/MFMarker.js +246 -246
  189. package/src/components/MFPOI.js +184 -184
  190. package/src/components/MFPolygon.js +186 -186
  191. package/src/components/MFPolyline.js +172 -172
  192. package/src/components/MFTileOverlay.js +45 -45
  193. package/src/components/Map4dMapView.tsx +26 -26
  194. package/src/components/extends/AreaFocusManager.js +196 -0
  195. package/src/components/extends/AreaFocuser.js +61 -338
  196. package/src/components/extends/BoundHelper.js +32 -0
  197. package/src/components/extends/area/AreaFocusAreas.js +164 -0
  198. package/src/components/extends/area/AreaFocusGeometryUtils.js +164 -0
  199. package/src/components/extends/area/AreaFocusSession.js +100 -0
  200. package/src/components/extends/area/AreaFocusTypes.js +36 -0
  201. package/src/components/internal/DefaultRoadmapStyle.js +3365 -0
  202. package/src/components/internal/GeojsonStyleUtils.js +143 -0
  203. package/src/index.js +25 -23
  204. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  205. package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
  206. package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
  207. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  208. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  209. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  210. package/android/.gradle/8.9/gc.properties +0 -0
  211. package/android/.gradle/9.0-milestone-1/checksums/checksums.lock +0 -0
  212. package/android/.gradle/9.0-milestone-1/checksums/md5-checksums.bin +0 -0
  213. package/android/.gradle/9.0-milestone-1/checksums/sha1-checksums.bin +0 -0
  214. package/android/.gradle/9.0-milestone-1/fileChanges/last-build.bin +0 -0
  215. package/android/.gradle/9.0-milestone-1/fileHashes/fileHashes.lock +0 -0
  216. package/android/.gradle/9.0-milestone-1/gc.properties +0 -0
  217. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  218. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  219. package/android/.gradle/config.properties +0 -2
  220. package/android/.gradle/vcs-1/gc.properties +0 -0
  221. package/android/.idea/AndroidProjectSystem.xml +0 -6
  222. package/android/.idea/caches/deviceStreaming.xml +0 -1570
  223. package/android/.idea/copilot.data.migration.ask2agent.xml +0 -6
  224. package/android/.idea/gradle.xml +0 -12
  225. package/android/.idea/migrations.xml +0 -10
  226. package/android/.idea/misc.xml +0 -10
  227. package/android/.idea/runConfigurations.xml +0 -17
  228. package/android/.idea/vcs.xml +0 -6
  229. package/android/local.properties +0 -8
@@ -1,493 +1,509 @@
1
- //
2
- // RMFMapViewManager.m
3
- // Map4dMap
4
- //
5
- // Created by Huy Dang on 4/27/20.
6
- // Copyright © 2020 IOTLink. All rights reserved.
7
- //
8
-
9
- #import "RMFMapViewManager.h"
10
- #import "RMFMapView.h"
11
- #import "RMFMarker.h"
12
- #import "RMFCircle.h"
13
- #import "RMFPolyline.h"
14
- #import "RMFPolygon.h"
15
- #import "RMFPOI.h"
16
- #import "RMFBuilding.h"
17
- #import "RMFDirectionsRenderer.h"
18
- #import <Foundation/Foundation.h>
19
- #import <React/RCTLog.h>
20
- #import <React/RCTBridge.h>
21
- #import <React/RCTUIManager.h>
22
- #import <React/RCTConvert+CoreLocation.h>
23
- #import "RCTConvert+Map4dMap.h"
24
- #import "RMFEventResponse.h"
25
-
26
- @interface RMFMapViewManager () <MFMapViewDelegate>
27
-
28
- @end
29
-
30
- @implementation RMFMapViewManager
31
-
32
- RCT_EXPORT_MODULE(RMFMapView)
33
-
34
- - (UIView *)view {
35
- RMFMapView * rMap = [[RMFMapView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
36
- // RMFMapView * rMap = [[RMFMapView alloc] init];
37
- // [rMap setMyLocationEnabled:true];
38
- rMap.delegate = self;
39
- return rMap;
40
- }
41
-
42
- RCT_EXPORT_VIEW_PROPERTY(onMapReady, RCTBubblingEventBlock)
43
- //RCT_EXPORT_VIEW_PROPERTY(onMapLoaded, RCTBubblingEventBlock)
44
- //RCT_EXPORT_VIEW_PROPERTY(onKmlReady, RCTBubblingEventBlock)
45
- RCT_EXPORT_VIEW_PROPERTY(onPress, RCTBubblingEventBlock)
46
- //RCT_EXPORT_VIEW_PROPERTY(onLongPress, RCTBubblingEventBlock)
47
- //RCT_EXPORT_VIEW_PROPERTY(onPanDrag, RCTBubblingEventBlock)
48
- //RCT_EXPORT_VIEW_PROPERTY(onUserLocationChange, RCTBubblingEventBlock)
49
- //RCT_EXPORT_VIEW_PROPERTY(onChange, RCTBubblingEventBlock)
50
- //RCT_EXPORT_VIEW_PROPERTY(onMarkerPress, RCTDirectEventBlock)
51
- //RCT_EXPORT_VIEW_PROPERTY(onRegionChange, RCTDirectEventBlock)
52
- //RCT_EXPORT_VIEW_PROPERTY(onRegionChangeComplete, RCTDirectEventBlock)
53
- RCT_EXPORT_VIEW_PROPERTY(onPoiPress, RCTDirectEventBlock)
54
- RCT_EXPORT_VIEW_PROPERTY(onBuildingPress, RCTDirectEventBlock)
55
- RCT_EXPORT_VIEW_PROPERTY(onPlacePress, RCTDirectEventBlock)
56
- RCT_EXPORT_VIEW_PROPERTY(onDataSourceFeaturePress, RCTDirectEventBlock)
57
- //RCT_EXPORT_VIEW_PROPERTY(onIndoorLevelActivated, RCTDirectEventBlock)
58
- //RCT_EXPORT_VIEW_PROPERTY(onIndoorBuildingFocused, RCTDirectEventBlock)
59
- RCT_EXPORT_VIEW_PROPERTY(onCameraIdle, RCTDirectEventBlock)
60
- RCT_EXPORT_VIEW_PROPERTY(onCameraMove, RCTDirectEventBlock)
61
- RCT_EXPORT_VIEW_PROPERTY(onCameraMoveStart, RCTDirectEventBlock)
62
- RCT_EXPORT_VIEW_PROPERTY(onMyLocationButtonPress, RCTDirectEventBlock)
63
-
64
- RCT_REMAP_VIEW_PROPERTY(mapID, mapIdProp, NSString)
65
- RCT_REMAP_VIEW_PROPERTY(camera, cameraProp, MFCameraPosition)
66
- RCT_REMAP_VIEW_PROPERTY(mapType, mapTypeProp, NSString)
67
- RCT_EXPORT_VIEW_PROPERTY(showsBuildings, BOOL)
68
- RCT_EXPORT_VIEW_PROPERTY(showsPOIs, BOOL)
69
- RCT_EXPORT_VIEW_PROPERTY(showsMyLocation, BOOL)
70
- RCT_EXPORT_VIEW_PROPERTY(showsMyLocationButton, BOOL)
71
-
72
- RCT_EXPORT_VIEW_PROPERTY(zoomGesturesEnabled, BOOL)
73
- RCT_EXPORT_VIEW_PROPERTY(scrollGesturesEnabled, BOOL)
74
- RCT_EXPORT_VIEW_PROPERTY(rotateGesturesEnabled, BOOL)
75
- RCT_EXPORT_VIEW_PROPERTY(tiltGesturesEnabled, BOOL)
76
-
77
-
78
- RCT_EXPORT_METHOD(getCamera:(nonnull NSNumber *)reactTag
79
- resolver: (RCTPromiseResolveBlock)resolve
80
- rejecter:(RCTPromiseRejectBlock)reject)
81
- {
82
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
83
- id view = viewRegistry[reactTag];
84
- if (![view isKindOfClass:[RMFMapView class]]) {
85
- reject(@"Invalid argument", [NSString stringWithFormat:@"Invalid view returned from registry, expecting RMFMapView, got: %@", view], NULL);
86
- } else {
87
- RMFMapView *mapView = (RMFMapView *)view;
88
- MFCameraPosition *camera = [mapView camera];
89
- resolve([RMFEventResponse fromCameraPosition:camera]);
90
- }
91
- }];
92
- }
93
-
94
- RCT_EXPORT_METHOD(getBounds:(nonnull NSNumber *)reactTag
95
- resolver: (RCTPromiseResolveBlock)resolve
96
- rejecter:(RCTPromiseRejectBlock)reject)
97
- {
98
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
99
- id view = viewRegistry[reactTag];
100
- if (![view isKindOfClass:[RMFMapView class]]) {
101
- reject(@"Invalid argument", [NSString stringWithFormat:@"Invalid view returned from registry, expecting RMFMapView, got: %@", view], NULL);
102
- } else {
103
- RMFMapView *mapView = (RMFMapView *)view;
104
- MFCoordinateBounds* bounds = [mapView getBounds];
105
- resolve([RMFEventResponse fromCoordinateBounds:bounds]);
106
- }
107
- }];
108
- }
109
-
110
- RCT_EXPORT_METHOD(cameraForBounds:(nonnull NSNumber *)reactTag
111
- withData:(id)json
112
- resolver: (RCTPromiseResolveBlock)resolve
113
- rejecter:(RCTPromiseRejectBlock)reject)
114
- {
115
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
116
- id view = viewRegistry[reactTag];
117
- if (![view isKindOfClass:[RMFMapView class]]) {
118
- reject(@"Invalid argument", [NSString stringWithFormat:@"Invalid view returned from registry, expecting RMFMapView, got: %@", view], NULL);
119
- } else {
120
- RMFMapView *mapView = (RMFMapView *)view;
121
- MFCameraPosition *camera = nil;
122
- id data = [RCTConvert NSDictionary:json];
123
- if (data[@"bounds"]) {
124
- MFCoordinateBounds* bounds = [RCTConvert MFCoordinateBounds:data[@"bounds"]];
125
- if (data[@"padding"]) {
126
- UIEdgeInsets insets = [RCTConvert UIEdgeInsets:data[@"padding"]];
127
- camera = [mapView cameraForBounds:bounds insets:insets];
128
- }
129
- else {
130
- camera = [mapView cameraForBounds:bounds];
131
- }
132
- }
133
- resolve([RMFEventResponse fromCameraPosition:camera]);
134
- }
135
- }];
136
- }
137
-
138
- RCT_EXPORT_METHOD(fitBounds:(nonnull NSNumber *)reactTag
139
- withData:(id)json)
140
- {
141
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
142
- id view = viewRegistry[reactTag];
143
- if (![view isKindOfClass:[RMFMapView class]]) {
144
- RCTLogError(@"Invalid view returned from registry, expecting RMFMapView, got: %@", view);
145
- } else {
146
- RMFMapView *mapView = (RMFMapView *)view;
147
- MFCameraPosition* camera = nil;
148
- id data = [RCTConvert NSDictionary:json];
149
- if (data[@"bounds"]) {
150
- MFCoordinateBounds* bounds = [RCTConvert MFCoordinateBounds:data[@"bounds"]];
151
- if (data[@"padding"]) {
152
- UIEdgeInsets insets = [RCTConvert UIEdgeInsets:data[@"padding"]];
153
- camera = [mapView cameraForBounds:bounds insets:insets];
154
- }
155
- else {
156
- camera = [mapView cameraForBounds:bounds];
157
- }
158
- [mapView moveCamera:[MFCameraUpdate setCamera:camera]];
159
- }
160
- }
161
- }];
162
- }
163
-
164
- RCT_EXPORT_METHOD(pointForCoordinate:(nonnull NSNumber *)reactTag
165
- withCoordinate:(id)json
166
- resolver: (RCTPromiseResolveBlock)resolve
167
- rejecter:(RCTPromiseRejectBlock)reject)
168
- {
169
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
170
- id view = viewRegistry[reactTag];
171
- if (![view isKindOfClass:[RMFMapView class]]) {
172
- reject(@"Invalid argument", [NSString stringWithFormat:@"Invalid view returned from registry, expecting RMFMapView, got: %@", view], NULL);
173
- } else {
174
- RMFMapView *mapView = (RMFMapView *)view;
175
- CGPoint point = [mapView.projection pointForCoordinate:[RCTConvert CLLocationCoordinate2D:json]];
176
- resolve([RMFEventResponse fromCGPoint:point]);
177
- }
178
- }];
179
- }
180
-
181
- RCT_EXPORT_METHOD(coordinateForPoint:(nonnull NSNumber *)reactTag
182
- withPoint:(id)json
183
- resolver: (RCTPromiseResolveBlock)resolve
184
- rejecter:(RCTPromiseRejectBlock)reject)
185
- {
186
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
187
- id view = viewRegistry[reactTag];
188
- if (![view isKindOfClass:[RMFMapView class]]) {
189
- reject(@"Invalid argument", [NSString stringWithFormat:@"Invalid view returned from registry, expecting RMFMapView, got: %@", view], NULL);
190
- } else {
191
- RMFMapView *mapView = (RMFMapView *)view;
192
- CLLocationCoordinate2D coordinate = [mapView.projection coordinateForPoint:[RCTConvert CGPoint:json]];
193
- resolve([RMFEventResponse fromCoordinate:coordinate]);
194
- }
195
- }];
196
- }
197
-
198
- RCT_EXPORT_METHOD(animateCamera:(nonnull NSNumber *)reactTag
199
- withCamera:(id)json) {
200
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
201
- id view = viewRegistry[reactTag];
202
- if (![view isKindOfClass:[RMFMapView class]]) {
203
- RCTLogError(@"Invalid view returned from registry, expecting RMFMapView, got: %@", view);
204
- } else {
205
- RMFMapView *mapView = (RMFMapView *)view;
206
- [mapView animateCamera:[MFCameraUpdate setCamera:[RCTConvert MFCameraPosition:json withDefaultCamera:mapView.camera]]];
207
- }
208
- }];
209
- }
210
-
211
- RCT_EXPORT_METHOD(moveCamera:(nonnull NSNumber *)reactTag
212
- withCamera:(id)json) {
213
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
214
- id view = viewRegistry[reactTag];
215
- if (![view isKindOfClass:[RMFMapView class]]) {
216
- RCTLogError(@"Invalid view returned from registry, expecting RMFMapView, got: %@", view);
217
- } else {
218
- RMFMapView *mapView = (RMFMapView *)view;
219
- [mapView moveCamera:[MFCameraUpdate setCamera:[RCTConvert MFCameraPosition:json withDefaultCamera:mapView.camera]]];
220
- }
221
- }];
222
- }
223
-
224
- RCT_EXPORT_METHOD(showsMyLocationButton:(nonnull NSNumber *)reactTag
225
- enable:(BOOL)enable) {
226
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
227
- id view = viewRegistry[reactTag];
228
- if (![view isKindOfClass:[RMFMapView class]]) {
229
-
230
- } else {
231
- RMFMapView *mapView = (RMFMapView *)view;
232
- mapView.settings.myLocationButton = enable;
233
- }
234
- }];
235
- }
236
-
237
- RCT_EXPORT_METHOD(setMyLocationEnabled:(nonnull NSNumber *)reactTag
238
- enable:(BOOL)enable) {
239
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
240
- id view = viewRegistry[reactTag];
241
- if (![view isKindOfClass:[RMFMapView class]]) {
242
-
243
- } else {
244
- RMFMapView *mapView = (RMFMapView *)view;
245
- [mapView setMyLocationEnabled:enable];
246
- }
247
- }];
248
- }
249
-
250
- RCT_EXPORT_METHOD(getMyLocation:(nonnull NSNumber *)reactTag
251
- resolver: (RCTPromiseResolveBlock)resolve
252
- rejecter:(RCTPromiseRejectBlock)reject)
253
- {
254
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
255
- id view = viewRegistry[reactTag];
256
- if (![view isKindOfClass:[RMFMapView class]]) {
257
- reject(@"Invalid argument", [NSString stringWithFormat:@"Invalid view returned from registry, expecting RMFMapView, got: %@", view], NULL);
258
- } else {
259
- RMFMapView *mapView = (RMFMapView *)view;
260
- CLLocation *location = [mapView getMyLocation];
261
- resolve([RMFEventResponse fromCLLocation:location]);
262
- }
263
- }];
264
- }
265
-
266
- RCT_EXPORT_METHOD(setPOIsEnabled:(nonnull NSNumber *)reactTag
267
- enable:(BOOL)enable) {
268
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
269
- id view = viewRegistry[reactTag];
270
- if (![view isKindOfClass:[RMFMapView class]]) {
271
-
272
- } else {
273
- RMFMapView *mapView = (RMFMapView *)view;
274
- [mapView setPOIsEnabled:enable];
275
- }
276
- }];
277
- }
278
-
279
- RCT_EXPORT_METHOD(setTime:(nonnull NSNumber *)reactTag
280
- withTime:(id)json) {
281
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
282
- id view = viewRegistry[reactTag];
283
- if (![view isKindOfClass:[RMFMapView class]]) {
284
-
285
- } else {
286
- RMFMapView *mapView = (RMFMapView *)view;
287
- NSDate * date = [RCTConvert NSDate:json];
288
- if (date) {
289
- [mapView setTime:date];
290
- }
291
- }
292
- }];
293
- }
294
-
295
-
296
- RCT_EXPORT_METHOD(setZoomGesturesEnabled:(nonnull NSNumber *)reactTag
297
- enable:(BOOL)enable) {
298
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
299
- id view = viewRegistry[reactTag];
300
- if (![view isKindOfClass:[RMFMapView class]]) {
301
-
302
- } else {
303
- RMFMapView *mapView = (RMFMapView *)view;
304
- mapView.settings.zoomGestures = enable;
305
- }
306
- }];
307
- }
308
-
309
- RCT_EXPORT_METHOD(setScrollGesturesEnabled:(nonnull NSNumber *)reactTag
310
- enable:(BOOL)enable) {
311
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
312
- id view = viewRegistry[reactTag];
313
- if (![view isKindOfClass:[RMFMapView class]]) {
314
-
315
- } else {
316
- RMFMapView *mapView = (RMFMapView *)view;
317
- mapView.settings.scrollGestures = enable;
318
- }
319
- }];
320
- }
321
-
322
- RCT_EXPORT_METHOD(setRotateGesturesEnabled:(nonnull NSNumber *)reactTag
323
- enable:(BOOL)enable) {
324
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
325
- id view = viewRegistry[reactTag];
326
- if (![view isKindOfClass:[RMFMapView class]]) {
327
-
328
- } else {
329
- RMFMapView *mapView = (RMFMapView *)view;
330
- mapView.settings.rotateGestures = enable;
331
- }
332
- }];
333
- }
334
-
335
- RCT_EXPORT_METHOD(setTiltGesturesEnabled:(nonnull NSNumber *)reactTag
336
- enable:(BOOL)enable) {
337
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
338
- id view = viewRegistry[reactTag];
339
- if (![view isKindOfClass:[RMFMapView class]]) {
340
-
341
- } else {
342
- RMFMapView *mapView = (RMFMapView *)view;
343
- mapView.settings.tiltGestures = enable;
344
- }
345
- }];
346
- }
347
-
348
- RCT_EXPORT_METHOD(setAllGesturesEnabled:(nonnull NSNumber *)reactTag
349
- enable:(BOOL)enable) {
350
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
351
- id view = viewRegistry[reactTag];
352
- if (![view isKindOfClass:[RMFMapView class]]) {
353
-
354
- } else {
355
- RMFMapView *mapView = (RMFMapView *)view;
356
- [mapView.settings setAllGesturesEnabled:enable];
357
- }
358
- }];
359
- }
360
-
361
-
362
- // Delegate
363
- - (BOOL)mapview:(MFMapView *)mapView didTapMarker:(MFMarker *)marker {
364
- RMFMapView* map = (RMFMapView*)mapView;
365
-
366
- RMFMarkerMap4d * rMarker = (RMFMarkerMap4d *) marker;
367
- [rMarker.reactMarker didTapAtPixel:map.lastTapPixel];
368
- return NO;
369
- }
370
-
371
- - (void)mapview:(MFMapView *)mapView didBeginDraggingMarker:(MFMarker *)marker {
372
- if ([marker isKindOfClass:[RMFMarkerMap4d class]]) {
373
- RMFMapView* map = (RMFMapView*)mapView;
374
- RMFMarkerMap4d * rMarker = (RMFMarkerMap4d *) marker;
375
- [rMarker.reactMarker didBeginDraggingMarkerAtPixel:map.lastLongPressPixel];
376
- }
377
- }
378
-
379
- - (void)mapview:(MFMapView *)mapView didEndDraggingMarker:(MFMarker *)marker {
380
- if ([marker isKindOfClass:[RMFMarkerMap4d class]]) {
381
- RMFMapView* map = (RMFMapView*)mapView;
382
- RMFMarkerMap4d * rMarker = (RMFMarkerMap4d *) marker;
383
- [rMarker.reactMarker didEndDraggingMarkerAtPixel:map.lastLongPressPixel];
384
- }
385
- }
386
-
387
- - (void)mapview:(MFMapView *)mapView didDragMarker:(MFMarker *)marker {
388
- if ([marker isKindOfClass:[RMFMarkerMap4d class]]) {
389
- RMFMapView* map = (RMFMapView*)mapView;
390
- RMFMarkerMap4d * rMarker = (RMFMarkerMap4d *) marker;
391
- [rMarker.reactMarker didDragMarkerAtPixel:map.lastPanPixel];
392
- }
393
- }
394
-
395
- - (void)mapview:(MFMapView *)mapView didTapInfoWindowOfMarker:(MFMarker *)marker {
396
- RMFMapView* map = (RMFMapView*)mapView;
397
-
398
- RMFMarkerMap4d * rMarker = (RMFMarkerMap4d *) marker;
399
- [rMarker.reactMarker didTapInfoWindowAtPixel:map.lastTapPixel];
400
- }
401
-
402
- - (void)mapview:(MFMapView *)mapView didTapPolyline:(MFPolyline *)polyline {
403
- RMFMapView* map = (RMFMapView*)mapView;
404
- RMFPolylineMap4d * rPolyline = (RMFPolylineMap4d *) polyline;
405
- [rPolyline.reactPolyline didTapAtPixel:map.lastTapPixel];
406
- }
407
-
408
- - (void)mapview:(MFMapView *)mapView didTapPolygon:(MFPolygon *)polygon {
409
- RMFMapView* map = (RMFMapView*)mapView;
410
- RMFPolygonMap4d * rPolygon = (RMFPolygonMap4d*) polygon;
411
- [rPolygon.reactPolygon didTapAtPixel:map.lastTapPixel];
412
- }
413
-
414
- - (void)mapview:(MFMapView *)mapView didTapCircle:(MFCircle *)circle {
415
- RMFMapView* map = (RMFMapView*)mapView;
416
- RMFCircleMap4d * rCircle = (RMFCircleMap4d*)circle;
417
- [rCircle.reactCircle didTapAtPixel:map.lastTapPixel];
418
- }
419
-
420
- - (void)mapView: (MFMapView*) mapView willMove: (BOOL) gesture {
421
- RMFMapView* reactMapView = (RMFMapView*) mapView;
422
- [reactMapView willMove:gesture];
423
- }
424
-
425
- - (void)mapView:(MFMapView *)mapView movingCameraPosition:(MFCameraPosition *)position {
426
- RMFMapView* reactMapView = (RMFMapView*) mapView;
427
- [reactMapView movingCameraPosition:position];
428
- }
429
-
430
- //- (void)mapView:(MFMapView *)mapView didChangeCameraPosition:(MFCameraPosition *)position {
431
- //}
432
-
433
- - (void)mapView:(MFMapView *)mapView idleAtCameraPosition:(MFCameraPosition *)position {
434
- RMFMapView* reactMapView = (RMFMapView*) mapView;
435
- [reactMapView idleAtCameraPosition:position];
436
- }
437
-
438
- - (void)mapView:(MFMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate {
439
- RMFMapView* map = (RMFMapView*)mapView;
440
- [map didTapAtCoordinate:coordinate];
441
- }
442
-
443
- - (void)mapView:(MFMapView *)mapView didTapPOI:(MFPOI *)poi {
444
- RMFMapView* map = (RMFMapView*)mapView;
445
- RMFPOIMap4d* rPOI = (RMFPOIMap4d*) poi;
446
- [rPOI.reactPOI didTapAtPixel:map.lastTapPixel];
447
- }
448
-
449
- - (void)mapView:(MFMapView *)mapView didTapPOIWithPlaceID:(NSString *)placeID name:(NSString *)name location:(CLLocationCoordinate2D)location {
450
- RMFMapView* reactMapView = (RMFMapView*) mapView;
451
- [reactMapView didTapPOIWithPlaceID:placeID name:name location:location];
452
- }
453
-
454
- - (void)mapView:(MFMapView *)mapView didTapBuilding:(MFBuilding *)building {
455
- RMFMapView* map = (RMFMapView*)mapView;
456
- RMFBuildingMap4d *rBuilding = (RMFBuildingMap4d *) building;
457
- [rBuilding.reactBuilding didTapAtPixel:map.lastTapPixel];
458
- }
459
-
460
- - (void)mapView:(MFMapView *)mapView didTapBuildingWithBuildingID:(NSString *)buildingID name:(NSString *)name location:(CLLocationCoordinate2D)location {
461
- RMFMapView* reactMapView = (RMFMapView*) mapView;
462
- [reactMapView didTapBuildingWithBuildingID:buildingID name:name location:location];
463
- }
464
-
465
- - (void)mapView:(MFMapView *)mapView didTapPlaceWithName:(NSString *)name location:(CLLocationCoordinate2D)location {
466
- RMFMapView* reactMapView = (RMFMapView*) mapView;
467
- [reactMapView didTapPlaceWithName:name location:location];
468
- }
469
-
470
- - (void)mapView:(MFMapView *)mapView didTapDataSourceFeature:(MFDataSourceFeature *)feature location:(CLLocationCoordinate2D)location {
471
- RMFMapView* reactMapView = (RMFMapView*) mapView;
472
- [reactMapView didTapDataSourceFeature:feature location:location];
473
- }
474
-
475
- - (void)mapView:(MFMapView *)mapView didTapDirectionsRenderer:(MFDirectionsRenderer *)renderer routeIndex:(NSUInteger)routeIndex {
476
- RMFMapView* map = (RMFMapView*)mapView;
477
- RMFDirectionsRendererMap4d* rRenderer = (RMFDirectionsRendererMap4d*)renderer;
478
- [rRenderer.reactRenderer didTapAtPixel:map.lastTapPixel withRouteIndex:routeIndex];
479
- }
480
-
481
- //- (void)mapView:(MFMapView *)mapView didTapMyLocation:(CLLocationCoordinate2D)location {
482
- //}
483
-
484
- - (BOOL)didTapMyLocationButtonForMapView:(MFMapView *)mapView {
485
- RMFMapView* reactMapView = (RMFMapView*) mapView;
486
- return [reactMapView didTapMyLocationButton];
487
- }
488
-
489
- - (UIView *)mapView:(MFMapView *)mapView markerInfoWindow:(MFMarker *)marker {
490
- return nil;
491
- }
492
-
493
- @end
1
+ //
2
+ // RMFMapViewManager.m
3
+ // Map4dMap
4
+ //
5
+ // Created by Huy Dang on 4/27/20.
6
+ // Copyright © 2020 IOTLink. All rights reserved.
7
+ //
8
+
9
+ #import "RMFMapViewManager.h"
10
+ #import "RMFMapView.h"
11
+ #import "RMFMarker.h"
12
+ #import "RMFCircle.h"
13
+ #import "RMFPolyline.h"
14
+ #import "RMFPolygon.h"
15
+ #import "RMFPOI.h"
16
+ #import "RMFBuilding.h"
17
+ #import "RMFDirectionsRenderer.h"
18
+ #import <Foundation/Foundation.h>
19
+ #import <React/RCTLog.h>
20
+ #import <React/RCTBridge.h>
21
+ #import <React/RCTUIManager.h>
22
+ #import <React/RCTConvert+CoreLocation.h>
23
+ #import "RCTConvert+Map4dMap.h"
24
+ #import "RMFEventResponse.h"
25
+
26
+ @interface RMFMapViewManager () <MFMapViewDelegate>
27
+
28
+ @end
29
+
30
+ @implementation RMFMapViewManager
31
+
32
+ RCT_EXPORT_MODULE(RMFMapView)
33
+
34
+ - (UIView *)view {
35
+ RMFMapView * rMap = [[RMFMapView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
36
+ // RMFMapView * rMap = [[RMFMapView alloc] init];
37
+ // [rMap setMyLocationEnabled:true];
38
+ rMap.delegate = self;
39
+ return rMap;
40
+ }
41
+
42
+ RCT_EXPORT_VIEW_PROPERTY(onMapReady, RCTBubblingEventBlock)
43
+ //RCT_EXPORT_VIEW_PROPERTY(onMapLoaded, RCTBubblingEventBlock)
44
+ //RCT_EXPORT_VIEW_PROPERTY(onKmlReady, RCTBubblingEventBlock)
45
+ RCT_EXPORT_VIEW_PROPERTY(onPress, RCTBubblingEventBlock)
46
+ //RCT_EXPORT_VIEW_PROPERTY(onLongPress, RCTBubblingEventBlock)
47
+ //RCT_EXPORT_VIEW_PROPERTY(onPanDrag, RCTBubblingEventBlock)
48
+ //RCT_EXPORT_VIEW_PROPERTY(onUserLocationChange, RCTBubblingEventBlock)
49
+ //RCT_EXPORT_VIEW_PROPERTY(onChange, RCTBubblingEventBlock)
50
+ //RCT_EXPORT_VIEW_PROPERTY(onMarkerPress, RCTDirectEventBlock)
51
+ //RCT_EXPORT_VIEW_PROPERTY(onRegionChange, RCTDirectEventBlock)
52
+ //RCT_EXPORT_VIEW_PROPERTY(onRegionChangeComplete, RCTDirectEventBlock)
53
+ RCT_EXPORT_VIEW_PROPERTY(onPoiPress, RCTDirectEventBlock)
54
+ RCT_EXPORT_VIEW_PROPERTY(onBuildingPress, RCTDirectEventBlock)
55
+ RCT_EXPORT_VIEW_PROPERTY(onPlacePress, RCTDirectEventBlock)
56
+ RCT_EXPORT_VIEW_PROPERTY(onDataSourceFeaturePress, RCTDirectEventBlock)
57
+ //RCT_EXPORT_VIEW_PROPERTY(onIndoorLevelActivated, RCTDirectEventBlock)
58
+ //RCT_EXPORT_VIEW_PROPERTY(onIndoorBuildingFocused, RCTDirectEventBlock)
59
+ RCT_EXPORT_VIEW_PROPERTY(onCameraIdle, RCTDirectEventBlock)
60
+ RCT_EXPORT_VIEW_PROPERTY(onCameraMove, RCTDirectEventBlock)
61
+ RCT_EXPORT_VIEW_PROPERTY(onCameraMoveStart, RCTDirectEventBlock)
62
+ RCT_EXPORT_VIEW_PROPERTY(onMyLocationButtonPress, RCTDirectEventBlock)
63
+
64
+ RCT_REMAP_VIEW_PROPERTY(mapID, mapIdProp, NSString)
65
+ RCT_REMAP_VIEW_PROPERTY(camera, cameraProp, MFCameraPosition)
66
+ RCT_REMAP_VIEW_PROPERTY(mapType, mapTypeProp, NSString)
67
+ RCT_EXPORT_VIEW_PROPERTY(showsBuildings, BOOL)
68
+ RCT_EXPORT_VIEW_PROPERTY(showsPOIs, BOOL)
69
+ RCT_EXPORT_VIEW_PROPERTY(showsMyLocation, BOOL)
70
+ RCT_EXPORT_VIEW_PROPERTY(showsMyLocationButton, BOOL)
71
+
72
+ RCT_EXPORT_VIEW_PROPERTY(zoomGesturesEnabled, BOOL)
73
+ RCT_EXPORT_VIEW_PROPERTY(scrollGesturesEnabled, BOOL)
74
+ RCT_EXPORT_VIEW_PROPERTY(rotateGesturesEnabled, BOOL)
75
+ RCT_EXPORT_VIEW_PROPERTY(tiltGesturesEnabled, BOOL)
76
+
77
+
78
+ RCT_EXPORT_METHOD(getCamera:(nonnull NSNumber *)reactTag
79
+ resolver: (RCTPromiseResolveBlock)resolve
80
+ rejecter:(RCTPromiseRejectBlock)reject)
81
+ {
82
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
83
+ id view = viewRegistry[reactTag];
84
+ if (![view isKindOfClass:[RMFMapView class]]) {
85
+ reject(@"Invalid argument", [NSString stringWithFormat:@"Invalid view returned from registry, expecting RMFMapView, got: %@", view], NULL);
86
+ } else {
87
+ RMFMapView *mapView = (RMFMapView *)view;
88
+ MFCameraPosition *camera = [mapView camera];
89
+ resolve([RMFEventResponse fromCameraPosition:camera]);
90
+ }
91
+ }];
92
+ }
93
+
94
+ RCT_EXPORT_METHOD(getBounds:(nonnull NSNumber *)reactTag
95
+ resolver: (RCTPromiseResolveBlock)resolve
96
+ rejecter:(RCTPromiseRejectBlock)reject)
97
+ {
98
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
99
+ id view = viewRegistry[reactTag];
100
+ if (![view isKindOfClass:[RMFMapView class]]) {
101
+ reject(@"Invalid argument", [NSString stringWithFormat:@"Invalid view returned from registry, expecting RMFMapView, got: %@", view], NULL);
102
+ } else {
103
+ RMFMapView *mapView = (RMFMapView *)view;
104
+ MFCoordinateBounds* bounds = [mapView getBounds];
105
+ resolve([RMFEventResponse fromCoordinateBounds:bounds]);
106
+ }
107
+ }];
108
+ }
109
+
110
+ RCT_EXPORT_METHOD(cameraForBounds:(nonnull NSNumber *)reactTag
111
+ withData:(id)json
112
+ resolver: (RCTPromiseResolveBlock)resolve
113
+ rejecter:(RCTPromiseRejectBlock)reject)
114
+ {
115
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
116
+ id view = viewRegistry[reactTag];
117
+ if (![view isKindOfClass:[RMFMapView class]]) {
118
+ reject(@"Invalid argument", [NSString stringWithFormat:@"Invalid view returned from registry, expecting RMFMapView, got: %@", view], NULL);
119
+ } else {
120
+ RMFMapView *mapView = (RMFMapView *)view;
121
+ MFCameraPosition *camera = nil;
122
+ id data = [RCTConvert NSDictionary:json];
123
+ if (data[@"bounds"]) {
124
+ MFCoordinateBounds* bounds = [RCTConvert MFCoordinateBounds:data[@"bounds"]];
125
+ if (data[@"padding"]) {
126
+ UIEdgeInsets insets = [RCTConvert UIEdgeInsets:data[@"padding"]];
127
+ camera = [mapView cameraForBounds:bounds insets:insets];
128
+ }
129
+ else {
130
+ camera = [mapView cameraForBounds:bounds];
131
+ }
132
+ }
133
+ resolve([RMFEventResponse fromCameraPosition:camera]);
134
+ }
135
+ }];
136
+ }
137
+
138
+ RCT_EXPORT_METHOD(fitBounds:(nonnull NSNumber *)reactTag
139
+ withData:(id)json)
140
+ {
141
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
142
+ id view = viewRegistry[reactTag];
143
+ if (![view isKindOfClass:[RMFMapView class]]) {
144
+ RCTLogError(@"Invalid view returned from registry, expecting RMFMapView, got: %@", view);
145
+ } else {
146
+ RMFMapView *mapView = (RMFMapView *)view;
147
+ MFCameraPosition* camera = nil;
148
+ id data = [RCTConvert NSDictionary:json];
149
+ if (data[@"bounds"]) {
150
+ MFCoordinateBounds* bounds = [RCTConvert MFCoordinateBounds:data[@"bounds"]];
151
+ if (data[@"padding"]) {
152
+ UIEdgeInsets insets = [RCTConvert UIEdgeInsets:data[@"padding"]];
153
+ camera = [mapView cameraForBounds:bounds insets:insets];
154
+ }
155
+ else {
156
+ camera = [mapView cameraForBounds:bounds];
157
+ }
158
+ [mapView moveCamera:[MFCameraUpdate setCamera:camera]];
159
+ }
160
+ }
161
+ }];
162
+ }
163
+
164
+ RCT_EXPORT_METHOD(pointForCoordinate:(nonnull NSNumber *)reactTag
165
+ withCoordinate:(id)json
166
+ resolver: (RCTPromiseResolveBlock)resolve
167
+ rejecter:(RCTPromiseRejectBlock)reject)
168
+ {
169
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
170
+ id view = viewRegistry[reactTag];
171
+ if (![view isKindOfClass:[RMFMapView class]]) {
172
+ reject(@"Invalid argument", [NSString stringWithFormat:@"Invalid view returned from registry, expecting RMFMapView, got: %@", view], NULL);
173
+ } else {
174
+ RMFMapView *mapView = (RMFMapView *)view;
175
+ CGPoint point = [mapView.projection pointForCoordinate:[RCTConvert CLLocationCoordinate2D:json]];
176
+ resolve([RMFEventResponse fromCGPoint:point]);
177
+ }
178
+ }];
179
+ }
180
+
181
+ RCT_EXPORT_METHOD(coordinateForPoint:(nonnull NSNumber *)reactTag
182
+ withPoint:(id)json
183
+ resolver: (RCTPromiseResolveBlock)resolve
184
+ rejecter:(RCTPromiseRejectBlock)reject)
185
+ {
186
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
187
+ id view = viewRegistry[reactTag];
188
+ if (![view isKindOfClass:[RMFMapView class]]) {
189
+ reject(@"Invalid argument", [NSString stringWithFormat:@"Invalid view returned from registry, expecting RMFMapView, got: %@", view], NULL);
190
+ } else {
191
+ RMFMapView *mapView = (RMFMapView *)view;
192
+ CLLocationCoordinate2D coordinate = [mapView.projection coordinateForPoint:[RCTConvert CGPoint:json]];
193
+ resolve([RMFEventResponse fromCoordinate:coordinate]);
194
+ }
195
+ }];
196
+ }
197
+
198
+ RCT_EXPORT_METHOD(animateCamera:(nonnull NSNumber *)reactTag
199
+ withCamera:(id)json) {
200
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
201
+ id view = viewRegistry[reactTag];
202
+ if (![view isKindOfClass:[RMFMapView class]]) {
203
+ RCTLogError(@"Invalid view returned from registry, expecting RMFMapView, got: %@", view);
204
+ } else {
205
+ RMFMapView *mapView = (RMFMapView *)view;
206
+ [mapView animateCamera:[MFCameraUpdate setCamera:[RCTConvert MFCameraPosition:json withDefaultCamera:mapView.camera]]];
207
+ }
208
+ }];
209
+ }
210
+
211
+ RCT_EXPORT_METHOD(moveCamera:(nonnull NSNumber *)reactTag
212
+ withCamera:(id)json) {
213
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
214
+ id view = viewRegistry[reactTag];
215
+ if (![view isKindOfClass:[RMFMapView class]]) {
216
+ RCTLogError(@"Invalid view returned from registry, expecting RMFMapView, got: %@", view);
217
+ } else {
218
+ RMFMapView *mapView = (RMFMapView *)view;
219
+ [mapView moveCamera:[MFCameraUpdate setCamera:[RCTConvert MFCameraPosition:json withDefaultCamera:mapView.camera]]];
220
+ }
221
+ }];
222
+ }
223
+
224
+ RCT_EXPORT_METHOD(showsMyLocationButton:(nonnull NSNumber *)reactTag
225
+ enable:(BOOL)enable) {
226
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
227
+ id view = viewRegistry[reactTag];
228
+ if (![view isKindOfClass:[RMFMapView class]]) {
229
+
230
+ } else {
231
+ RMFMapView *mapView = (RMFMapView *)view;
232
+ mapView.settings.myLocationButton = enable;
233
+ }
234
+ }];
235
+ }
236
+
237
+ RCT_EXPORT_METHOD(setMyLocationEnabled:(nonnull NSNumber *)reactTag
238
+ enable:(BOOL)enable) {
239
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
240
+ id view = viewRegistry[reactTag];
241
+ if (![view isKindOfClass:[RMFMapView class]]) {
242
+
243
+ } else {
244
+ RMFMapView *mapView = (RMFMapView *)view;
245
+ [mapView setMyLocationEnabled:enable];
246
+ }
247
+ }];
248
+ }
249
+
250
+ RCT_EXPORT_METHOD(getMyLocation:(nonnull NSNumber *)reactTag
251
+ resolver: (RCTPromiseResolveBlock)resolve
252
+ rejecter:(RCTPromiseRejectBlock)reject)
253
+ {
254
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
255
+ id view = viewRegistry[reactTag];
256
+ if (![view isKindOfClass:[RMFMapView class]]) {
257
+ reject(@"Invalid argument", [NSString stringWithFormat:@"Invalid view returned from registry, expecting RMFMapView, got: %@", view], NULL);
258
+ } else {
259
+ RMFMapView *mapView = (RMFMapView *)view;
260
+ CLLocation *location = [mapView getMyLocation];
261
+ resolve([RMFEventResponse fromCLLocation:location]);
262
+ }
263
+ }];
264
+ }
265
+
266
+ RCT_EXPORT_METHOD(setPOIsEnabled:(nonnull NSNumber *)reactTag
267
+ enable:(BOOL)enable) {
268
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
269
+ id view = viewRegistry[reactTag];
270
+ if (![view isKindOfClass:[RMFMapView class]]) {
271
+
272
+ } else {
273
+ RMFMapView *mapView = (RMFMapView *)view;
274
+ [mapView setPOIsEnabled:enable];
275
+ }
276
+ }];
277
+ }
278
+
279
+ RCT_EXPORT_METHOD(setTime:(nonnull NSNumber *)reactTag
280
+ withTime:(id)json) {
281
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
282
+ id view = viewRegistry[reactTag];
283
+ if (![view isKindOfClass:[RMFMapView class]]) {
284
+
285
+ } else {
286
+ RMFMapView *mapView = (RMFMapView *)view;
287
+ NSDate * date = [RCTConvert NSDate:json];
288
+ if (date) {
289
+ [mapView setTime:date];
290
+ }
291
+ }
292
+ }];
293
+ }
294
+
295
+ RCT_EXPORT_METHOD(setMapStyle:(nonnull NSNumber *)reactTag
296
+ withStyle:(NSString *)style) {
297
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
298
+ id view = viewRegistry[reactTag];
299
+ if (![view isKindOfClass:[RMFMapView class]]) {
300
+
301
+ } else {
302
+ RMFMapView *mapView = (RMFMapView *)view;
303
+ if (style.length > 0) {
304
+ MFMapStyle *mapStyle = [[MFMapStyle alloc] initWithJSONString:style];
305
+ [mapView setMapStyle:mapStyle];
306
+ }
307
+ }
308
+ }];
309
+ }
310
+
311
+
312
+ RCT_EXPORT_METHOD(setZoomGesturesEnabled:(nonnull NSNumber *)reactTag
313
+ enable:(BOOL)enable) {
314
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
315
+ id view = viewRegistry[reactTag];
316
+ if (![view isKindOfClass:[RMFMapView class]]) {
317
+
318
+ } else {
319
+ RMFMapView *mapView = (RMFMapView *)view;
320
+ mapView.settings.zoomGestures = enable;
321
+ }
322
+ }];
323
+ }
324
+
325
+ RCT_EXPORT_METHOD(setScrollGesturesEnabled:(nonnull NSNumber *)reactTag
326
+ enable:(BOOL)enable) {
327
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
328
+ id view = viewRegistry[reactTag];
329
+ if (![view isKindOfClass:[RMFMapView class]]) {
330
+
331
+ } else {
332
+ RMFMapView *mapView = (RMFMapView *)view;
333
+ mapView.settings.scrollGestures = enable;
334
+ }
335
+ }];
336
+ }
337
+
338
+ RCT_EXPORT_METHOD(setRotateGesturesEnabled:(nonnull NSNumber *)reactTag
339
+ enable:(BOOL)enable) {
340
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
341
+ id view = viewRegistry[reactTag];
342
+ if (![view isKindOfClass:[RMFMapView class]]) {
343
+
344
+ } else {
345
+ RMFMapView *mapView = (RMFMapView *)view;
346
+ mapView.settings.rotateGestures = enable;
347
+ }
348
+ }];
349
+ }
350
+
351
+ RCT_EXPORT_METHOD(setTiltGesturesEnabled:(nonnull NSNumber *)reactTag
352
+ enable:(BOOL)enable) {
353
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
354
+ id view = viewRegistry[reactTag];
355
+ if (![view isKindOfClass:[RMFMapView class]]) {
356
+
357
+ } else {
358
+ RMFMapView *mapView = (RMFMapView *)view;
359
+ mapView.settings.tiltGestures = enable;
360
+ }
361
+ }];
362
+ }
363
+
364
+ RCT_EXPORT_METHOD(setAllGesturesEnabled:(nonnull NSNumber *)reactTag
365
+ enable:(BOOL)enable) {
366
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
367
+ id view = viewRegistry[reactTag];
368
+ if (![view isKindOfClass:[RMFMapView class]]) {
369
+
370
+ } else {
371
+ RMFMapView *mapView = (RMFMapView *)view;
372
+ [mapView.settings setAllGesturesEnabled:enable];
373
+ }
374
+ }];
375
+ }
376
+
377
+
378
+ // Delegate
379
+ - (BOOL)mapview:(MFMapView *)mapView didTapMarker:(MFMarker *)marker {
380
+ RMFMapView* map = (RMFMapView*)mapView;
381
+
382
+ RMFMarkerMap4d * rMarker = (RMFMarkerMap4d *) marker;
383
+ [rMarker.reactMarker didTapAtPixel:map.lastTapPixel];
384
+ return NO;
385
+ }
386
+
387
+ - (void)mapview:(MFMapView *)mapView didBeginDraggingMarker:(MFMarker *)marker {
388
+ if ([marker isKindOfClass:[RMFMarkerMap4d class]]) {
389
+ RMFMapView* map = (RMFMapView*)mapView;
390
+ RMFMarkerMap4d * rMarker = (RMFMarkerMap4d *) marker;
391
+ [rMarker.reactMarker didBeginDraggingMarkerAtPixel:map.lastLongPressPixel];
392
+ }
393
+ }
394
+
395
+ - (void)mapview:(MFMapView *)mapView didEndDraggingMarker:(MFMarker *)marker {
396
+ if ([marker isKindOfClass:[RMFMarkerMap4d class]]) {
397
+ RMFMapView* map = (RMFMapView*)mapView;
398
+ RMFMarkerMap4d * rMarker = (RMFMarkerMap4d *) marker;
399
+ [rMarker.reactMarker didEndDraggingMarkerAtPixel:map.lastLongPressPixel];
400
+ }
401
+ }
402
+
403
+ - (void)mapview:(MFMapView *)mapView didDragMarker:(MFMarker *)marker {
404
+ if ([marker isKindOfClass:[RMFMarkerMap4d class]]) {
405
+ RMFMapView* map = (RMFMapView*)mapView;
406
+ RMFMarkerMap4d * rMarker = (RMFMarkerMap4d *) marker;
407
+ [rMarker.reactMarker didDragMarkerAtPixel:map.lastPanPixel];
408
+ }
409
+ }
410
+
411
+ - (void)mapview:(MFMapView *)mapView didTapInfoWindowOfMarker:(MFMarker *)marker {
412
+ RMFMapView* map = (RMFMapView*)mapView;
413
+
414
+ RMFMarkerMap4d * rMarker = (RMFMarkerMap4d *) marker;
415
+ [rMarker.reactMarker didTapInfoWindowAtPixel:map.lastTapPixel];
416
+ }
417
+
418
+ - (void)mapview:(MFMapView *)mapView didTapPolyline:(MFPolyline *)polyline {
419
+ RMFMapView* map = (RMFMapView*)mapView;
420
+ RMFPolylineMap4d * rPolyline = (RMFPolylineMap4d *) polyline;
421
+ [rPolyline.reactPolyline didTapAtPixel:map.lastTapPixel];
422
+ }
423
+
424
+ - (void)mapview:(MFMapView *)mapView didTapPolygon:(MFPolygon *)polygon {
425
+ RMFMapView* map = (RMFMapView*)mapView;
426
+ RMFPolygonMap4d * rPolygon = (RMFPolygonMap4d*) polygon;
427
+ [rPolygon.reactPolygon didTapAtPixel:map.lastTapPixel];
428
+ }
429
+
430
+ - (void)mapview:(MFMapView *)mapView didTapCircle:(MFCircle *)circle {
431
+ RMFMapView* map = (RMFMapView*)mapView;
432
+ RMFCircleMap4d * rCircle = (RMFCircleMap4d*)circle;
433
+ [rCircle.reactCircle didTapAtPixel:map.lastTapPixel];
434
+ }
435
+
436
+ - (void)mapView: (MFMapView*) mapView willMove: (BOOL) gesture {
437
+ RMFMapView* reactMapView = (RMFMapView*) mapView;
438
+ [reactMapView willMove:gesture];
439
+ }
440
+
441
+ - (void)mapView:(MFMapView *)mapView movingCameraPosition:(MFCameraPosition *)position {
442
+ RMFMapView* reactMapView = (RMFMapView*) mapView;
443
+ [reactMapView movingCameraPosition:position];
444
+ }
445
+
446
+ //- (void)mapView:(MFMapView *)mapView didChangeCameraPosition:(MFCameraPosition *)position {
447
+ //}
448
+
449
+ - (void)mapView:(MFMapView *)mapView idleAtCameraPosition:(MFCameraPosition *)position {
450
+ RMFMapView* reactMapView = (RMFMapView*) mapView;
451
+ [reactMapView idleAtCameraPosition:position];
452
+ }
453
+
454
+ - (void)mapView:(MFMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate {
455
+ RMFMapView* map = (RMFMapView*)mapView;
456
+ [map didTapAtCoordinate:coordinate];
457
+ }
458
+
459
+ - (void)mapView:(MFMapView *)mapView didTapPOI:(MFPOI *)poi {
460
+ RMFMapView* map = (RMFMapView*)mapView;
461
+ RMFPOIMap4d* rPOI = (RMFPOIMap4d*) poi;
462
+ [rPOI.reactPOI didTapAtPixel:map.lastTapPixel];
463
+ }
464
+
465
+ - (void)mapView:(MFMapView *)mapView didTapPOIWithPlaceID:(NSString *)placeID name:(NSString *)name location:(CLLocationCoordinate2D)location {
466
+ RMFMapView* reactMapView = (RMFMapView*) mapView;
467
+ [reactMapView didTapPOIWithPlaceID:placeID name:name location:location];
468
+ }
469
+
470
+ - (void)mapView:(MFMapView *)mapView didTapBuilding:(MFBuilding *)building {
471
+ RMFMapView* map = (RMFMapView*)mapView;
472
+ RMFBuildingMap4d *rBuilding = (RMFBuildingMap4d *) building;
473
+ [rBuilding.reactBuilding didTapAtPixel:map.lastTapPixel];
474
+ }
475
+
476
+ - (void)mapView:(MFMapView *)mapView didTapBuildingWithBuildingID:(NSString *)buildingID name:(NSString *)name location:(CLLocationCoordinate2D)location {
477
+ RMFMapView* reactMapView = (RMFMapView*) mapView;
478
+ [reactMapView didTapBuildingWithBuildingID:buildingID name:name location:location];
479
+ }
480
+
481
+ - (void)mapView:(MFMapView *)mapView didTapPlaceWithName:(NSString *)name location:(CLLocationCoordinate2D)location {
482
+ RMFMapView* reactMapView = (RMFMapView*) mapView;
483
+ [reactMapView didTapPlaceWithName:name location:location];
484
+ }
485
+
486
+ - (void)mapView:(MFMapView *)mapView didTapDataSourceFeature:(MFDataSourceFeature *)feature location:(CLLocationCoordinate2D)location {
487
+ RMFMapView* reactMapView = (RMFMapView*) mapView;
488
+ [reactMapView didTapDataSourceFeature:feature location:location];
489
+ }
490
+
491
+ - (void)mapView:(MFMapView *)mapView didTapDirectionsRenderer:(MFDirectionsRenderer *)renderer routeIndex:(NSUInteger)routeIndex {
492
+ RMFMapView* map = (RMFMapView*)mapView;
493
+ RMFDirectionsRendererMap4d* rRenderer = (RMFDirectionsRendererMap4d*)renderer;
494
+ [rRenderer.reactRenderer didTapAtPixel:map.lastTapPixel withRouteIndex:routeIndex];
495
+ }
496
+
497
+ //- (void)mapView:(MFMapView *)mapView didTapMyLocation:(CLLocationCoordinate2D)location {
498
+ //}
499
+
500
+ - (BOOL)didTapMyLocationButtonForMapView:(MFMapView *)mapView {
501
+ RMFMapView* reactMapView = (RMFMapView*) mapView;
502
+ return [reactMapView didTapMyLocationButton];
503
+ }
504
+
505
+ - (UIView *)mapView:(MFMapView *)mapView markerInfoWindow:(MFMarker *)marker {
506
+ return nil;
507
+ }
508
+
509
+ @end