react-native-maps 0.31.0 → 1.0.0-alpha.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 (301) hide show
  1. package/android/build.gradle +89 -33
  2. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  3. package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  4. package/android/gradlew +251 -0
  5. package/android/gradlew.bat +94 -0
  6. package/android/src/main/AndroidManifest.xml +1 -5
  7. package/android/src/main/RCTAppDependencyProvider.h +25 -0
  8. package/android/src/main/RCTAppDependencyProvider.mm +55 -0
  9. package/android/src/main/RCTModulesConformingToProtocolsProvider.h +18 -0
  10. package/android/src/main/RCTModulesConformingToProtocolsProvider.mm +33 -0
  11. package/android/src/main/RCTThirdPartyComponentsProvider.h +16 -0
  12. package/android/src/main/RCTThirdPartyComponentsProvider.mm +28 -0
  13. package/android/src/main/ReactAppDependencyProvider.podspec +34 -0
  14. package/android/src/main/java/com/facebook/fbreact/specs/NativeAirMapsModuleSpec.java +63 -0
  15. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCalloutManagerDelegate.java +35 -0
  16. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCalloutManagerInterface.java +17 -0
  17. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCircleManagerDelegate.java +49 -0
  18. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCircleManagerInterface.java +23 -0
  19. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsGooglePolygonManagerDelegate.java +49 -0
  20. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsGooglePolygonManagerInterface.java +23 -0
  21. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMapViewManagerDelegate.java +209 -0
  22. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMapViewManagerInterface.java +74 -0
  23. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMarkerManagerDelegate.java +104 -0
  24. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMarkerManagerInterface.java +39 -0
  25. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsOverlayManagerDelegate.java +45 -0
  26. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsOverlayManagerInterface.java +22 -0
  27. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsPolylineManagerDelegate.java +58 -0
  28. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsPolylineManagerInterface.java +26 -0
  29. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsUrlTileManagerDelegate.java +62 -0
  30. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsUrlTileManagerInterface.java +27 -0
  31. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsWMSTileManagerDelegate.java +56 -0
  32. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsWMSTileManagerInterface.java +25 -0
  33. package/android/src/main/java/com/rnmaps/fabric/CalloutManager.java +77 -0
  34. package/android/src/main/java/com/rnmaps/fabric/CircleManager.java +94 -0
  35. package/android/src/main/java/com/rnmaps/fabric/JSONUtil.java +86 -0
  36. package/android/src/main/java/com/rnmaps/fabric/MapViewManager.java +623 -0
  37. package/android/src/main/java/com/rnmaps/fabric/MarkerManager.java +258 -0
  38. package/android/src/main/java/com/rnmaps/fabric/NativeAirMapsModule.java +284 -0
  39. package/android/src/main/java/com/rnmaps/fabric/OverlayManager.java +101 -0
  40. package/android/src/main/java/com/rnmaps/fabric/PolygonManager.java +89 -0
  41. package/android/src/main/java/com/rnmaps/fabric/PolylineManager.java +121 -0
  42. package/android/src/main/java/com/rnmaps/fabric/UrlTileManager.java +124 -0
  43. package/android/src/main/java/com/rnmaps/fabric/WMSTileManager.java +114 -0
  44. package/android/src/main/java/com/rnmaps/fabric/event/OnCalloutPressEvent.java +25 -0
  45. package/android/src/main/java/com/rnmaps/fabric/event/OnDeselectEvent.java +28 -0
  46. package/android/src/main/java/com/rnmaps/fabric/event/OnDoublePressEvent.java +27 -0
  47. package/android/src/main/java/com/rnmaps/fabric/event/OnDragEndEvent.java +28 -0
  48. package/android/src/main/java/com/rnmaps/fabric/event/OnDragEvent.java +28 -0
  49. package/android/src/main/java/com/rnmaps/fabric/event/OnDragStartEvent.java +28 -0
  50. package/android/src/main/java/com/rnmaps/fabric/event/OnIndoorBuildingFocusedEvent.java +28 -0
  51. package/android/src/main/java/com/rnmaps/fabric/event/OnIndoorLevelActivatedEvent.java +28 -0
  52. package/android/src/main/java/com/rnmaps/fabric/event/OnKmlReadyEvent.java +28 -0
  53. package/android/src/main/java/com/rnmaps/fabric/event/OnLongPressEvent.java +28 -0
  54. package/android/src/main/java/com/rnmaps/fabric/event/OnMapLoadedEvent.java +29 -0
  55. package/android/src/main/java/com/rnmaps/fabric/event/OnMapReadyEvent.java +29 -0
  56. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDeselectEvent.java +28 -0
  57. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragEndEvent.java +28 -0
  58. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragEvent.java +28 -0
  59. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragStartEvent.java +28 -0
  60. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerPressEvent.java +28 -0
  61. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerSelectEvent.java +28 -0
  62. package/android/src/main/java/com/rnmaps/fabric/event/OnPanDragEvent.java +28 -0
  63. package/android/src/main/java/com/rnmaps/fabric/event/OnPoiClickEvent.java +27 -0
  64. package/android/src/main/java/com/rnmaps/fabric/event/OnPressEvent.java +27 -0
  65. package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeCompleteEvent.java +30 -0
  66. package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeEvent.java +48 -0
  67. package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeStartEvent.java +33 -0
  68. package/android/src/main/java/com/rnmaps/fabric/event/OnSelectEvent.java +28 -0
  69. package/android/src/main/java/com/rnmaps/fabric/event/OnUserLocationChangeEvent.java +28 -0
  70. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/FileUtil.java +3 -6
  71. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/FusedLocationSource.java +5 -2
  72. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ImageReadable.java +1 -1
  73. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ImageReader.java +5 -7
  74. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ImageUtil.java +1 -2
  75. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/LatLngBoundsUtils.java +1 -1
  76. package/android/src/main/java/com/rnmaps/maps/MapAirModulePackage.java +98 -0
  77. package/android/src/main/java/com/rnmaps/maps/MapCallout.java +41 -0
  78. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapCalloutManager.java → rnmaps/maps/MapCalloutManager.java} +6 -6
  79. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapCircle.java → rnmaps/maps/MapCircle.java} +34 -8
  80. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapCircleManager.java → rnmaps/maps/MapCircleManager.java} +15 -20
  81. package/android/src/main/java/com/rnmaps/maps/MapFeature.java +17 -0
  82. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapGradientPolyline.java → rnmaps/maps/MapGradientPolyline.java} +9 -12
  83. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapGradientPolylineManager.java → rnmaps/maps/MapGradientPolylineManager.java} +13 -18
  84. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapHeatmap.java → rnmaps/maps/MapHeatmap.java} +8 -9
  85. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapHeatmapManager.java → rnmaps/maps/MapHeatmapManager.java} +8 -8
  86. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapLocalTile.java → rnmaps/maps/MapLocalTile.java} +19 -16
  87. package/android/src/main/java/com/rnmaps/maps/MapLocalTileManager.java +54 -0
  88. package/android/src/main/java/com/rnmaps/maps/MapManager.java +504 -0
  89. package/android/src/main/java/com/rnmaps/maps/MapMarker.java +706 -0
  90. package/android/src/main/java/com/rnmaps/maps/MapMarkerManager.java +368 -0
  91. package/android/src/main/java/com/rnmaps/maps/MapModule.java +283 -0
  92. package/android/src/main/java/com/rnmaps/maps/MapOverlay.java +262 -0
  93. package/android/src/main/java/com/rnmaps/maps/MapOverlayManager.java +97 -0
  94. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapPolygon.java → rnmaps/maps/MapPolygon.java} +73 -9
  95. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapPolygonManager.java → rnmaps/maps/MapPolygonManager.java} +22 -22
  96. package/android/src/main/java/com/rnmaps/maps/MapPolyline.java +230 -0
  97. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapPolylineManager.java → rnmaps/maps/MapPolylineManager.java} +18 -38
  98. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapTileProvider.java → rnmaps/maps/MapTileProvider.java} +55 -76
  99. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapTileWorker.java → rnmaps/maps/MapTileWorker.java} +7 -14
  100. package/android/src/main/java/com/rnmaps/maps/MapUIBlock.java +64 -0
  101. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapUrlTile.java → rnmaps/maps/MapUrlTile.java} +29 -29
  102. package/android/src/main/java/com/rnmaps/maps/MapUrlTileManager.java +87 -0
  103. package/android/src/main/java/com/rnmaps/maps/MapView.java +1844 -0
  104. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapWMSTile.java → rnmaps/maps/MapWMSTile.java} +11 -17
  105. package/android/src/main/java/com/rnmaps/maps/MapWMSTileManager.java +81 -0
  106. package/android/src/main/java/com/rnmaps/maps/MapsPackage.java +45 -0
  107. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/RegionChangeEvent.java +1 -1
  108. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/SizeReportingShadowNode.java +1 -1
  109. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ViewAttacherGroup.java +2 -7
  110. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ViewChangesTracker.java +12 -11
  111. package/android/src/main/jni/CMakeLists.txt +36 -0
  112. package/android/src/main/jni/RNMapsSpecs-generated.cpp +68 -0
  113. package/android/src/main/jni/RNMapsSpecs.h +31 -0
  114. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ComponentDescriptors.cpp +31 -0
  115. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ComponentDescriptors.h +33 -0
  116. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/EventEmitters.cpp +979 -0
  117. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/EventEmitters.h +860 -0
  118. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/Props.cpp +227 -0
  119. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/Props.h +1297 -0
  120. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/RNMapsSpecsJSI-generated.cpp +74 -0
  121. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/RNMapsSpecsJSI.h +268 -0
  122. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ShadowNodes.cpp +26 -0
  123. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ShadowNodes.h +131 -0
  124. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/States.cpp +16 -0
  125. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/States.h +137 -0
  126. package/app.plugin.js +1 -0
  127. package/ios/AirGoogleMaps/AIRGMSMarker.h +2 -0
  128. package/ios/AirGoogleMaps/AIRGoogleMap.h +22 -12
  129. package/ios/AirGoogleMaps/{AIRGoogleMap.m → AIRGoogleMap.mm} +407 -130
  130. package/ios/AirGoogleMaps/AIRGoogleMapCircle.h +2 -3
  131. package/ios/AirGoogleMaps/AIRGoogleMapCircle.m +42 -3
  132. package/ios/AirGoogleMaps/AIRGoogleMapCoordinate.h +13 -0
  133. package/ios/AirGoogleMaps/AIRGoogleMapCoordinate.m +10 -0
  134. package/ios/AirGoogleMaps/AIRGoogleMapHeatmap.h +1 -1
  135. package/ios/AirGoogleMaps/AIRGoogleMapManager.h +11 -0
  136. package/ios/AirGoogleMaps/AIRGoogleMapManager.mm +543 -0
  137. package/ios/AirGoogleMaps/AIRGoogleMapMarker.h +4 -0
  138. package/ios/AirGoogleMaps/AIRGoogleMapMarker.m +369 -237
  139. package/ios/AirGoogleMaps/AIRGoogleMapMarkerManager.m +3 -2
  140. package/ios/AirGoogleMaps/AIRGoogleMapOverlay.h +0 -1
  141. package/ios/AirGoogleMaps/AIRGoogleMapPolygon.h +7 -6
  142. package/ios/AirGoogleMaps/AIRGoogleMapPolygon.m +62 -5
  143. package/ios/AirGoogleMaps/AIRGoogleMapPolygonManager.m +3 -3
  144. package/ios/AirGoogleMaps/AIRGoogleMapPolyline.h +4 -3
  145. package/ios/AirGoogleMaps/AIRGoogleMapPolyline.m +9 -9
  146. package/ios/AirGoogleMaps/AIRGoogleMapPolylineManager.m +2 -2
  147. package/ios/AirGoogleMaps/AIRGoogleMapUrlTile.m +2 -2
  148. package/ios/AirGoogleMaps/AIRGoogleMapWMSTile.h +1 -1
  149. package/ios/AirGoogleMaps/AIRGoogleMapWMSTile.m +4 -4
  150. package/ios/AirGoogleMaps/RCTConvert+GMSMapViewType.h +3 -0
  151. package/ios/AirGoogleMaps/RCTConvert+GMSMapViewType.m +18 -0
  152. package/ios/AirGoogleMaps/RNMapsGoogleMapView.h +29 -0
  153. package/ios/AirGoogleMaps/RNMapsGoogleMapView.mm +678 -0
  154. package/ios/AirGoogleMaps/RNMapsGoogleMapViewManager.mm +40 -0
  155. package/ios/AirGoogleMaps/RNMapsGooglePolygonView.h +26 -0
  156. package/ios/AirGoogleMaps/RNMapsGooglePolygonView.mm +226 -0
  157. package/ios/AirGoogleMaps/RNMapsGooglePolygonViewManager.mm +26 -0
  158. package/ios/AirGoogleMaps/Resources/GoogleMapsPrivacy.bundle/PrivacyInfo.xcprivacy +110 -0
  159. package/ios/AirMaps/AIRMap.h +19 -14
  160. package/ios/AirMaps/{AIRMap.m → AIRMap.mm} +333 -120
  161. package/ios/AirMaps/AIRMapCircle.m +1 -53
  162. package/ios/AirMaps/AIRMapCoordinate.m +2 -4
  163. package/ios/AirMaps/AIRMapManager.m +64 -218
  164. package/ios/AirMaps/AIRMapMarker.h +5 -0
  165. package/ios/AirMaps/AIRMapMarker.m +180 -69
  166. package/ios/AirMaps/AIRMapMarkerManager.m +3 -0
  167. package/ios/AirMaps/AIRMapOverlay.m +2 -2
  168. package/ios/AirMaps/AIRMapPolygon.m +0 -52
  169. package/ios/AirMaps/AIRMapPolyline.m +3 -2
  170. package/ios/AirMaps/AIRMapWMSTile.m +8 -8
  171. package/ios/AirMaps/Callout/SMCalloutView.m +1 -1
  172. package/ios/AirMaps/FabricPlaceholders/PlaceHolderGoogleMapView.h +25 -0
  173. package/ios/AirMaps/FabricPlaceholders/PlaceHolderGoogleMapView.mm +77 -0
  174. package/ios/AirMaps/FabricPlaceholders/PlaceHolderPolygonView.h +25 -0
  175. package/ios/AirMaps/FabricPlaceholders/PlaceHolderPolygonView.mm +52 -0
  176. package/ios/AirMaps/RCTComponentData+Maps.h +13 -0
  177. package/ios/AirMaps/RCTComponentData+Maps.m +55 -0
  178. package/ios/AirMaps/RCTConvert+AirMap.h +6 -1
  179. package/ios/AirMaps/RCTConvert+AirMap.m +18 -0
  180. package/ios/AirMaps/RNMapsAirModule.h +15 -0
  181. package/ios/AirMaps/RNMapsAirModule.mm +164 -0
  182. package/ios/AirMaps/RNMapsDefines.h +1 -0
  183. package/ios/AirMaps/RNMapsMapView.h +27 -0
  184. package/ios/AirMaps/RNMapsMapView.mm +577 -0
  185. package/ios/AirMaps/RNMapsMapViewManager.mm +42 -0
  186. package/ios/AirMaps/RNMapsMarkerView.h +24 -0
  187. package/ios/AirMaps/RNMapsMarkerView.mm +439 -0
  188. package/ios/AirMaps/RNMapsMarkerViewManager.mm +28 -0
  189. package/ios/AirMaps/UIView+AirMap.h +11 -0
  190. package/ios/AirMaps/UIView+AirMap.m +20 -0
  191. package/ios/AirMaps/module.modulemap +6 -0
  192. package/ios/AirMaps.xcodeproj/project.pbxproj +44 -4
  193. package/ios/PrivacyInfo.xcprivacy +37 -0
  194. package/ios/generated/RCTAppDependencyProvider.h +25 -0
  195. package/ios/generated/RCTAppDependencyProvider.mm +55 -0
  196. package/ios/generated/RCTModulesConformingToProtocolsProvider.h +18 -0
  197. package/ios/generated/RCTModulesConformingToProtocolsProvider.mm +33 -0
  198. package/ios/generated/RCTThirdPartyComponentsProvider.h +16 -0
  199. package/ios/generated/RCTThirdPartyComponentsProvider.mm +26 -0
  200. package/ios/generated/RNMapsAirModuleDelegate.h +24 -0
  201. package/ios/generated/RNMapsHostVewDelegate.h +17 -0
  202. package/ios/generated/RNMapsSpecs/ComponentDescriptors.cpp +29 -0
  203. package/ios/generated/RNMapsSpecs/ComponentDescriptors.h +31 -0
  204. package/ios/generated/RNMapsSpecs/EventEmitters.cpp +977 -0
  205. package/ios/generated/RNMapsSpecs/EventEmitters.h +846 -0
  206. package/ios/generated/RNMapsSpecs/Props.cpp +194 -0
  207. package/ios/generated/RNMapsSpecs/Props.h +1224 -0
  208. package/ios/generated/RNMapsSpecs/RCTComponentViewHelpers.h +591 -0
  209. package/ios/generated/RNMapsSpecs/RNMapsSpecs-generated.mm +92 -0
  210. package/ios/generated/RNMapsSpecs/RNMapsSpecs.h +137 -0
  211. package/ios/generated/RNMapsSpecs/ShadowNodes.cpp +24 -0
  212. package/ios/generated/RNMapsSpecs/ShadowNodes.h +109 -0
  213. package/ios/generated/RNMapsSpecs/States.cpp +16 -0
  214. package/ios/generated/RNMapsSpecs/States.h +113 -0
  215. package/ios/generated/RNMapsSpecsJSI-generated.cpp +74 -0
  216. package/ios/generated/RNMapsSpecsJSI.h +268 -0
  217. package/ios/generated/ReactAppDependencyProvider.podspec +34 -0
  218. package/ios/generated/module.modulemap +15 -0
  219. package/package.json +57 -34
  220. package/plugin/build/android.js +58 -0
  221. package/plugin/build/index.js +10 -0
  222. package/plugin/build/ios.js +176 -0
  223. package/plugin/build/types.js +2 -0
  224. package/react-native-maps.podspec +114 -11
  225. package/react-native.config.js +15 -0
  226. package/src/{AnimatedRegion.js → AnimatedRegion.ts} +26 -21
  227. package/src/Geojson.tsx +541 -0
  228. package/src/MapCallout.tsx +77 -0
  229. package/src/MapCalloutSubview.tsx +64 -0
  230. package/src/MapCircle.tsx +162 -0
  231. package/src/MapHeatmap.tsx +125 -0
  232. package/src/MapLocalTile.tsx +60 -0
  233. package/src/MapMarker.tsx +531 -0
  234. package/src/MapMarkerNativeComponent.ts +51 -0
  235. package/src/MapOverlay.tsx +178 -0
  236. package/src/MapPolygon.tsx +188 -0
  237. package/src/MapPolygon.types.ts +25 -0
  238. package/src/MapPolyline.tsx +215 -0
  239. package/src/MapUrlTile.tsx +169 -0
  240. package/src/MapView.tsx +1235 -0
  241. package/src/MapView.types.ts +212 -0
  242. package/src/MapView.web.ts +2 -0
  243. package/src/MapViewNativeComponent.ts +86 -0
  244. package/src/MapWMSTile.tsx +148 -0
  245. package/src/ProviderConstants.ts +2 -0
  246. package/src/createFabricMap.tsx +253 -0
  247. package/src/decorateMapComponent.ts +230 -0
  248. package/src/fixImageProp.ts +17 -0
  249. package/src/index.ts +52 -0
  250. package/src/sharedTypes.ts +101 -0
  251. package/src/sharedTypesInternal.ts +1 -0
  252. package/src/specs/NativeAirMapsModule.ts +36 -0
  253. package/src/specs/NativeComponentCallout.ts +63 -0
  254. package/src/specs/NativeComponentCircle.ts +93 -0
  255. package/src/specs/NativeComponentGoogleMapView.ts +922 -0
  256. package/src/specs/NativeComponentGooglePolygon.ts +94 -0
  257. package/src/specs/NativeComponentMapView.ts +1100 -0
  258. package/src/specs/NativeComponentMarker.ts +326 -0
  259. package/src/specs/NativeComponentOverlay.ts +98 -0
  260. package/src/specs/NativeComponentPolyline.ts +124 -0
  261. package/src/specs/NativeComponentUrlTile.ts +128 -0
  262. package/src/specs/NativeComponentWMSTile.ts +107 -0
  263. package/LICENSE +0 -21
  264. package/README.md +0 -652
  265. package/android/src/main/assets/ula.kml +0 -1214
  266. package/android/src/main/java/com/airbnb/android/react/maps/AirMapCallout.java +0 -23
  267. package/android/src/main/java/com/airbnb/android/react/maps/AirMapFeature.java +0 -18
  268. package/android/src/main/java/com/airbnb/android/react/maps/AirMapLiteManager.java +0 -20
  269. package/android/src/main/java/com/airbnb/android/react/maps/AirMapLocalTileManager.java +0 -56
  270. package/android/src/main/java/com/airbnb/android/react/maps/AirMapManager.java +0 -500
  271. package/android/src/main/java/com/airbnb/android/react/maps/AirMapMarker.java +0 -630
  272. package/android/src/main/java/com/airbnb/android/react/maps/AirMapMarkerManager.java +0 -370
  273. package/android/src/main/java/com/airbnb/android/react/maps/AirMapModule.java +0 -380
  274. package/android/src/main/java/com/airbnb/android/react/maps/AirMapOverlay.java +0 -169
  275. package/android/src/main/java/com/airbnb/android/react/maps/AirMapOverlayManager.java +0 -81
  276. package/android/src/main/java/com/airbnb/android/react/maps/AirMapPolyline.java +0 -162
  277. package/android/src/main/java/com/airbnb/android/react/maps/AirMapUrlTileManager.java +0 -97
  278. package/android/src/main/java/com/airbnb/android/react/maps/AirMapView.java +0 -1384
  279. package/android/src/main/java/com/airbnb/android/react/maps/AirMapWMSTileManager.java +0 -87
  280. package/android/src/main/java/com/airbnb/android/react/maps/MapsPackage.java +0 -65
  281. package/index.d.ts +0 -637
  282. package/ios/AirGoogleMaps/AIRGoogleMapManager.m +0 -690
  283. package/ios/User.xcconfig +0 -0
  284. package/react-native-google-maps.podspec +0 -22
  285. package/src/Geojson.js +0 -334
  286. package/src/MapCallout.js +0 -51
  287. package/src/MapCalloutSubview.js +0 -44
  288. package/src/MapCircle.js +0 -150
  289. package/src/MapHeatmap.js +0 -99
  290. package/src/MapLocalTile.js +0 -52
  291. package/src/MapMarker.js +0 -377
  292. package/src/MapOverlay.js +0 -86
  293. package/src/MapPolygon.js +0 -202
  294. package/src/MapPolyline.js +0 -168
  295. package/src/MapUrlTile.js +0 -131
  296. package/src/MapView.js +0 -1160
  297. package/src/MapView.web.js +0 -1
  298. package/src/MapWMSTile.js +0 -122
  299. package/src/ProviderConstants.js +0 -2
  300. package/src/decorateMapComponent.js +0 -112
  301. package/src/index.js +0 -31
@@ -20,14 +20,18 @@
20
20
  #import "AIRMapWMSTile.h"
21
21
  #import "AIRMapLocalTile.h"
22
22
  #import "AIRMapOverlay.h"
23
+ #import "AIRMapSnapshot.h"
23
24
 
24
- const CLLocationDegrees AIRMapDefaultSpan = 0.005;
25
25
  const NSTimeInterval AIRMapRegionChangeObserveInterval = 0.1;
26
26
  const CGFloat AIRMapZoomBoundBuffer = 0.01;
27
27
  const NSInteger AIRMapMaxZoomLevel = 20;
28
28
 
29
-
30
- @interface MKMapView (UIGestureRecognizer)
29
+ #if __has_include(<ReactNativeMaps/generated/RNMapsAirModuleDelegate.h>)
30
+ #import <ReactNativeMaps/generated/RNMapsAirModuleDelegate.h>
31
+ #else
32
+ #import "RNMapsAirModuleDelegate.h"
33
+ #endif
34
+ @interface MKMapView (UIGestureRecognizer)<RNMapsAirModuleDelegate>
31
35
 
32
36
  // this tells the compiler that MKMapView actually implements this method
33
37
  - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;
@@ -48,9 +52,12 @@ const NSInteger AIRMapMaxZoomLevel = 20;
48
52
  @implementation AIRMap
49
53
  {
50
54
  UIView *_legalLabel;
51
- CLLocationManager *_locationManager;
52
55
  BOOL _initialRegionSet;
56
+ BOOL _initialRegionProvided;
57
+ BOOL _initialCameraProvided;
53
58
  BOOL _initialCameraSet;
59
+ BOOL _initialized;
60
+ BOOL _loadingStarted;
54
61
 
55
62
  // Array to manually track RN subviews
56
63
  //
@@ -85,18 +92,16 @@ const NSInteger AIRMapMaxZoomLevel = 20;
85
92
  self.calloutView = [SMCalloutView platformCalloutView];
86
93
  self.calloutView.delegate = self;
87
94
 
88
- self.minZoomLevel = 0;
89
- self.maxZoomLevel = AIRMapMaxZoomLevel;
95
+ self.minZoom = 0;
96
+ self.maxZoom = AIRMapMaxZoomLevel;
90
97
  self.compassOffset = CGPointMake(0, 0);
98
+ self.legacyZoomConstraintsEnabled = YES;
99
+ _initialized = YES;
100
+ [self listenToMemoryWarnings];
91
101
  }
92
102
  return self;
93
103
  }
94
104
 
95
- - (void)dealloc
96
- {
97
- [_regionChangeObserveTimer invalidate];
98
- }
99
-
100
105
  -(void)addSubview:(UIView *)view {
101
106
  if([view isKindOfClass:[AIRMapMarker class]]) {
102
107
  [self addAnnotation:(id <MKAnnotation>)view];
@@ -136,7 +141,7 @@ const NSInteger AIRMapMaxZoomLevel = 20;
136
141
  } else {
137
142
  NSArray<id<RCTComponent>> *childSubviews = [subview reactSubviews];
138
143
  for (int i = 0; i < childSubviews.count; i++) {
139
- [self insertReactSubview:(UIView *)childSubviews[i] atIndex:atIndex];
144
+ [self insertReactSubview:(UIView *)childSubviews[i] atIndex:atIndex];
140
145
  }
141
146
  }
142
147
  [_reactSubviews insertObject:(UIView *)subview atIndex:(NSUInteger) atIndex];
@@ -167,7 +172,7 @@ const NSInteger AIRMapMaxZoomLevel = 20;
167
172
  } else {
168
173
  NSArray<id<RCTComponent>> *childSubviews = [subview reactSubviews];
169
174
  for (int i = 0; i < childSubviews.count; i++) {
170
- [self removeReactSubview:(UIView *)childSubviews[i]];
175
+ [self removeReactSubview:(UIView *)childSubviews[i]];
171
176
  }
172
177
  }
173
178
  [_reactSubviews removeObject:(UIView *)subview];
@@ -177,7 +182,7 @@ const NSInteger AIRMapMaxZoomLevel = 20;
177
182
  #pragma clang diagnostic push
178
183
  #pragma clang diagnostic ignored "-Wobjc-missing-super-calls"
179
184
  - (NSArray<id<RCTComponent>> *)reactSubviews {
180
- return _reactSubviews;
185
+ return _reactSubviews;
181
186
  }
182
187
  #pragma clang diagnostic pop
183
188
 
@@ -203,6 +208,20 @@ const NSInteger AIRMapMaxZoomLevel = 20;
203
208
  }
204
209
  return marker;
205
210
  }
211
+ // Create Polyline with coordinates
212
+ -(void) fitToCoordinates:(NSArray<AIRMapCoordinate*>*) coordinates edgePadding:(UIEdgeInsets) edgeInsets animated:(Boolean) animated {
213
+ CLLocationCoordinate2D coords[coordinates.count];
214
+ for(int i = 0; i < coordinates.count; i++)
215
+ {
216
+ coords[i] = coordinates[i].coordinate;
217
+ }
218
+ MKPolyline *polyline = [MKPolyline polylineWithCoordinates:coords count:coordinates.count];
219
+
220
+ // Set Map viewport
221
+
222
+ [self setVisibleMapRect:[polyline boundingMapRect] edgePadding:edgeInsets animated:animated];
223
+ }
224
+
206
225
 
207
226
  - (CGRect) frameForMarker:(AIRMapMarker*) mrkAnn {
208
227
  MKAnnotationView* mrkView = [self viewForAnnotation: mrkAnn];
@@ -210,29 +229,6 @@ const NSInteger AIRMapMaxZoomLevel = 20;
210
229
  return mrkFrame;
211
230
  }
212
231
 
213
- - (NSDictionary*) getMarkersFramesWithOnlyVisible:(BOOL)onlyVisible {
214
- NSMutableDictionary* markersFrames = [NSMutableDictionary new];
215
- for (AIRMapMarker* mrkAnn in self.markers) {
216
- CGRect frame = [self frameForMarker:mrkAnn];
217
- CGPoint point = [self convertCoordinate:mrkAnn.coordinate toPointToView:self];
218
- NSDictionary* frameDict = @{
219
- @"x": @(frame.origin.x),
220
- @"y": @(frame.origin.y),
221
- @"width": @(frame.size.width),
222
- @"height": @(frame.size.height)
223
- };
224
- NSDictionary* pointDict = @{
225
- @"x": @(point.x),
226
- @"y": @(point.y)
227
- };
228
- NSString* k = mrkAnn.identifier;
229
- BOOL isVisible = CGRectIntersectsRect(self.bounds, frame);
230
- if (k != nil && (!onlyVisible || isVisible)) {
231
- [markersFrames setObject:@{ @"frame": frameDict, @"point": pointDict } forKey:k];
232
- }
233
- }
234
- return markersFrames;
235
- }
236
232
 
237
233
  - (AIRMapMarker*) markerAtPoint:(CGPoint)point {
238
234
  AIRMapMarker* mrk = nil;
@@ -264,13 +260,13 @@ const NSInteger AIRMapMaxZoomLevel = 20;
264
260
 
265
261
  CGPoint touchPoint = [self.calloutView convertPoint:point fromView:self];
266
262
  UIView *touchedView = [self.calloutView hitTest:touchPoint withEvent:event];
267
-
263
+
268
264
  if (touchedView) {
269
265
  UIWindow* win = [[[UIApplication sharedApplication] windows] firstObject];
270
266
  AIRMapCalloutSubview* calloutSubview = nil;
271
267
  AIRMapCallout* callout = nil;
272
268
  AIRMapMarker* marker = nil;
273
-
269
+
274
270
  UIView* tmp = touchedView;
275
271
  while (tmp && tmp != win && tmp != self.calloutView) {
276
272
  if ([tmp respondsToSelector:@selector(onPress)]) {
@@ -282,7 +278,7 @@ const NSInteger AIRMapMaxZoomLevel = 20;
282
278
  }
283
279
  tmp = tmp.superview;
284
280
  }
285
-
281
+
286
282
  if (callout) {
287
283
  marker = [self markerForCallout:callout];
288
284
  if (marker) {
@@ -292,7 +288,7 @@ const NSInteger AIRMapMaxZoomLevel = 20;
292
288
  }
293
289
  }
294
290
  }
295
-
291
+
296
292
  return calloutSubview ? calloutSubview : touchedView;
297
293
  }
298
294
 
@@ -326,43 +322,204 @@ const NSInteger AIRMapMaxZoomLevel = 20;
326
322
  return kSMCalloutViewRepositionDelayForUIScrollView;
327
323
  }
328
324
 
329
- #pragma mark Accessors
325
+ #pragma mark RNMapsAirModuleDelegate.h
330
326
 
331
- - (NSArray *)getMapBoundaries
327
+ - (NSDictionary *)getMapBoundaries
332
328
  {
333
329
  MKMapRect mapRect = self.visibleMapRect;
334
-
330
+
335
331
  CLLocationCoordinate2D northEast = MKCoordinateForMapPoint(MKMapPointMake(MKMapRectGetMaxX(mapRect), mapRect.origin.y));
336
332
  CLLocationCoordinate2D southWest = MKCoordinateForMapPoint(MKMapPointMake(mapRect.origin.x, MKMapRectGetMaxY(mapRect)));
337
333
 
338
- return @[
339
- @[
340
- [NSNumber numberWithDouble:northEast.longitude],
341
- [NSNumber numberWithDouble:northEast.latitude]
342
- ],
343
- @[
344
- [NSNumber numberWithDouble:southWest.longitude],
345
- [NSNumber numberWithDouble:southWest.latitude]
346
- ]
347
- ];
334
+ return @{
335
+ @"northEast": @{
336
+ @"latitude": [NSNumber numberWithDouble:northEast.latitude],
337
+ @"longitude": [NSNumber numberWithDouble:northEast.longitude],
338
+ },
339
+ @"southWest": @{
340
+ @"latitude": [NSNumber numberWithDouble:southWest.latitude],
341
+ @"longitude": [NSNumber numberWithDouble:southWest.longitude],
342
+ },
343
+ };
344
+ }
345
+ - (NSDictionary *) getPointForCoordinates:(CLLocationCoordinate2D) location
346
+ {
347
+ CGPoint touchPoint = [self convertCoordinate:location toPointToView:self];
348
+
349
+ return @{
350
+ @"x": @(touchPoint.x),
351
+ @"y": @(touchPoint.y),
352
+ };
348
353
  }
354
+ - (NSDictionary *) getCoordinatesForPoint:(CGPoint)point
355
+ {
356
+ CLLocationCoordinate2D coordinate = [self convertPoint:point toCoordinateFromView:self];
357
+ return @{
358
+ @"latitude": @(coordinate.latitude),
359
+ @"longitude": @(coordinate.longitude),
360
+ };
349
361
 
350
- - (void)setShowsUserLocation:(BOOL)showsUserLocation
362
+ }
363
+
364
+ - (NSDictionary*) getMarkersFramesWithOnlyVisible:(BOOL)onlyVisible {
365
+ NSMutableDictionary* markersFrames = [NSMutableDictionary new];
366
+ for (AIRMapMarker* mrkAnn in self.markers) {
367
+ CGRect frame = [self frameForMarker:mrkAnn];
368
+ CGPoint point = [self convertCoordinate:mrkAnn.coordinate toPointToView:self];
369
+ NSDictionary* frameDict = @{
370
+ @"x": @(frame.origin.x),
371
+ @"y": @(frame.origin.y),
372
+ @"width": @(frame.size.width),
373
+ @"height": @(frame.size.height)
374
+ };
375
+ NSDictionary* pointDict = @{
376
+ @"x": @(point.x),
377
+ @"y": @(point.y)
378
+ };
379
+ NSString* k = mrkAnn.identifier;
380
+ BOOL isVisible = CGRectIntersectsRect(self.bounds, frame);
381
+ if (k != nil && (!onlyVisible || isVisible)) {
382
+ [markersFrames setObject:@{ @"frame": frameDict, @"point": pointDict } forKey:k];
383
+ }
384
+ }
385
+ return markersFrames;
386
+ }
387
+
388
+ - (NSDictionary *) getCameraDic {
389
+ MKMapCamera *camera = [self camera];
390
+ return @{
391
+ @"center": @{
392
+ @"latitude": @(camera.centerCoordinate.latitude),
393
+ @"longitude": @(camera.centerCoordinate.longitude),
394
+ },
395
+ @"pitch": @(camera.pitch),
396
+ @"heading": @(camera.heading),
397
+ @"altitude": @(camera.altitude),
398
+ };
399
+ }
400
+ - (void)takeSnapshotWithConfig:(NSDictionary *)config
401
+ success:(RCTPromiseResolveBlock)success error:(RCTPromiseRejectBlock)error
351
402
  {
352
- if (self.showsUserLocation != showsUserLocation) {
353
- if (showsUserLocation && !_locationManager) {
354
- _locationManager = [CLLocationManager new];
355
- if ([_locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
356
- [_locationManager requestWhenInUseAuthorization];
403
+
404
+ MKMapSnapshotOptions *options = [[MKMapSnapshotOptions alloc] init];
405
+
406
+ options.mapType = self.mapType;
407
+ NSNumber *width = config[@"width"];
408
+ NSNumber *height = config[@"height"];
409
+ NSNumber *quality = config[@"quality"];
410
+ NSString*format =config[@"format"];
411
+ NSString*result =config[@"result"];
412
+ if (config[@"region"]){
413
+ MKCoordinateRegion region = [RCTConvert MKCoordinateRegion:config[@"region"]];
414
+ options.region = region;
415
+ } else
416
+ {
417
+ options.region = self.region;
418
+ }
419
+ options.size = CGSizeMake(
420
+ ([width floatValue] == 0) ? self.bounds.size.width : [width floatValue],
421
+ ([height floatValue] == 0) ? self.bounds.size.height : [height floatValue]
422
+ );
423
+
424
+ options.scale = [[UIScreen mainScreen] scale];
425
+
426
+
427
+ MKMapSnapshotter *snapshotter = [[MKMapSnapshotter alloc] initWithOptions:options];
428
+
429
+ [self takeMapSnapshot:snapshotter
430
+ format:format
431
+ quality:[quality floatValue]
432
+ result:result
433
+ success:success error:error];
434
+ }
435
+
436
+ #pragma mark Take Snapshot
437
+ - (void)takeMapSnapshot:(MKMapSnapshotter *) snapshotter
438
+ format:(NSString *)format
439
+ quality:(CGFloat) quality
440
+ result:(NSString *)result
441
+ success:(RCTPromiseResolveBlock) success
442
+ error:(RCTPromiseRejectBlock) errorCallback {
443
+ NSTimeInterval timeStamp = [[NSDate date] timeIntervalSince1970];
444
+ NSString *pathComponent = [NSString stringWithFormat:@"Documents/snapshot-%.20lf.%@", timeStamp, format];
445
+ NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent: pathComponent];
446
+
447
+ [snapshotter startWithQueue:dispatch_get_main_queue()
448
+ completionHandler:^(MKMapSnapshot *snapshot, NSError *error) {
449
+ if (error) {
450
+ errorCallback(@"snapshotterError", @"failed", error);
451
+ return;
452
+ }
453
+ MKAnnotationView *pin = [[MKPinAnnotationView alloc] initWithAnnotation:nil reuseIdentifier:nil];
454
+
455
+ UIImage *image = snapshot.image;
456
+ UIGraphicsBeginImageContextWithOptions(image.size, YES, image.scale);
457
+ {
458
+ [image drawAtPoint:CGPointMake(0.0f, 0.0f)];
459
+
460
+ CGRect rect = CGRectMake(0.0f, 0.0f, image.size.width, image.size.height);
461
+
462
+ for (id <AIRMapSnapshot> overlay in self.overlays) {
463
+ if ([overlay respondsToSelector:@selector(drawToSnapshot:context:)]) {
464
+ [overlay drawToSnapshot:snapshot context:UIGraphicsGetCurrentContext()];
465
+ }
466
+ }
467
+
468
+
469
+ for (id <MKAnnotation> annotation in self.annotations) {
470
+ CGPoint point = [snapshot pointForCoordinate:annotation.coordinate];
471
+
472
+ MKAnnotationView* anView = [self viewForAnnotation: annotation];
473
+
474
+ if (anView){
475
+ pin = anView;
476
+ }
477
+
478
+ if (CGRectContainsPoint(rect, point)) {
479
+ point.x = point.x + pin.centerOffset.x - (pin.bounds.size.width / 2.0f);
480
+ point.y = point.y + pin.centerOffset.y - (pin.bounds.size.height / 2.0f);
481
+ if (pin.image) {
482
+ [pin.image drawAtPoint:point];
483
+ } else {
484
+ CGRect pinRect = CGRectMake(point.x, point.y, pin.bounds.size.width, pin.bounds.size.height);
485
+ [pin drawViewHierarchyInRect:pinRect afterScreenUpdates:NO];
486
+ }
487
+ }
488
+ }
489
+
490
+ UIImage *compositeImage = UIGraphicsGetImageFromCurrentImageContext();
491
+
492
+ NSData *data;
493
+ if ([format isEqualToString:@"png"]) {
494
+ data = UIImagePNGRepresentation(compositeImage);
495
+ }
496
+ else if([format isEqualToString:@"jpg"]) {
497
+ data = UIImageJPEGRepresentation(compositeImage, quality);
498
+ }
499
+
500
+ if ([result isEqualToString:@"file"]) {
501
+ [data writeToFile:filePath atomically:YES];
502
+ success(filePath);
503
+ }
504
+ else if ([result isEqualToString:@"base64"]) {
505
+ success([data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn]);
357
506
  }
358
507
  }
508
+ UIGraphicsEndImageContext();
509
+ }];
510
+ }
511
+
512
+
513
+
514
+ - (void)setShowsUserLocation:(BOOL)showsUserLocation
515
+ {
516
+ if (self.showsUserLocation != showsUserLocation) {
359
517
  super.showsUserLocation = showsUserLocation;
360
518
  }
361
519
  }
362
520
 
363
521
  - (void)setUserInterfaceStyle:(NSString*)userInterfaceStyle
364
522
  {
365
- if (@available(iOS 13.0, *)) {
366
523
  if([userInterfaceStyle isEqualToString:@"light"]) {
367
524
  self.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
368
525
  } else if([userInterfaceStyle isEqualToString:@"dark"]) {
@@ -370,9 +527,6 @@ const NSInteger AIRMapMaxZoomLevel = 20;
370
527
  } else {
371
528
  self.overrideUserInterfaceStyle = UIUserInterfaceStyleUnspecified;
372
529
  }
373
- } else {
374
- NSLog(@"UserInterfaceStyle not supported below iOS 13");
375
- }
376
530
  }
377
531
 
378
532
  - (void)setTintColor:(UIColor *)tintColor
@@ -382,7 +536,7 @@ const NSInteger AIRMapMaxZoomLevel = 20;
382
536
 
383
537
  - (void)setFollowsUserLocation:(BOOL)followsUserLocation
384
538
  {
385
- _followUserLocation = followsUserLocation;
539
+ _followsUserLocation = followsUserLocation;
386
540
  }
387
541
 
388
542
  - (void)setUserLocationCalloutEnabled:(BOOL)calloutEnabled
@@ -390,13 +544,14 @@ const NSInteger AIRMapMaxZoomLevel = 20;
390
544
  _userLocationCalloutEnabled = calloutEnabled;
391
545
  }
392
546
 
393
- - (void)setHandlePanDrag:(BOOL)handleMapDrag {
547
+ - (void)setHandlePanDrag:(BOOL)handlePanDrag {
394
548
  for (UIGestureRecognizer *recognizer in [self gestureRecognizers]) {
395
549
  if ([recognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
396
- recognizer.enabled = handleMapDrag;
550
+ recognizer.enabled = handlePanDrag;
397
551
  break;
398
552
  }
399
553
  }
554
+ _handlePanDrag = handlePanDrag;
400
555
  }
401
556
 
402
557
  - (void)setRegion:(MKCoordinateRegion)region animated:(BOOL)animated
@@ -417,9 +572,24 @@ const NSInteger AIRMapMaxZoomLevel = 20;
417
572
  // Animate/move to new position
418
573
  [super setRegion:region animated:animated];
419
574
  }
575
+ - (void) setRegion:(MKCoordinateRegion)region
576
+ {
577
+ if (!CLLocationCoordinate2DIsValid(region.center)) {
578
+ return;
579
+ }
580
+ if (!CLLocationCoordinate2DIsValid(_initialRegion.center)) {
581
+ [self setInitialRegion:region];
582
+ }
583
+ [self setRegion:region animated:NO];
584
+ }
420
585
 
421
586
  - (void)setInitialRegion:(MKCoordinateRegion)initialRegion {
422
- if (!_initialRegionSet) {
587
+ if (!CLLocationCoordinate2DIsValid(initialRegion.center)) {
588
+ return;
589
+ }
590
+ _initialRegion = initialRegion;
591
+ _initialRegionProvided = YES;
592
+ if (!_initialRegionSet && _loadingStarted) {
423
593
  _initialRegionSet = YES;
424
594
  [self setRegion:initialRegion animated:NO];
425
595
  }
@@ -432,9 +602,13 @@ const NSInteger AIRMapMaxZoomLevel = 20;
432
602
 
433
603
 
434
604
  - (void)setInitialCamera:(MKMapCamera*)initialCamera {
435
- if (!_initialCameraSet) {
436
- _initialCameraSet = YES;
437
- [self setCamera:initialCamera animated:NO];
605
+ _initialCamera = initialCamera;
606
+ _initialCameraProvided = YES;
607
+ if (initialCamera){
608
+ if (!_initialCameraSet && _loadingStarted) {
609
+ _initialCameraSet = YES;
610
+ [self setCamera:initialCamera animated:NO];
611
+ }
438
612
  }
439
613
  }
440
614
 
@@ -479,51 +653,40 @@ const NSInteger AIRMapMaxZoomLevel = 20;
479
653
  self.activityIndicatorView.color = loadingIndicatorColor;
480
654
  }
481
655
 
482
- // Include properties of MKMapView which are only available on iOS 9+
483
- // and check if their selector is available before calling super method.
656
+ - (void)setCameraZoomRange:(NSDictionary *)cameraZoomRange {
657
+ if (cameraZoomRange == nil) {
658
+ cameraZoomRange = @{};
659
+ }
484
660
 
485
- - (void)setShowsCompass:(BOOL)showsCompass {
486
- if ([MKMapView instancesRespondToSelector:@selector(setShowsCompass:)]) {
487
- [super setShowsCompass:showsCompass];
488
- }
489
- }
661
+ NSNumber *minValue = cameraZoomRange[@"minCenterCoordinateDistance"];
662
+ NSNumber *maxValue = cameraZoomRange[@"maxCenterCoordinateDistance"];
490
663
 
491
- - (BOOL)showsCompass {
492
- if ([MKMapView instancesRespondToSelector:@selector(showsCompass)]) {
493
- return [super showsCompass];
494
- } else {
495
- return NO;
496
- }
497
- }
664
+ if (minValue == nil && maxValue == nil) {
665
+ self.legacyZoomConstraintsEnabled = YES;
498
666
 
499
- - (void)setShowsScale:(BOOL)showsScale {
500
- if ([MKMapView instancesRespondToSelector:@selector(setShowsScale:)]) {
501
- [super setShowsScale:showsScale];
502
- }
503
- }
667
+ MKMapCameraZoomRange *defaultZoomRange = [[MKMapCameraZoomRange alloc] initWithMinCenterCoordinateDistance:MKMapCameraZoomDefault maxCenterCoordinateDistance:MKMapCameraZoomDefault];
668
+ [super setCameraZoomRange:defaultZoomRange animated:NO];
504
669
 
505
- - (BOOL)showsScale {
506
- if ([MKMapView instancesRespondToSelector:@selector(showsScale)]) {
507
- return [super showsScale];
508
- } else {
509
- return NO;
510
- }
511
- }
670
+ return;
671
+ }
512
672
 
513
- - (void)setShowsTraffic:(BOOL)showsTraffic {
514
- if ([MKMapView instancesRespondToSelector:@selector(setShowsTraffic:)]) {
515
- [super setShowsTraffic:showsTraffic];
516
- }
517
- }
673
+ MKMapCameraZoomRange *zoomRange = nil;
518
674
 
519
- - (BOOL)showsTraffic {
520
- if ([MKMapView instancesRespondToSelector:@selector(showsTraffic)]) {
521
- return [super showsTraffic];
522
- } else {
523
- return NO;
524
- }
675
+ if (minValue != nil && maxValue != nil) {
676
+ zoomRange = [[MKMapCameraZoomRange alloc] initWithMinCenterCoordinateDistance:[minValue doubleValue] maxCenterCoordinateDistance:[maxValue doubleValue]];
677
+ } else if (minValue != nil) {
678
+ zoomRange = [[MKMapCameraZoomRange alloc] initWithMinCenterCoordinateDistance:[minValue doubleValue]];
679
+ } else if (maxValue != nil) {
680
+ zoomRange = [[MKMapCameraZoomRange alloc] initWithMaxCenterCoordinateDistance:[maxValue doubleValue]];
681
+ }
682
+
683
+ BOOL animated = [cameraZoomRange[@"animated"] boolValue];
684
+
685
+ self.legacyZoomConstraintsEnabled = NO;
686
+ [super setCameraZoomRange:zoomRange animated:animated];
525
687
  }
526
688
 
689
+
527
690
  - (void)setScrollEnabled:(BOOL)scrollEnabled {
528
691
  self.shouldScrollEnabled = [NSNumber numberWithBool:scrollEnabled];
529
692
  [self updateScrollEnabled];
@@ -588,6 +751,35 @@ const NSInteger AIRMapMaxZoomLevel = 20;
588
751
  }
589
752
  }
590
753
 
754
+ - (void) listenToMemoryWarnings
755
+ {
756
+ __weak __typeof(self) weakSelf = self;
757
+ static dispatch_once_t onceToken;
758
+ static dispatch_source_t source;
759
+ dispatch_once(&onceToken, ^{
760
+ source = dispatch_source_create(DISPATCH_SOURCE_TYPE_MEMORYPRESSURE, 0, DISPATCH_MEMORYPRESSURE_WARN|DISPATCH_MEMORYPRESSURE_CRITICAL, dispatch_get_main_queue());
761
+ dispatch_source_set_event_handler(source, ^{
762
+ [weakSelf handleMemoryWarning];
763
+ });
764
+ dispatch_resume(source);
765
+ });
766
+ }
767
+ /*
768
+ hacky way to release all cache
769
+ this is our last chance to release cache before app crash
770
+ */
771
+ - (void) handleMemoryWarning
772
+ {
773
+ NSLog(@"handleMemoryWarning warning");
774
+ MKMapType type = self.mapType;
775
+ if (type == MKMapTypeSatellite){
776
+ self.mapType = MKMapTypeStandard;
777
+ } else {
778
+ self.mapType = MKMapTypeSatellite;
779
+ }
780
+ self.mapType = type;
781
+ }
782
+
591
783
  - (void)updateLegalLabelInsets {
592
784
  if (_legalLabel) {
593
785
  dispatch_async(dispatch_get_main_queue(), ^{
@@ -609,16 +801,16 @@ const NSInteger AIRMapMaxZoomLevel = 20;
609
801
 
610
802
 
611
803
  - (void)setLegalLabelInsets:(UIEdgeInsets)legalLabelInsets {
612
- _legalLabelInsets = legalLabelInsets;
613
- [self updateLegalLabelInsets];
804
+ _legalLabelInsets = legalLabelInsets;
805
+ [self updateLegalLabelInsets];
614
806
  }
615
807
 
616
808
  - (void)setMapPadding:(UIEdgeInsets)mapPadding {
617
- self.layoutMargins = mapPadding;
809
+ self.layoutMargins = mapPadding;
618
810
  }
619
811
 
620
812
  - (UIEdgeInsets)mapPadding {
621
- return self.layoutMargins;
813
+ return self.layoutMargins;
622
814
  }
623
815
 
624
816
  - (void)beginLoading {
@@ -631,6 +823,14 @@ const NSInteger AIRMapMaxZoomLevel = 20;
631
823
  self.loadingView.hidden = YES;
632
824
  }
633
825
  }
826
+ _loadingStarted = YES;
827
+ // display initialRegion/Camera
828
+ if (_initialRegionProvided){
829
+ [self setInitialRegion:_initialRegion];
830
+ }
831
+ if (_initialCameraProvided){
832
+ [self setInitialCamera:_initialCamera];
833
+ }
634
834
  }
635
835
 
636
836
  - (void)finishLoading {
@@ -677,15 +877,28 @@ const NSInteger AIRMapMaxZoomLevel = 20;
677
877
  - (void)layoutSubviews {
678
878
  [super layoutSubviews];
679
879
  [self cacheViewIfNeeded];
680
- NSUInteger index = [[self subviews] indexOfObjectPassingTest:^BOOL(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
681
- NSString *str = NSStringFromClass([obj class]);
682
- return [str containsString:@"MKCompassView"];
683
- }];
684
- if (index != NSNotFound) {
685
- UIView* compassButton;
686
- compassButton = [self.subviews objectAtIndex:index];
687
- compassButton.frame = CGRectMake(compassButton.frame.origin.x + _compassOffset.x, compassButton.frame.origin.y + _compassOffset.y, compassButton.frame.size.width, compassButton.frame.size.height);
880
+ }
881
+
882
+ // based on https://medium.com/@dmytrobabych/getting-actual-rotation-and-zoom-level-for-mapkit-mkmapview-e7f03f430aa9
883
+ - (CGFloat)getZoomLevel {
884
+ CGFloat cameraAngle = self.camera.heading;
885
+
886
+ if (cameraAngle > 270) {
887
+ cameraAngle = 360 - cameraAngle;
888
+ } else if (cameraAngle > 90) {
889
+ cameraAngle = fabs(cameraAngle - 180);
688
890
  }
891
+
892
+ CGFloat angleRad = M_PI * cameraAngle / 180; // map rotation in radians
893
+ CGFloat width = self.frame.size.width;
894
+ CGFloat height = self.frame.size.height;
895
+ CGFloat heightOffset = 20; // the offset (status bar height) which is taken by MapKit into consideration to calculate visible area height
896
+
897
+ // calculating Longitude span corresponding to normal (non-rotated) width
898
+ CGFloat spanStraight = width * self.region.span.longitudeDelta / (width * cos(angleRad) + (height - heightOffset) * sin(angleRad));
899
+ int normalizingFactor = 512;
900
+
901
+ return log2(360 * ((width / normalizingFactor) / spanStraight));
689
902
  }
690
903
 
691
904
  @end