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.
- package/android/build.gradle +89 -33
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
- package/android/gradlew +251 -0
- package/android/gradlew.bat +94 -0
- package/android/src/main/AndroidManifest.xml +1 -5
- package/android/src/main/RCTAppDependencyProvider.h +25 -0
- package/android/src/main/RCTAppDependencyProvider.mm +55 -0
- package/android/src/main/RCTModulesConformingToProtocolsProvider.h +18 -0
- package/android/src/main/RCTModulesConformingToProtocolsProvider.mm +33 -0
- package/android/src/main/RCTThirdPartyComponentsProvider.h +16 -0
- package/android/src/main/RCTThirdPartyComponentsProvider.mm +28 -0
- package/android/src/main/ReactAppDependencyProvider.podspec +34 -0
- package/android/src/main/java/com/facebook/fbreact/specs/NativeAirMapsModuleSpec.java +63 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCalloutManagerDelegate.java +35 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCalloutManagerInterface.java +17 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCircleManagerDelegate.java +49 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCircleManagerInterface.java +23 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsGooglePolygonManagerDelegate.java +49 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsGooglePolygonManagerInterface.java +23 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMapViewManagerDelegate.java +209 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMapViewManagerInterface.java +74 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMarkerManagerDelegate.java +104 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMarkerManagerInterface.java +39 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsOverlayManagerDelegate.java +45 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsOverlayManagerInterface.java +22 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsPolylineManagerDelegate.java +58 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsPolylineManagerInterface.java +26 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsUrlTileManagerDelegate.java +62 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsUrlTileManagerInterface.java +27 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsWMSTileManagerDelegate.java +56 -0
- package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsWMSTileManagerInterface.java +25 -0
- package/android/src/main/java/com/rnmaps/fabric/CalloutManager.java +77 -0
- package/android/src/main/java/com/rnmaps/fabric/CircleManager.java +94 -0
- package/android/src/main/java/com/rnmaps/fabric/JSONUtil.java +86 -0
- package/android/src/main/java/com/rnmaps/fabric/MapViewManager.java +623 -0
- package/android/src/main/java/com/rnmaps/fabric/MarkerManager.java +258 -0
- package/android/src/main/java/com/rnmaps/fabric/NativeAirMapsModule.java +284 -0
- package/android/src/main/java/com/rnmaps/fabric/OverlayManager.java +101 -0
- package/android/src/main/java/com/rnmaps/fabric/PolygonManager.java +89 -0
- package/android/src/main/java/com/rnmaps/fabric/PolylineManager.java +121 -0
- package/android/src/main/java/com/rnmaps/fabric/UrlTileManager.java +124 -0
- package/android/src/main/java/com/rnmaps/fabric/WMSTileManager.java +114 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnCalloutPressEvent.java +25 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnDeselectEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnDoublePressEvent.java +27 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnDragEndEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnDragEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnDragStartEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnIndoorBuildingFocusedEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnIndoorLevelActivatedEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnKmlReadyEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnLongPressEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnMapLoadedEvent.java +29 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnMapReadyEvent.java +29 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDeselectEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragEndEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragStartEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerPressEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerSelectEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnPanDragEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnPoiClickEvent.java +27 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnPressEvent.java +27 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeCompleteEvent.java +30 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeEvent.java +48 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeStartEvent.java +33 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnSelectEvent.java +28 -0
- package/android/src/main/java/com/rnmaps/fabric/event/OnUserLocationChangeEvent.java +28 -0
- package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/FileUtil.java +3 -6
- package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/FusedLocationSource.java +5 -2
- package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ImageReadable.java +1 -1
- package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ImageReader.java +5 -7
- package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ImageUtil.java +1 -2
- package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/LatLngBoundsUtils.java +1 -1
- package/android/src/main/java/com/rnmaps/maps/MapAirModulePackage.java +98 -0
- package/android/src/main/java/com/rnmaps/maps/MapCallout.java +41 -0
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapCalloutManager.java → rnmaps/maps/MapCalloutManager.java} +6 -6
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapCircle.java → rnmaps/maps/MapCircle.java} +34 -8
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapCircleManager.java → rnmaps/maps/MapCircleManager.java} +15 -20
- package/android/src/main/java/com/rnmaps/maps/MapFeature.java +17 -0
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapGradientPolyline.java → rnmaps/maps/MapGradientPolyline.java} +9 -12
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapGradientPolylineManager.java → rnmaps/maps/MapGradientPolylineManager.java} +13 -18
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapHeatmap.java → rnmaps/maps/MapHeatmap.java} +8 -9
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapHeatmapManager.java → rnmaps/maps/MapHeatmapManager.java} +8 -8
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapLocalTile.java → rnmaps/maps/MapLocalTile.java} +19 -16
- package/android/src/main/java/com/rnmaps/maps/MapLocalTileManager.java +54 -0
- package/android/src/main/java/com/rnmaps/maps/MapManager.java +504 -0
- package/android/src/main/java/com/rnmaps/maps/MapMarker.java +706 -0
- package/android/src/main/java/com/rnmaps/maps/MapMarkerManager.java +368 -0
- package/android/src/main/java/com/rnmaps/maps/MapModule.java +283 -0
- package/android/src/main/java/com/rnmaps/maps/MapOverlay.java +262 -0
- package/android/src/main/java/com/rnmaps/maps/MapOverlayManager.java +97 -0
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapPolygon.java → rnmaps/maps/MapPolygon.java} +73 -9
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapPolygonManager.java → rnmaps/maps/MapPolygonManager.java} +22 -22
- package/android/src/main/java/com/rnmaps/maps/MapPolyline.java +230 -0
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapPolylineManager.java → rnmaps/maps/MapPolylineManager.java} +18 -38
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapTileProvider.java → rnmaps/maps/MapTileProvider.java} +55 -76
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapTileWorker.java → rnmaps/maps/MapTileWorker.java} +7 -14
- package/android/src/main/java/com/rnmaps/maps/MapUIBlock.java +64 -0
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapUrlTile.java → rnmaps/maps/MapUrlTile.java} +29 -29
- package/android/src/main/java/com/rnmaps/maps/MapUrlTileManager.java +87 -0
- package/android/src/main/java/com/rnmaps/maps/MapView.java +1844 -0
- package/android/src/main/java/com/{airbnb/android/react/maps/AirMapWMSTile.java → rnmaps/maps/MapWMSTile.java} +11 -17
- package/android/src/main/java/com/rnmaps/maps/MapWMSTileManager.java +81 -0
- package/android/src/main/java/com/rnmaps/maps/MapsPackage.java +45 -0
- package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/RegionChangeEvent.java +1 -1
- package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/SizeReportingShadowNode.java +1 -1
- package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ViewAttacherGroup.java +2 -7
- package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ViewChangesTracker.java +12 -11
- package/android/src/main/jni/CMakeLists.txt +36 -0
- package/android/src/main/jni/RNMapsSpecs-generated.cpp +68 -0
- package/android/src/main/jni/RNMapsSpecs.h +31 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ComponentDescriptors.cpp +31 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ComponentDescriptors.h +33 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/EventEmitters.cpp +979 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/EventEmitters.h +860 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/Props.cpp +227 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/Props.h +1297 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/RNMapsSpecsJSI-generated.cpp +74 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/RNMapsSpecsJSI.h +268 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ShadowNodes.cpp +26 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ShadowNodes.h +131 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/States.cpp +16 -0
- package/android/src/main/jni/react/renderer/components/RNMapsSpecs/States.h +137 -0
- package/app.plugin.js +1 -0
- package/ios/AirGoogleMaps/AIRGMSMarker.h +2 -0
- package/ios/AirGoogleMaps/AIRGoogleMap.h +22 -12
- package/ios/AirGoogleMaps/{AIRGoogleMap.m → AIRGoogleMap.mm} +407 -130
- package/ios/AirGoogleMaps/AIRGoogleMapCircle.h +2 -3
- package/ios/AirGoogleMaps/AIRGoogleMapCircle.m +42 -3
- package/ios/AirGoogleMaps/AIRGoogleMapCoordinate.h +13 -0
- package/ios/AirGoogleMaps/AIRGoogleMapCoordinate.m +10 -0
- package/ios/AirGoogleMaps/AIRGoogleMapHeatmap.h +1 -1
- package/ios/AirGoogleMaps/AIRGoogleMapManager.h +11 -0
- package/ios/AirGoogleMaps/AIRGoogleMapManager.mm +543 -0
- package/ios/AirGoogleMaps/AIRGoogleMapMarker.h +4 -0
- package/ios/AirGoogleMaps/AIRGoogleMapMarker.m +369 -237
- package/ios/AirGoogleMaps/AIRGoogleMapMarkerManager.m +3 -2
- package/ios/AirGoogleMaps/AIRGoogleMapOverlay.h +0 -1
- package/ios/AirGoogleMaps/AIRGoogleMapPolygon.h +7 -6
- package/ios/AirGoogleMaps/AIRGoogleMapPolygon.m +62 -5
- package/ios/AirGoogleMaps/AIRGoogleMapPolygonManager.m +3 -3
- package/ios/AirGoogleMaps/AIRGoogleMapPolyline.h +4 -3
- package/ios/AirGoogleMaps/AIRGoogleMapPolyline.m +9 -9
- package/ios/AirGoogleMaps/AIRGoogleMapPolylineManager.m +2 -2
- package/ios/AirGoogleMaps/AIRGoogleMapUrlTile.m +2 -2
- package/ios/AirGoogleMaps/AIRGoogleMapWMSTile.h +1 -1
- package/ios/AirGoogleMaps/AIRGoogleMapWMSTile.m +4 -4
- package/ios/AirGoogleMaps/RCTConvert+GMSMapViewType.h +3 -0
- package/ios/AirGoogleMaps/RCTConvert+GMSMapViewType.m +18 -0
- package/ios/AirGoogleMaps/RNMapsGoogleMapView.h +29 -0
- package/ios/AirGoogleMaps/RNMapsGoogleMapView.mm +678 -0
- package/ios/AirGoogleMaps/RNMapsGoogleMapViewManager.mm +40 -0
- package/ios/AirGoogleMaps/RNMapsGooglePolygonView.h +26 -0
- package/ios/AirGoogleMaps/RNMapsGooglePolygonView.mm +226 -0
- package/ios/AirGoogleMaps/RNMapsGooglePolygonViewManager.mm +26 -0
- package/ios/AirGoogleMaps/Resources/GoogleMapsPrivacy.bundle/PrivacyInfo.xcprivacy +110 -0
- package/ios/AirMaps/AIRMap.h +19 -14
- package/ios/AirMaps/{AIRMap.m → AIRMap.mm} +333 -120
- package/ios/AirMaps/AIRMapCircle.m +1 -53
- package/ios/AirMaps/AIRMapCoordinate.m +2 -4
- package/ios/AirMaps/AIRMapManager.m +64 -218
- package/ios/AirMaps/AIRMapMarker.h +5 -0
- package/ios/AirMaps/AIRMapMarker.m +180 -69
- package/ios/AirMaps/AIRMapMarkerManager.m +3 -0
- package/ios/AirMaps/AIRMapOverlay.m +2 -2
- package/ios/AirMaps/AIRMapPolygon.m +0 -52
- package/ios/AirMaps/AIRMapPolyline.m +3 -2
- package/ios/AirMaps/AIRMapWMSTile.m +8 -8
- package/ios/AirMaps/Callout/SMCalloutView.m +1 -1
- package/ios/AirMaps/FabricPlaceholders/PlaceHolderGoogleMapView.h +25 -0
- package/ios/AirMaps/FabricPlaceholders/PlaceHolderGoogleMapView.mm +77 -0
- package/ios/AirMaps/FabricPlaceholders/PlaceHolderPolygonView.h +25 -0
- package/ios/AirMaps/FabricPlaceholders/PlaceHolderPolygonView.mm +52 -0
- package/ios/AirMaps/RCTComponentData+Maps.h +13 -0
- package/ios/AirMaps/RCTComponentData+Maps.m +55 -0
- package/ios/AirMaps/RCTConvert+AirMap.h +6 -1
- package/ios/AirMaps/RCTConvert+AirMap.m +18 -0
- package/ios/AirMaps/RNMapsAirModule.h +15 -0
- package/ios/AirMaps/RNMapsAirModule.mm +164 -0
- package/ios/AirMaps/RNMapsDefines.h +1 -0
- package/ios/AirMaps/RNMapsMapView.h +27 -0
- package/ios/AirMaps/RNMapsMapView.mm +577 -0
- package/ios/AirMaps/RNMapsMapViewManager.mm +42 -0
- package/ios/AirMaps/RNMapsMarkerView.h +24 -0
- package/ios/AirMaps/RNMapsMarkerView.mm +439 -0
- package/ios/AirMaps/RNMapsMarkerViewManager.mm +28 -0
- package/ios/AirMaps/UIView+AirMap.h +11 -0
- package/ios/AirMaps/UIView+AirMap.m +20 -0
- package/ios/AirMaps/module.modulemap +6 -0
- package/ios/AirMaps.xcodeproj/project.pbxproj +44 -4
- package/ios/PrivacyInfo.xcprivacy +37 -0
- package/ios/generated/RCTAppDependencyProvider.h +25 -0
- package/ios/generated/RCTAppDependencyProvider.mm +55 -0
- package/ios/generated/RCTModulesConformingToProtocolsProvider.h +18 -0
- package/ios/generated/RCTModulesConformingToProtocolsProvider.mm +33 -0
- package/ios/generated/RCTThirdPartyComponentsProvider.h +16 -0
- package/ios/generated/RCTThirdPartyComponentsProvider.mm +26 -0
- package/ios/generated/RNMapsAirModuleDelegate.h +24 -0
- package/ios/generated/RNMapsHostVewDelegate.h +17 -0
- package/ios/generated/RNMapsSpecs/ComponentDescriptors.cpp +29 -0
- package/ios/generated/RNMapsSpecs/ComponentDescriptors.h +31 -0
- package/ios/generated/RNMapsSpecs/EventEmitters.cpp +977 -0
- package/ios/generated/RNMapsSpecs/EventEmitters.h +846 -0
- package/ios/generated/RNMapsSpecs/Props.cpp +194 -0
- package/ios/generated/RNMapsSpecs/Props.h +1224 -0
- package/ios/generated/RNMapsSpecs/RCTComponentViewHelpers.h +591 -0
- package/ios/generated/RNMapsSpecs/RNMapsSpecs-generated.mm +92 -0
- package/ios/generated/RNMapsSpecs/RNMapsSpecs.h +137 -0
- package/ios/generated/RNMapsSpecs/ShadowNodes.cpp +24 -0
- package/ios/generated/RNMapsSpecs/ShadowNodes.h +109 -0
- package/ios/generated/RNMapsSpecs/States.cpp +16 -0
- package/ios/generated/RNMapsSpecs/States.h +113 -0
- package/ios/generated/RNMapsSpecsJSI-generated.cpp +74 -0
- package/ios/generated/RNMapsSpecsJSI.h +268 -0
- package/ios/generated/ReactAppDependencyProvider.podspec +34 -0
- package/ios/generated/module.modulemap +15 -0
- package/package.json +57 -34
- package/plugin/build/android.js +58 -0
- package/plugin/build/index.js +10 -0
- package/plugin/build/ios.js +176 -0
- package/plugin/build/types.js +2 -0
- package/react-native-maps.podspec +114 -11
- package/react-native.config.js +15 -0
- package/src/{AnimatedRegion.js → AnimatedRegion.ts} +26 -21
- package/src/Geojson.tsx +541 -0
- package/src/MapCallout.tsx +77 -0
- package/src/MapCalloutSubview.tsx +64 -0
- package/src/MapCircle.tsx +162 -0
- package/src/MapHeatmap.tsx +125 -0
- package/src/MapLocalTile.tsx +60 -0
- package/src/MapMarker.tsx +531 -0
- package/src/MapMarkerNativeComponent.ts +51 -0
- package/src/MapOverlay.tsx +178 -0
- package/src/MapPolygon.tsx +188 -0
- package/src/MapPolygon.types.ts +25 -0
- package/src/MapPolyline.tsx +215 -0
- package/src/MapUrlTile.tsx +169 -0
- package/src/MapView.tsx +1235 -0
- package/src/MapView.types.ts +212 -0
- package/src/MapView.web.ts +2 -0
- package/src/MapViewNativeComponent.ts +86 -0
- package/src/MapWMSTile.tsx +148 -0
- package/src/ProviderConstants.ts +2 -0
- package/src/createFabricMap.tsx +253 -0
- package/src/decorateMapComponent.ts +230 -0
- package/src/fixImageProp.ts +17 -0
- package/src/index.ts +52 -0
- package/src/sharedTypes.ts +101 -0
- package/src/sharedTypesInternal.ts +1 -0
- package/src/specs/NativeAirMapsModule.ts +36 -0
- package/src/specs/NativeComponentCallout.ts +63 -0
- package/src/specs/NativeComponentCircle.ts +93 -0
- package/src/specs/NativeComponentGoogleMapView.ts +922 -0
- package/src/specs/NativeComponentGooglePolygon.ts +94 -0
- package/src/specs/NativeComponentMapView.ts +1100 -0
- package/src/specs/NativeComponentMarker.ts +326 -0
- package/src/specs/NativeComponentOverlay.ts +98 -0
- package/src/specs/NativeComponentPolyline.ts +124 -0
- package/src/specs/NativeComponentUrlTile.ts +128 -0
- package/src/specs/NativeComponentWMSTile.ts +107 -0
- package/LICENSE +0 -21
- package/README.md +0 -652
- package/android/src/main/assets/ula.kml +0 -1214
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapCallout.java +0 -23
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapFeature.java +0 -18
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapLiteManager.java +0 -20
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapLocalTileManager.java +0 -56
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapManager.java +0 -500
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapMarker.java +0 -630
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapMarkerManager.java +0 -370
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapModule.java +0 -380
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapOverlay.java +0 -169
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapOverlayManager.java +0 -81
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapPolyline.java +0 -162
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapUrlTileManager.java +0 -97
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapView.java +0 -1384
- package/android/src/main/java/com/airbnb/android/react/maps/AirMapWMSTileManager.java +0 -87
- package/android/src/main/java/com/airbnb/android/react/maps/MapsPackage.java +0 -65
- package/index.d.ts +0 -637
- package/ios/AirGoogleMaps/AIRGoogleMapManager.m +0 -690
- package/ios/User.xcconfig +0 -0
- package/react-native-google-maps.podspec +0 -22
- package/src/Geojson.js +0 -334
- package/src/MapCallout.js +0 -51
- package/src/MapCalloutSubview.js +0 -44
- package/src/MapCircle.js +0 -150
- package/src/MapHeatmap.js +0 -99
- package/src/MapLocalTile.js +0 -52
- package/src/MapMarker.js +0 -377
- package/src/MapOverlay.js +0 -86
- package/src/MapPolygon.js +0 -202
- package/src/MapPolyline.js +0 -168
- package/src/MapUrlTile.js +0 -131
- package/src/MapView.js +0 -1160
- package/src/MapView.web.js +0 -1
- package/src/MapWMSTile.js +0 -122
- package/src/ProviderConstants.js +0 -2
- package/src/decorateMapComponent.js +0 -112
- 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
|
-
|
|
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.
|
|
89
|
-
self.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
325
|
+
#pragma mark RNMapsAirModuleDelegate.h
|
|
330
326
|
|
|
331
|
-
- (
|
|
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
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
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
|
-
|
|
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
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
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
|
-
|
|
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)
|
|
547
|
+
- (void)setHandlePanDrag:(BOOL)handlePanDrag {
|
|
394
548
|
for (UIGestureRecognizer *recognizer in [self gestureRecognizers]) {
|
|
395
549
|
if ([recognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
|
|
396
|
-
recognizer.enabled =
|
|
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 (!
|
|
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
|
-
|
|
436
|
-
|
|
437
|
-
|
|
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
|
-
|
|
483
|
-
|
|
656
|
+
- (void)setCameraZoomRange:(NSDictionary *)cameraZoomRange {
|
|
657
|
+
if (cameraZoomRange == nil) {
|
|
658
|
+
cameraZoomRange = @{};
|
|
659
|
+
}
|
|
484
660
|
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
[super setShowsCompass:showsCompass];
|
|
488
|
-
}
|
|
489
|
-
}
|
|
661
|
+
NSNumber *minValue = cameraZoomRange[@"minCenterCoordinateDistance"];
|
|
662
|
+
NSNumber *maxValue = cameraZoomRange[@"maxCenterCoordinateDistance"];
|
|
490
663
|
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
return [super showsCompass];
|
|
494
|
-
} else {
|
|
495
|
-
return NO;
|
|
496
|
-
}
|
|
497
|
-
}
|
|
664
|
+
if (minValue == nil && maxValue == nil) {
|
|
665
|
+
self.legacyZoomConstraintsEnabled = YES;
|
|
498
666
|
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
[super setShowsScale:showsScale];
|
|
502
|
-
}
|
|
503
|
-
}
|
|
667
|
+
MKMapCameraZoomRange *defaultZoomRange = [[MKMapCameraZoomRange alloc] initWithMinCenterCoordinateDistance:MKMapCameraZoomDefault maxCenterCoordinateDistance:MKMapCameraZoomDefault];
|
|
668
|
+
[super setCameraZoomRange:defaultZoomRange animated:NO];
|
|
504
669
|
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
return [super showsScale];
|
|
508
|
-
} else {
|
|
509
|
-
return NO;
|
|
510
|
-
}
|
|
511
|
-
}
|
|
670
|
+
return;
|
|
671
|
+
}
|
|
512
672
|
|
|
513
|
-
|
|
514
|
-
if ([MKMapView instancesRespondToSelector:@selector(setShowsTraffic:)]) {
|
|
515
|
-
[super setShowsTraffic:showsTraffic];
|
|
516
|
-
}
|
|
517
|
-
}
|
|
673
|
+
MKMapCameraZoomRange *zoomRange = nil;
|
|
518
674
|
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
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
|
-
|
|
613
|
-
|
|
804
|
+
_legalLabelInsets = legalLabelInsets;
|
|
805
|
+
[self updateLegalLabelInsets];
|
|
614
806
|
}
|
|
615
807
|
|
|
616
808
|
- (void)setMapPadding:(UIEdgeInsets)mapPadding {
|
|
617
|
-
|
|
809
|
+
self.layoutMargins = mapPadding;
|
|
618
810
|
}
|
|
619
811
|
|
|
620
812
|
- (UIEdgeInsets)mapPadding {
|
|
621
|
-
|
|
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
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
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
|