@maplibre/maplibre-react-native 8.6.0-beta.0
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/.eslintignore +3 -0
- package/.eslintrc.js +158 -0
- package/.gitattributes +1 -0
- package/.nvmrc +1 -0
- package/.prettierrc.js +7 -0
- package/.sonarcloud.properties +15 -0
- package/CHANGELOG.md +367 -0
- package/CODE_OF_CONDUCT.md +2 -0
- package/CONTRIBUTING.md +34 -0
- package/LICENSE.md +9 -0
- package/README.md +224 -0
- package/RELEASE.md +30 -0
- package/android/build.gradle +34 -0
- package/android/install.md +16 -0
- package/android/rctmgl/.settings/org.eclipse.buildship.core.prefs +2 -0
- package/android/rctmgl/build.gradle +61 -0
- package/android/rctmgl/proguard-rules.pro +25 -0
- package/android/rctmgl/src/main/AndroidManifest.xml +4 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/RCTMGLPackage.java +99 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/AbstractEvent.java +35 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/AbstractEventEmitter.java +80 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/AbstractMapFeature.java +19 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/MarkerView.java +23 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/MarkerViewManager.java +67 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/RCTMGLCallout.java +15 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/RCTMGLCalloutManager.java +22 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/RCTMGLMarkerView.java +112 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/RCTMGLMarkerViewManager.java +45 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/RCTMGLPointAnnotation.java +360 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/RCTMGLPointAnnotationManager.java +88 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/camera/CameraStop.java +249 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/camera/CameraUpdateItem.java +125 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/camera/CameraUpdateQueue.java +73 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/camera/RCTMGLCamera.java +530 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/camera/RCTMGLCameraManager.java +101 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/camera/constants/CameraMode.java +22 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/images/RCTMGLImages.java +234 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/images/RCTMGLImagesManager.java +103 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/location/LocationComponentManager.java +149 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/location/RCTMGLNativeUserLocation.java +66 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/location/RCTMGLNativeUserLocationManager.java +35 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/LayerSourceInfo.java +59 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/RCTMGLAndroidTextureMapView.java +16 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/RCTMGLAndroidTextureMapViewManager.java +31 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/RCTMGLMapView.java +1527 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/RCTMGLMapViewManager.java +353 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/helpers/CameraChangeTracker.java +41 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/RCTMGLStyle.java +83 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/RCTMGLStyleFactory.java +2242 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/RCTMGLStyleFunctionParser.java +108 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/RCTMGLStyleValue.java +212 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTLayer.java +287 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLBackgroundLayer.java +27 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLBackgroundLayerManager.java +64 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLCircleLayer.java +55 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLCircleLayerManager.java +77 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLFillExtrusionLayer.java +55 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLFillExtrusionLayerManager.java +80 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLFillLayer.java +55 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLFillLayerManager.java +80 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLHeatmapLayer.java +55 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLHeatmapLayerManager.java +77 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLLineLayer.java +55 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLLineLayerManager.java +79 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLRasterLayer.java +27 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLRasterLayerManager.java +64 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLSymbolLayer.java +55 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLSymbolLayerManager.java +75 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/light/RCTMGLLight.java +65 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/light/RCTMGLLightManager.java +29 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLImageSource.java +81 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLImageSourceManager.java +72 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLRasterSource.java +45 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLRasterSourceManager.java +44 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLShapeSource.java +302 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLShapeSourceManager.java +227 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLTileSource.java +97 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLTileSourceManager.java +80 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLVectorSource.java +64 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLVectorSourceManager.java +84 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTSource.java +244 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/AbstractEvent.java +66 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/AndroidCallbackEvent.java +38 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/EventEmitter.java +45 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/FeatureClickEvent.java +79 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/IEvent.java +18 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/ImageMissingEvent.java +42 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/LocationEvent.java +100 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/MapChangeEvent.java +47 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/MapClickEvent.java +51 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/MapUserTrackingModeEvent.java +36 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/OfflineEvent.java +29 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/PointAnnotationClickEvent.java +46 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/PointAnnotationDragEvent.java +51 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/constants/EventKeys.java +39 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/constants/EventTypes.java +51 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/http/CustomHeadersInterceptor.java +38 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/location/LocationManager.java +168 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/location/UserLocation.java +63 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/location/UserLocationVerticalAlignment.java +11 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/location/UserTrackingMode.java +63 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/location/UserTrackingState.java +19 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/modules/RCTMGLLocationModule.java +158 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/modules/RCTMGLLogging.java +140 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/modules/RCTMGLModule.java +348 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/modules/RCTMGLOfflineModule.java +597 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/modules/RCTMGLSnapshotModule.java +139 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/BitmapUtils.java +129 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/ConvertUtils.java +257 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/DownloadMapImageTask.java +159 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/ExpressionParser.java +74 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/GeoJSONUtils.java +209 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/GeoViewport.java +38 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/ImageEntry.java +25 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/ResourceUtils.java +30 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/SimpleEventCallback.java +30 -0
- package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/SphericalMercator.java +69 -0
- package/android/rctmgl/src/main/res/drawable/empty.xml +5 -0
- package/android/rctmgl/src/main/res/drawable/empty_drawable.png +0 -0
- package/android/rctmgl/src/main/res/drawable-xxhdpi/red_marker.png +0 -0
- package/android/rctmgl/src/main/res/layout/annotation.xml +17 -0
- package/android/rctmgl/src/main/res/values/strings.xml +3 -0
- package/android/settings.gradle +1 -0
- package/app.plugin.js +1 -0
- package/assets/heading.png +0 -0
- package/assets/heading@2x.png +0 -0
- package/assets/heading@3x.png +0 -0
- package/assets/indoor_building_map_android.png +0 -0
- package/assets/indoor_building_map_ios.png +0 -0
- package/assets/mapbox_logo.png +0 -0
- package/babel.config.js +9 -0
- package/docs/Annotation.md +39 -0
- package/docs/Annotations.md +17 -0
- package/docs/BackgroundLayer.md +166 -0
- package/docs/Callout.md +15 -0
- package/docs/Camera.md +162 -0
- package/docs/CircleLayer.md +453 -0
- package/docs/CustomHttpHeaders.md +87 -0
- package/docs/FillExtrusionLayer.md +327 -0
- package/docs/FillLayer.md +293 -0
- package/docs/GettingStarted.md +72 -0
- package/docs/HeadingIndicator.md +10 -0
- package/docs/HeatmapLayer.md +215 -0
- package/docs/ImageSource.md +12 -0
- package/docs/Images.md +12 -0
- package/docs/Light.md +159 -0
- package/docs/LineLayer.md +567 -0
- package/docs/Logger.md +23 -0
- package/docs/MapView.md +211 -0
- package/docs/MapboxGL.md +65 -0
- package/docs/MarkerView.md +14 -0
- package/docs/NativeUserLocation.md +11 -0
- package/docs/OfflineManager.md +246 -0
- package/docs/PointAnnotation.md +34 -0
- package/docs/RasterLayer.md +357 -0
- package/docs/RasterSource.md +17 -0
- package/docs/ShapeSource.md +100 -0
- package/docs/Style.md +10 -0
- package/docs/StyleSheet.md +430 -0
- package/docs/SymbolLayer.md +1658 -0
- package/docs/UserLocation.md +39 -0
- package/docs/VectorSource.md +48 -0
- package/docs/docs.json +6093 -0
- package/docs/snapshotManager.md +53 -0
- package/index.d.ts +953 -0
- package/ios/RCTMGL/CameraMode.h +18 -0
- package/ios/RCTMGL/CameraMode.m +18 -0
- package/ios/RCTMGL/CameraStop.h +26 -0
- package/ios/RCTMGL/CameraStop.m +83 -0
- package/ios/RCTMGL/CameraUpdateItem.h +18 -0
- package/ios/RCTMGL/CameraUpdateItem.m +178 -0
- package/ios/RCTMGL/CameraUpdateQueue.h +21 -0
- package/ios/RCTMGL/CameraUpdateQueue.m +74 -0
- package/ios/RCTMGL/FilterParser.h +14 -0
- package/ios/RCTMGL/FilterParser.m +22 -0
- package/ios/RCTMGL/MGLCustomHeaders.h +20 -0
- package/ios/RCTMGL/MGLCustomHeaders.m +98 -0
- package/ios/RCTMGL/MGLFaux3DUserLocationAnnotationView.h +23 -0
- package/ios/RCTMGL/MGLFaux3DUserLocationAnnotationView.m +474 -0
- package/ios/RCTMGL/MGLModule.h +13 -0
- package/ios/RCTMGL/MGLModule.m +269 -0
- package/ios/RCTMGL/MGLOfflineModule.h +19 -0
- package/ios/RCTMGL/MGLOfflineModule.m +516 -0
- package/ios/RCTMGL/MGLSnapshotModule.h +13 -0
- package/ios/RCTMGL/MGLSnapshotModule.m +80 -0
- package/ios/RCTMGL/MGLUserLocationHeadingArrowLayer.h +11 -0
- package/ios/RCTMGL/MGLUserLocationHeadingArrowLayer.m +57 -0
- package/ios/RCTMGL/MGLUserLocationHeadingBeamLayer.h +11 -0
- package/ios/RCTMGL/MGLUserLocationHeadingBeamLayer.m +102 -0
- package/ios/RCTMGL/MGLUserLocationHeadingIndicator.h +10 -0
- package/ios/RCTMGL/RCTConvert+Mapbox.h +16 -0
- package/ios/RCTMGL/RCTConvert+Mapbox.m +32 -0
- package/ios/RCTMGL/RCTMGL.h +13 -0
- package/ios/RCTMGL/RCTMGL.m +13 -0
- package/ios/RCTMGL/RCTMGLBackgroundLayer.h +14 -0
- package/ios/RCTMGL/RCTMGLBackgroundLayer.m +27 -0
- package/ios/RCTMGL/RCTMGLBackgroundLayerManager.h +13 -0
- package/ios/RCTMGL/RCTMGLBackgroundLayerManager.m +35 -0
- package/ios/RCTMGL/RCTMGLCallout.h +15 -0
- package/ios/RCTMGL/RCTMGLCallout.m +74 -0
- package/ios/RCTMGL/RCTMGLCalloutManager.h +13 -0
- package/ios/RCTMGL/RCTMGLCalloutManager.m +21 -0
- package/ios/RCTMGL/RCTMGLCamera.h +39 -0
- package/ios/RCTMGL/RCTMGLCamera.m +258 -0
- package/ios/RCTMGL/RCTMGLCameraManager.h +13 -0
- package/ios/RCTMGL/RCTMGLCameraManager.m +52 -0
- package/ios/RCTMGL/RCTMGLCircleLayer.h +13 -0
- package/ios/RCTMGL/RCTMGLCircleLayer.m +34 -0
- package/ios/RCTMGL/RCTMGLCircleLayerManager.h +13 -0
- package/ios/RCTMGL/RCTMGLCircleLayerManager.m +39 -0
- package/ios/RCTMGL/RCTMGLEvent.h +21 -0
- package/ios/RCTMGL/RCTMGLEvent.m +47 -0
- package/ios/RCTMGL/RCTMGLEventProtocol.h +16 -0
- package/ios/RCTMGL/RCTMGLEventTypes.h +50 -0
- package/ios/RCTMGL/RCTMGLEventTypes.m +49 -0
- package/ios/RCTMGL/RCTMGLFillExtrusionLayer.h +14 -0
- package/ios/RCTMGL/RCTMGLFillExtrusionLayer.m +32 -0
- package/ios/RCTMGL/RCTMGLFillExtrusionLayerManager.h +13 -0
- package/ios/RCTMGL/RCTMGLFillExtrusionLayerManager.m +39 -0
- package/ios/RCTMGL/RCTMGLFillLayer.h +14 -0
- package/ios/RCTMGL/RCTMGLFillLayer.m +33 -0
- package/ios/RCTMGL/RCTMGLFillLayerManager.h +13 -0
- package/ios/RCTMGL/RCTMGLFillLayerManager.m +37 -0
- package/ios/RCTMGL/RCTMGLHeatmapLayer.h +12 -0
- package/ios/RCTMGL/RCTMGLHeatmapLayer.m +30 -0
- package/ios/RCTMGL/RCTMGLHeatmapLayerManager.h +12 -0
- package/ios/RCTMGL/RCTMGLHeatmapLayerManager.m +38 -0
- package/ios/RCTMGL/RCTMGLImageQueue.h +19 -0
- package/ios/RCTMGL/RCTMGLImageQueue.m +57 -0
- package/ios/RCTMGL/RCTMGLImageQueueOperation.h +17 -0
- package/ios/RCTMGL/RCTMGLImageQueueOperation.m +138 -0
- package/ios/RCTMGL/RCTMGLImageSource.h +16 -0
- package/ios/RCTMGL/RCTMGLImageSource.m +60 -0
- package/ios/RCTMGL/RCTMGLImageSourceManager.h +13 -0
- package/ios/RCTMGL/RCTMGLImageSourceManager.m +25 -0
- package/ios/RCTMGL/RCTMGLImages.h +25 -0
- package/ios/RCTMGL/RCTMGLImages.m +126 -0
- package/ios/RCTMGL/RCTMGLImagesManager.h +5 -0
- package/ios/RCTMGL/RCTMGLImagesManager.m +21 -0
- package/ios/RCTMGL/RCTMGLLayer.h +52 -0
- package/ios/RCTMGL/RCTMGLLayer.m +236 -0
- package/ios/RCTMGL/RCTMGLLight.h +17 -0
- package/ios/RCTMGL/RCTMGLLight.m +46 -0
- package/ios/RCTMGL/RCTMGLLightManager.h +13 -0
- package/ios/RCTMGL/RCTMGLLightManager.m +23 -0
- package/ios/RCTMGL/RCTMGLLineLayer.h +14 -0
- package/ios/RCTMGL/RCTMGLLineLayer.m +33 -0
- package/ios/RCTMGL/RCTMGLLineLayerManager.h +13 -0
- package/ios/RCTMGL/RCTMGLLineLayerManager.m +40 -0
- package/ios/RCTMGL/RCTMGLLocation.h +19 -0
- package/ios/RCTMGL/RCTMGLLocation.m +32 -0
- package/ios/RCTMGL/RCTMGLLocationManager.h +30 -0
- package/ios/RCTMGL/RCTMGLLocationManager.m +180 -0
- package/ios/RCTMGL/RCTMGLLocationManagerDelegate.h +20 -0
- package/ios/RCTMGL/RCTMGLLocationModule.h +15 -0
- package/ios/RCTMGL/RCTMGLLocationModule.m +99 -0
- package/ios/RCTMGL/RCTMGLLogging.h +18 -0
- package/ios/RCTMGL/RCTMGLLogging.m +132 -0
- package/ios/RCTMGL/RCTMGLMapTouchEvent.h +25 -0
- package/ios/RCTMGL/RCTMGLMapTouchEvent.m +77 -0
- package/ios/RCTMGL/RCTMGLMapView.h +91 -0
- package/ios/RCTMGL/RCTMGLMapView.m +536 -0
- package/ios/RCTMGL/RCTMGLMapViewManager.h +17 -0
- package/ios/RCTMGL/RCTMGLMapViewManager.m +625 -0
- package/ios/RCTMGL/RCTMGLNativeUserLocation.h +18 -0
- package/ios/RCTMGL/RCTMGLNativeUserLocation.m +49 -0
- package/ios/RCTMGL/RCTMGLNativeUserLocationManager.h +5 -0
- package/ios/RCTMGL/RCTMGLNativeUserLocationManager.m +25 -0
- package/ios/RCTMGL/RCTMGLPointAnnotation.h +41 -0
- package/ios/RCTMGL/RCTMGLPointAnnotation.m +251 -0
- package/ios/RCTMGL/RCTMGLPointAnnotationManager.h +13 -0
- package/ios/RCTMGL/RCTMGLPointAnnotationManager.m +36 -0
- package/ios/RCTMGL/RCTMGLRasterLayer.h +14 -0
- package/ios/RCTMGL/RCTMGLRasterLayer.m +30 -0
- package/ios/RCTMGL/RCTMGLRasterLayerManager.h +13 -0
- package/ios/RCTMGL/RCTMGLRasterLayerManager.m +35 -0
- package/ios/RCTMGL/RCTMGLRasterSource.h +16 -0
- package/ios/RCTMGL/RCTMGLRasterSource.m +35 -0
- package/ios/RCTMGL/RCTMGLRasterSourceManager.h +13 -0
- package/ios/RCTMGL/RCTMGLRasterSourceManager.m +32 -0
- package/ios/RCTMGL/RCTMGLShapeSource.h +52 -0
- package/ios/RCTMGL/RCTMGLShapeSource.m +180 -0
- package/ios/RCTMGL/RCTMGLShapeSourceManager.h +14 -0
- package/ios/RCTMGL/RCTMGLShapeSourceManager.m +205 -0
- package/ios/RCTMGL/RCTMGLSource.h +35 -0
- package/ios/RCTMGL/RCTMGLSource.m +143 -0
- package/ios/RCTMGL/RCTMGLStyle.h +219 -0
- package/ios/RCTMGL/RCTMGLStyle.m +1654 -0
- package/ios/RCTMGL/RCTMGLStyleValue.h +27 -0
- package/ios/RCTMGL/RCTMGLStyleValue.m +167 -0
- package/ios/RCTMGL/RCTMGLSymbolLayer.h +19 -0
- package/ios/RCTMGL/RCTMGLSymbolLayer.m +121 -0
- package/ios/RCTMGL/RCTMGLSymbolLayerManager.h +13 -0
- package/ios/RCTMGL/RCTMGLSymbolLayerManager.m +40 -0
- package/ios/RCTMGL/RCTMGLTileSource.h +22 -0
- package/ios/RCTMGL/RCTMGLTileSource.m +31 -0
- package/ios/RCTMGL/RCTMGLUserLocation.h +15 -0
- package/ios/RCTMGL/RCTMGLUserLocation.m +38 -0
- package/ios/RCTMGL/RCTMGLUtils.h +31 -0
- package/ios/RCTMGL/RCTMGLUtils.m +218 -0
- package/ios/RCTMGL/RCTMGLVectorLayer.h +15 -0
- package/ios/RCTMGL/RCTMGLVectorLayer.m +59 -0
- package/ios/RCTMGL/RCTMGLVectorSource.h +16 -0
- package/ios/RCTMGL/RCTMGLVectorSource.m +28 -0
- package/ios/RCTMGL/RCTMGLVectorSourceManager.h +14 -0
- package/ios/RCTMGL/RCTMGLVectorSourceManager.m +79 -0
- package/ios/RCTMGL/RNMBImageUtils.h +17 -0
- package/ios/RCTMGL/RNMBImageUtils.m +31 -0
- package/ios/RCTMGL/ViewManager.h +16 -0
- package/ios/RCTMGL/ViewManager.m +63 -0
- package/ios/RCTMGL/index.d.ts +1164 -0
- package/ios/RCTMGL.xcodeproj/project.pbxproj +774 -0
- package/ios/install.md +44 -0
- package/javascript/components/AbstractLayer.js +75 -0
- package/javascript/components/AbstractSource.js +15 -0
- package/javascript/components/BackgroundLayer.js +97 -0
- package/javascript/components/Callout.js +139 -0
- package/javascript/components/Camera.js +665 -0
- package/javascript/components/CircleLayer.js +101 -0
- package/javascript/components/FillExtrusionLayer.js +98 -0
- package/javascript/components/FillLayer.js +94 -0
- package/javascript/components/HeadingIndicator.js +31 -0
- package/javascript/components/HeatmapLayer.js +99 -0
- package/javascript/components/ImageSource.js +82 -0
- package/javascript/components/Images.js +119 -0
- package/javascript/components/Light.js +47 -0
- package/javascript/components/LineLayer.js +94 -0
- package/javascript/components/MapView.js +817 -0
- package/javascript/components/MarkerView.js +87 -0
- package/javascript/components/NativeBridgeComponent.js +86 -0
- package/javascript/components/NativeUserLocation.js +41 -0
- package/javascript/components/PointAnnotation.js +216 -0
- package/javascript/components/RasterLayer.js +95 -0
- package/javascript/components/RasterSource.js +124 -0
- package/javascript/components/ShapeSource.js +357 -0
- package/javascript/components/Style.js +264 -0
- package/javascript/components/SymbolLayer.js +120 -0
- package/javascript/components/UserLocation.js +273 -0
- package/javascript/components/VectorSource.js +200 -0
- package/javascript/components/annotations/Annotation.js +122 -0
- package/javascript/index.js +153 -0
- package/javascript/modules/location/locationManager.js +101 -0
- package/javascript/modules/offline/OfflineCreatePackOptions.js +46 -0
- package/javascript/modules/offline/OfflinePack.js +40 -0
- package/javascript/modules/offline/offlineManager.js +378 -0
- package/javascript/modules/snapshot/SnapshotOptions.js +67 -0
- package/javascript/modules/snapshot/snapshotManager.js +62 -0
- package/javascript/utils/BridgeValue.js +81 -0
- package/javascript/utils/Logger.js +114 -0
- package/javascript/utils/animated/Animated.js +39 -0
- package/javascript/utils/animated/AnimatedCoordinatesArray.js +191 -0
- package/javascript/utils/animated/AnimatedExtractCoordinateFromArray.js +43 -0
- package/javascript/utils/animated/AnimatedPoint.js +126 -0
- package/javascript/utils/animated/AnimatedRouteCoordinatesArray.js +124 -0
- package/javascript/utils/animated/AnimatedShape.js +72 -0
- package/javascript/utils/deprecation.js +25 -0
- package/javascript/utils/filterUtils.js +7 -0
- package/javascript/utils/geoUtils.js +73 -0
- package/javascript/utils/index.js +113 -0
- package/javascript/utils/styleMap.js +1901 -0
- package/maplibre-react-native.podspec +79 -0
- package/package.json +120 -0
- package/plugin/build/withMapbox.d.ts +12 -0
- package/plugin/build/withMapbox.js +119 -0
- package/plugin/install.md +32 -0
- package/react-native.config.js +10 -0
- package/scripts/autogenHelpers/DocJSONBuilder.js +458 -0
- package/scripts/autogenHelpers/JSDocNodeTree.js +131 -0
- package/scripts/autogenHelpers/MarkdownBuilder.js +29 -0
- package/scripts/autogenHelpers/globals.js +507 -0
- package/scripts/autogenerate.js +374 -0
- package/scripts/download-style-spec.sh +15 -0
- package/scripts/templates/RCTMGLStyle.h.ejs +33 -0
- package/scripts/templates/RCTMGLStyle.m.ejs +97 -0
- package/scripts/templates/RCTMGLStyleFactory.java.ejs +107 -0
- package/scripts/templates/component.md.ejs +122 -0
- package/scripts/templates/index.d.ts.ejs +56 -0
- package/scripts/templates/styleMap.js.ejs +115 -0
- package/setup-jest.js +121 -0
- package/style-spec/v8.json +5798 -0
- package/tsconfig.json +65 -0
|
@@ -0,0 +1,625 @@
|
|
|
1
|
+
//
|
|
2
|
+
// RCTMGLMapViewManager.m
|
|
3
|
+
// RCTMGL
|
|
4
|
+
//
|
|
5
|
+
// Created by Nick Italiano on 8/23/17.
|
|
6
|
+
// Copyright © 2017 Mapbox Inc. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#import <React/RCTUIManager.h>
|
|
10
|
+
|
|
11
|
+
#import "RCTMGLMapViewManager.h"
|
|
12
|
+
#import "RCTMGLMapView.h"
|
|
13
|
+
#import "RCTMGLEventTypes.h"
|
|
14
|
+
#import "RCTMGLEvent.h"
|
|
15
|
+
#import "RCTMGLMapTouchEvent.h"
|
|
16
|
+
#import "RCTMGLUtils.h"
|
|
17
|
+
#import "CameraStop.h"
|
|
18
|
+
#import "CameraUpdateQueue.h"
|
|
19
|
+
#import "RCTMGLUserLocation.h"
|
|
20
|
+
#import "FilterParser.h"
|
|
21
|
+
#import "RCTMGLImages.h"
|
|
22
|
+
|
|
23
|
+
@interface RCTMGLMapViewManager() <MGLMapViewDelegate>
|
|
24
|
+
@end
|
|
25
|
+
|
|
26
|
+
@implementation RCTMGLMapViewManager
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
RCT_EXPORT_MODULE(RCTMGLMapView)
|
|
30
|
+
|
|
31
|
+
- (BOOL)requiresMainQueueSetup
|
|
32
|
+
{
|
|
33
|
+
return YES;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// prevents SDK from crashing and cluttering logs
|
|
37
|
+
// since we don't have access to the frame right away
|
|
38
|
+
- (CGRect)defaultFrame
|
|
39
|
+
{
|
|
40
|
+
return [[UIScreen mainScreen] bounds];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
- (UIView *)view
|
|
44
|
+
{
|
|
45
|
+
RCTMGLMapView *mapView = [[RCTMGLMapView alloc] initWithFrame:[self defaultFrame]];
|
|
46
|
+
mapView.delegate = self;
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
// setup map gesture recongizers
|
|
50
|
+
UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:nil];
|
|
51
|
+
doubleTap.numberOfTapsRequired = 2;
|
|
52
|
+
|
|
53
|
+
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapMap:)];
|
|
54
|
+
[tap requireGestureRecognizerToFail:doubleTap];
|
|
55
|
+
|
|
56
|
+
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(didLongPressMap:)];
|
|
57
|
+
|
|
58
|
+
// this allows the internal annotation gestures to take precedents over the map tap gesture
|
|
59
|
+
for (int i = 0; i < mapView.gestureRecognizers.count; i++) {
|
|
60
|
+
UIGestureRecognizer *gestuerReconginer = mapView.gestureRecognizers[i];
|
|
61
|
+
|
|
62
|
+
if ([gestuerReconginer isKindOfClass:[UITapGestureRecognizer class]]) {
|
|
63
|
+
[tap requireGestureRecognizerToFail:gestuerReconginer];
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
[mapView addGestureRecognizer:doubleTap];
|
|
68
|
+
[mapView addGestureRecognizer:tap];
|
|
69
|
+
[mapView addGestureRecognizer:longPress];
|
|
70
|
+
|
|
71
|
+
return mapView;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
#pragma mark - React View Props
|
|
75
|
+
|
|
76
|
+
RCT_REMAP_VIEW_PROPERTY(localizeLabels, reactLocalizeLabels, BOOL)
|
|
77
|
+
RCT_REMAP_VIEW_PROPERTY(scrollEnabled, reactScrollEnabled, BOOL)
|
|
78
|
+
RCT_REMAP_VIEW_PROPERTY(pitchEnabled, reactPitchEnabled, BOOL)
|
|
79
|
+
RCT_REMAP_VIEW_PROPERTY(rotateEnabled, reactRotateEnabled, BOOL)
|
|
80
|
+
RCT_REMAP_VIEW_PROPERTY(attributionEnabled, reactAttributionEnabled, BOOL)
|
|
81
|
+
RCT_REMAP_VIEW_PROPERTY(attributionPosition, reactAttributionPosition, NSDictionary)
|
|
82
|
+
RCT_REMAP_VIEW_PROPERTY(logoEnabled, reactLogoEnabled, BOOL)
|
|
83
|
+
RCT_REMAP_VIEW_PROPERTY(logoPosition, reactLogoPosition, NSDictionary)
|
|
84
|
+
RCT_REMAP_VIEW_PROPERTY(compassEnabled, reactCompassEnabled, BOOL)
|
|
85
|
+
RCT_REMAP_VIEW_PROPERTY(zoomEnabled, reactZoomEnabled, BOOL)
|
|
86
|
+
|
|
87
|
+
RCT_REMAP_VIEW_PROPERTY(compassViewPosition, reactCompassViewPosition, NSInteger *)
|
|
88
|
+
RCT_REMAP_VIEW_PROPERTY(compassViewMargins, reactCompassViewMargins, CGPoint)
|
|
89
|
+
|
|
90
|
+
RCT_REMAP_VIEW_PROPERTY(contentInset, reactContentInset, NSArray)
|
|
91
|
+
RCT_REMAP_VIEW_PROPERTY(styleURL, reactStyleURL, NSString)
|
|
92
|
+
RCT_REMAP_VIEW_PROPERTY(preferredFramesPerSecond, reactPreferredFramesPerSecond, NSInteger)
|
|
93
|
+
|
|
94
|
+
RCT_EXPORT_VIEW_PROPERTY(tintColor, UIColor)
|
|
95
|
+
|
|
96
|
+
RCT_EXPORT_VIEW_PROPERTY(onPress, RCTBubblingEventBlock)
|
|
97
|
+
RCT_EXPORT_VIEW_PROPERTY(onLongPress, RCTBubblingEventBlock)
|
|
98
|
+
RCT_EXPORT_VIEW_PROPERTY(onMapChange, RCTBubblingEventBlock)
|
|
99
|
+
|
|
100
|
+
#pragma mark - React Methods
|
|
101
|
+
|
|
102
|
+
RCT_EXPORT_METHOD(getPointInView:(nonnull NSNumber*)reactTag
|
|
103
|
+
atCoordinate:(NSArray<NSNumber*>*)coordinate
|
|
104
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
105
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
106
|
+
{
|
|
107
|
+
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber*, UIView*> *viewRegistry) {
|
|
108
|
+
id view = viewRegistry[reactTag];
|
|
109
|
+
|
|
110
|
+
if (![view isKindOfClass:[RCTMGLMapView class]]) {
|
|
111
|
+
RCTLogError(@"Invalid react tag, could not find RCTMGLMapView");
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
RCTMGLMapView *reactMapView = (RCTMGLMapView*)view;
|
|
116
|
+
|
|
117
|
+
CGPoint pointInView = [reactMapView convertCoordinate:CLLocationCoordinate2DMake([coordinate[1] doubleValue], [coordinate[0] doubleValue])
|
|
118
|
+
toPointToView:reactMapView];
|
|
119
|
+
|
|
120
|
+
resolve(@{ @"pointInView": @[@(pointInView.x), @(pointInView.y)] });
|
|
121
|
+
}];
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
RCT_EXPORT_METHOD(getCoordinateFromView:(nonnull NSNumber*)reactTag
|
|
125
|
+
atPoint:(CGPoint)point
|
|
126
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
127
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
128
|
+
{
|
|
129
|
+
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber*, UIView*> *viewRegistry) {
|
|
130
|
+
id view = viewRegistry[reactTag];
|
|
131
|
+
|
|
132
|
+
if (![view isKindOfClass:[RCTMGLMapView class]]) {
|
|
133
|
+
RCTLogError(@"Invalid react tag, could not find RCTMGLMapView");
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
RCTMGLMapView *reactMapView = (RCTMGLMapView*)view;
|
|
138
|
+
|
|
139
|
+
CLLocationCoordinate2D coordinate = [reactMapView convertPoint:point
|
|
140
|
+
toCoordinateFromView:reactMapView];
|
|
141
|
+
|
|
142
|
+
resolve(@{ @"coordinateFromView": @[@(coordinate.longitude), @(coordinate.latitude)] });
|
|
143
|
+
}];
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
RCT_EXPORT_METHOD(takeSnap:(nonnull NSNumber*)reactTag
|
|
148
|
+
writeToDisk:(BOOL)writeToDisk
|
|
149
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
150
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
151
|
+
{
|
|
152
|
+
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber*, UIView*> *viewRegistry) {
|
|
153
|
+
id view = viewRegistry[reactTag];
|
|
154
|
+
|
|
155
|
+
if (![view isKindOfClass:[RCTMGLMapView class]]) {
|
|
156
|
+
RCTLogError(@"Invalid react tag, could not find RCTMGLMapView");
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
RCTMGLMapView *reactMapView = (RCTMGLMapView*)view;
|
|
161
|
+
NSString *uri = [reactMapView takeSnap:writeToDisk];
|
|
162
|
+
resolve(@{ @"uri": uri });
|
|
163
|
+
}];
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
RCT_EXPORT_METHOD(getVisibleBounds:(nonnull NSNumber*)reactTag
|
|
167
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
168
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
169
|
+
{
|
|
170
|
+
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber*, UIView*> *viewRegistry) {
|
|
171
|
+
id view = viewRegistry[reactTag];
|
|
172
|
+
|
|
173
|
+
if (![view isKindOfClass:[RCTMGLMapView class]]) {
|
|
174
|
+
RCTLogError(@"Invalid react tag, could not find RCTMGLMapView");
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
RCTMGLMapView *reactMapView = (RCTMGLMapView*)view;
|
|
179
|
+
resolve(@{ @"visibleBounds": [RCTMGLUtils fromCoordinateBounds:reactMapView.visibleCoordinateBounds] });
|
|
180
|
+
}];
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
RCT_EXPORT_METHOD(getZoom:(nonnull NSNumber*)reactTag
|
|
184
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
185
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
186
|
+
{
|
|
187
|
+
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber*, UIView*> *viewRegistry) {
|
|
188
|
+
id view = viewRegistry[reactTag];
|
|
189
|
+
|
|
190
|
+
if (![view isKindOfClass:[RCTMGLMapView class]]) {
|
|
191
|
+
RCTLogError(@"Invalid react tag, could not find RCTMGLMapView");
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
RCTMGLMapView *reactMapView = (RCTMGLMapView*)view;
|
|
196
|
+
resolve(@{ @"zoom": @(reactMapView.zoomLevel) });
|
|
197
|
+
}];
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
RCT_EXPORT_METHOD(getCenter:(nonnull NSNumber*)reactTag
|
|
201
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
202
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
203
|
+
{
|
|
204
|
+
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber*, UIView*> *viewRegistry) {
|
|
205
|
+
id view = viewRegistry[reactTag];
|
|
206
|
+
|
|
207
|
+
if (![view isKindOfClass:[RCTMGLMapView class]]) {
|
|
208
|
+
RCTLogError(@"Invalid react tag, could not find RCTMGLMapView");
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
RCTMGLMapView *reactMapView = (RCTMGLMapView*)view;
|
|
213
|
+
resolve(@{ @"center": @[@(reactMapView.centerCoordinate.longitude), @(reactMapView.centerCoordinate.latitude)]});
|
|
214
|
+
}];
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
RCT_EXPORT_METHOD(queryRenderedFeaturesAtPoint:(nonnull NSNumber*)reactTag
|
|
218
|
+
atPoint:(NSArray<NSNumber*>*)point
|
|
219
|
+
withFilter:(NSArray*)filter
|
|
220
|
+
withLayerIDs:(NSArray<NSString*>*)layerIDs
|
|
221
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
222
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
223
|
+
{
|
|
224
|
+
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber*, UIView*> *viewRegistry) {
|
|
225
|
+
id view = viewRegistry[reactTag];
|
|
226
|
+
|
|
227
|
+
if (![view isKindOfClass:[RCTMGLMapView class]]) {
|
|
228
|
+
RCTLogError(@"Invalid react tag, could not find RCTMGLMapView");
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
NSSet *layerIDSet = nil;
|
|
233
|
+
if (layerIDs != nil && layerIDs.count > 0) {
|
|
234
|
+
layerIDSet = [NSSet setWithArray:layerIDs];
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
RCTMGLMapView *reactMapView = (RCTMGLMapView*)view;
|
|
238
|
+
NSPredicate* predicate = [FilterParser parse:filter];
|
|
239
|
+
NSArray<id<MGLFeature>> *shapes = [reactMapView visibleFeaturesAtPoint:CGPointMake([point[0] floatValue], [point[1] floatValue])
|
|
240
|
+
inStyleLayersWithIdentifiers:layerIDSet
|
|
241
|
+
predicate:predicate];
|
|
242
|
+
|
|
243
|
+
NSMutableArray<NSDictionary*> *features = [[NSMutableArray alloc] init];
|
|
244
|
+
for (int i = 0; i < shapes.count; i++) {
|
|
245
|
+
[features addObject:shapes[i].geoJSONDictionary];
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
resolve(@{
|
|
249
|
+
@"data": @{ @"type": @"FeatureCollection", @"features": features }
|
|
250
|
+
});
|
|
251
|
+
}];
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
RCT_EXPORT_METHOD(queryRenderedFeaturesInRect:(nonnull NSNumber*)reactTag
|
|
255
|
+
withBBox:(NSArray<NSNumber*>*)bbox
|
|
256
|
+
withFilter:(NSArray*)filter
|
|
257
|
+
withLayerIDs:(NSArray<NSString*>*)layerIDs
|
|
258
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
259
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
260
|
+
{
|
|
261
|
+
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber*, UIView*> *viewRegistry) {
|
|
262
|
+
id view = viewRegistry[reactTag];
|
|
263
|
+
|
|
264
|
+
if (![view isKindOfClass:[RCTMGLMapView class]]) {
|
|
265
|
+
RCTLogError(@"Invalid react tag, could not find RCTMGLMapView");
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
RCTMGLMapView *reactMapView = (RCTMGLMapView*)view;
|
|
270
|
+
|
|
271
|
+
// bbox[top, right, bottom, left]
|
|
272
|
+
CGFloat width = [bbox[1] floatValue] - [bbox[3] floatValue];
|
|
273
|
+
CGFloat height = [bbox[0] floatValue] - [bbox[2] floatValue];
|
|
274
|
+
CGRect rect = CGRectMake([bbox[3] floatValue], [bbox[2] floatValue], width, height);
|
|
275
|
+
|
|
276
|
+
NSSet *layerIDSet = nil;
|
|
277
|
+
if (layerIDs != nil && layerIDs.count > 0) {
|
|
278
|
+
layerIDSet = [NSSet setWithArray:layerIDs];
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
NSPredicate* predicate = [FilterParser parse:filter];
|
|
282
|
+
NSArray<id<MGLFeature>> *shapes = [reactMapView visibleFeaturesInRect:rect
|
|
283
|
+
inStyleLayersWithIdentifiers:layerIDSet
|
|
284
|
+
predicate:predicate];
|
|
285
|
+
|
|
286
|
+
NSArray<NSDictionary*>* features = [self featuresToJSON:shapes];
|
|
287
|
+
|
|
288
|
+
resolve(@{ @"data": @{ @"type": @"FeatureCollection", @"features": features }});
|
|
289
|
+
}];
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
RCT_EXPORT_METHOD(showAttribution:(nonnull NSNumber *)reactTag
|
|
293
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
294
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
295
|
+
{
|
|
296
|
+
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber*, UIView*> *viewRegistry) {
|
|
297
|
+
id view = viewRegistry[reactTag];
|
|
298
|
+
|
|
299
|
+
if (![view isKindOfClass:[RCTMGLMapView class]]) {
|
|
300
|
+
RCTLogError(@"Invalid react tag, could not find RCTMGLMapView");
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
__weak RCTMGLMapView *reactMapView = (RCTMGLMapView*)view;
|
|
305
|
+
[reactMapView showAttribution:reactMapView];
|
|
306
|
+
resolve(nil);
|
|
307
|
+
}];
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
RCT_EXPORT_METHOD(setSourceVisibility:(nonnull NSNumber *)reactTag
|
|
311
|
+
visible:(BOOL)visible
|
|
312
|
+
sourceId:(nonnull NSString*)sourceId
|
|
313
|
+
sourceLayerId:(nullable NSString*)sourceLayerId
|
|
314
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
315
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
316
|
+
{
|
|
317
|
+
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber*, UIView*> *viewRegistry) {
|
|
318
|
+
id view = viewRegistry[reactTag];
|
|
319
|
+
|
|
320
|
+
if (![view isKindOfClass:[RCTMGLMapView class]]) {
|
|
321
|
+
RCTLogError(@"Invalid react tag, could not find RCTMGLMapView");
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
__weak RCTMGLMapView *reactMapView = (RCTMGLMapView*)view;
|
|
326
|
+
[reactMapView setSourceVisibility:visible sourceId:sourceId sourceLayerId:sourceLayerId];
|
|
327
|
+
resolve(nil);
|
|
328
|
+
}];
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
#pragma mark - UIGestureRecognizers
|
|
332
|
+
|
|
333
|
+
- (void)didTapMap:(UITapGestureRecognizer *)recognizer
|
|
334
|
+
{
|
|
335
|
+
RCTMGLMapView *mapView = (RCTMGLMapView*)recognizer.view;
|
|
336
|
+
CGPoint screenPoint = [recognizer locationInView:mapView];
|
|
337
|
+
NSArray<RCTMGLSource *> *touchableSources = [mapView getAllTouchableSources];
|
|
338
|
+
|
|
339
|
+
NSMutableDictionary<NSString *, NSArray<id<MGLFeature>>* > *hits = [[NSMutableDictionary alloc] init];
|
|
340
|
+
NSMutableArray<RCTMGLSource *> *hitTouchableSources = [[NSMutableArray alloc] init];
|
|
341
|
+
for (RCTMGLSource *touchableSource in touchableSources) {
|
|
342
|
+
NSDictionary<NSString *, NSNumber *> *hitbox = touchableSource.hitbox;
|
|
343
|
+
float halfWidth = [hitbox[@"width"] floatValue] / 2.f;
|
|
344
|
+
float halfHeight = [hitbox[@"height"] floatValue] / 2.f;
|
|
345
|
+
|
|
346
|
+
CGFloat top = screenPoint.y - halfHeight;
|
|
347
|
+
CGFloat left = screenPoint.x - halfWidth;
|
|
348
|
+
CGRect hitboxRect = CGRectMake(left, top, [hitbox[@"width"] floatValue], [hitbox[@"height"] floatValue]);
|
|
349
|
+
|
|
350
|
+
NSArray<id<MGLFeature>> *features = [mapView visibleFeaturesInRect:hitboxRect
|
|
351
|
+
inStyleLayersWithIdentifiers:[NSSet setWithArray:[touchableSource getLayerIDs]]
|
|
352
|
+
predicate:nil];
|
|
353
|
+
|
|
354
|
+
if (features.count > 0) {
|
|
355
|
+
hits[touchableSource.id] = features;
|
|
356
|
+
[hitTouchableSources addObject:touchableSource];
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
if (hits.count > 0) {
|
|
361
|
+
RCTMGLSource *source = [mapView getTouchableSourceWithHighestZIndex:hitTouchableSources];
|
|
362
|
+
if (source != nil && source.hasPressListener) {
|
|
363
|
+
NSArray* geoJSONDicts = [self featuresToJSON: hits[source.id]];
|
|
364
|
+
|
|
365
|
+
NSString *eventType = RCT_MAPBOX_VECTOR_SOURCE_LAYER_PRESS;
|
|
366
|
+
if ([source isKindOfClass:[RCTMGLShapeSource class]]) {
|
|
367
|
+
eventType = RCT_MAPBOX_SHAPE_SOURCE_LAYER_PRESS;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
CLLocationCoordinate2D coordinate = [mapView convertPoint:screenPoint
|
|
371
|
+
toCoordinateFromView:mapView];
|
|
372
|
+
|
|
373
|
+
RCTMGLEvent *event = [RCTMGLEvent makeEvent:eventType withPayload: @{
|
|
374
|
+
@"features": geoJSONDicts,
|
|
375
|
+
@"point": @{
|
|
376
|
+
@"x": [NSNumber numberWithDouble: screenPoint.x],
|
|
377
|
+
@"y":[NSNumber numberWithDouble: screenPoint.y]
|
|
378
|
+
},
|
|
379
|
+
@"coordinates": @{
|
|
380
|
+
@"latitude": [NSNumber numberWithDouble: coordinate.latitude],
|
|
381
|
+
@"longitude": [NSNumber numberWithDouble: coordinate.longitude]
|
|
382
|
+
}
|
|
383
|
+
}];
|
|
384
|
+
[self fireEvent:event withCallback:source.onPress];
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
if (mapView.onPress == nil) {
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
RCTMGLMapTouchEvent *event = [RCTMGLMapTouchEvent makeTapEvent:mapView withPoint:screenPoint];
|
|
394
|
+
[self fireEvent:event withCallback:mapView.onPress];
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
- (void)didLongPressMap:(UILongPressGestureRecognizer *)recognizer
|
|
398
|
+
{
|
|
399
|
+
RCTMGLMapView *mapView = (RCTMGLMapView*)recognizer.view;
|
|
400
|
+
|
|
401
|
+
if (mapView == nil || mapView.onPress == nil || recognizer.state != UIGestureRecognizerStateBegan) {
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
RCTMGLMapTouchEvent *event = [RCTMGLMapTouchEvent makeLongPressEvent:mapView withPoint:[recognizer locationInView:mapView]];
|
|
406
|
+
[self fireEvent:event withCallback:mapView.onLongPress];
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
#pragma mark - MGLMapViewDelegate
|
|
410
|
+
|
|
411
|
+
- (MGLAnnotationView *)mapView:(MGLMapView *)mapView viewForAnnotation:(id<MGLAnnotation>)annotation
|
|
412
|
+
{
|
|
413
|
+
if ([annotation isKindOfClass:[MGLUserLocation class]] && mapView.userLocation != nil) {
|
|
414
|
+
RCTMGLMapView* reactMapView = ((RCTMGLMapView *) mapView);
|
|
415
|
+
if (reactMapView.useNativeUserLocationAnnotationView) {
|
|
416
|
+
return nil;
|
|
417
|
+
}
|
|
418
|
+
return [[RCTMGLUserLocation sharedInstance] hiddenUserAnnotation];
|
|
419
|
+
}
|
|
420
|
+
else if ([annotation isKindOfClass:[RCTMGLPointAnnotation class]]) {
|
|
421
|
+
RCTMGLPointAnnotation *rctAnnotation = (RCTMGLPointAnnotation *)annotation;
|
|
422
|
+
return [rctAnnotation getAnnotationView];
|
|
423
|
+
}
|
|
424
|
+
return nil;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
- (void)mapView:(MGLMapView *)mapView didChangeUserTrackingMode:(MGLUserTrackingMode)mode animated:(BOOL)animated
|
|
428
|
+
{
|
|
429
|
+
RCTMGLMapView* reactMapView = ((RCTMGLMapView *) mapView);
|
|
430
|
+
[reactMapView didChangeUserTrackingMode:mode animated:animated];
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
- (void)mapView:(MGLMapView *)mapView didSelectAnnotation:(nonnull id<MGLAnnotation>)annotation
|
|
434
|
+
{
|
|
435
|
+
if ([annotation isKindOfClass:[RCTMGLPointAnnotation class]]) {
|
|
436
|
+
RCTMGLPointAnnotation *rctAnnotation = (RCTMGLPointAnnotation *)annotation;
|
|
437
|
+
|
|
438
|
+
if (rctAnnotation.onSelected != nil) {
|
|
439
|
+
RCTMGLMapTouchEvent *event = [RCTMGLMapTouchEvent makeAnnotationTapEvent:rctAnnotation];
|
|
440
|
+
rctAnnotation.onSelected([event toJSON]);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
- (void)mapView:(MGLMapView *)mapView didDeselectAnnotation:(nonnull id<MGLAnnotation>)annotation
|
|
446
|
+
{
|
|
447
|
+
if ([annotation isKindOfClass:[RCTMGLPointAnnotation class]]) {
|
|
448
|
+
RCTMGLPointAnnotation *rctAnnotation = (RCTMGLPointAnnotation *)annotation;
|
|
449
|
+
|
|
450
|
+
if (rctAnnotation.onDeselected != nil) {
|
|
451
|
+
rctAnnotation.onDeselected(nil);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
- (BOOL)mapView:(MGLMapView *)mapView annotationCanShowCallout:(id<MGLAnnotation>)annotation {
|
|
457
|
+
if ([annotation isKindOfClass:[RCTMGLPointAnnotation class]]) {
|
|
458
|
+
RCTMGLPointAnnotation *rctAnnotation = (RCTMGLPointAnnotation *)annotation;
|
|
459
|
+
return rctAnnotation.calloutView != nil;
|
|
460
|
+
}
|
|
461
|
+
return NO;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
- (UIView<MGLCalloutView> *)mapView:(MGLMapView *)mapView calloutViewForAnnotation:(id<MGLAnnotation>)annotation
|
|
465
|
+
{
|
|
466
|
+
if ([annotation isKindOfClass:[RCTMGLPointAnnotation class]]) {
|
|
467
|
+
RCTMGLPointAnnotation *rctAnnotation = (RCTMGLPointAnnotation *)annotation;
|
|
468
|
+
return rctAnnotation.calloutView;
|
|
469
|
+
}
|
|
470
|
+
return nil;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
- (BOOL)mapView:(MGLMapView *)mapView shouldChangeFromCamera:(MGLMapCamera *)oldCamera toCamera:(MGLMapCamera *)newCamera
|
|
474
|
+
{
|
|
475
|
+
RCTMGLMapView* reactMapView = ((RCTMGLMapView *) mapView);
|
|
476
|
+
return MGLCoordinateBoundsIsEmpty(reactMapView.maxBounds) || MGLCoordinateInCoordinateBounds(newCamera.centerCoordinate, reactMapView.maxBounds);
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
- (void)mapView:(MGLMapView *)mapView regionWillChangeWithReason:(MGLCameraChangeReason)reason animated:(BOOL)animated
|
|
480
|
+
{
|
|
481
|
+
((RCTMGLMapView *) mapView).isUserInteraction = (BOOL)(reason & ~MGLCameraChangeReasonProgrammatic);
|
|
482
|
+
NSDictionary *payload = [self _makeRegionPayload:mapView animated:animated];
|
|
483
|
+
[self reactMapDidChange:mapView eventType:RCT_MAPBOX_REGION_WILL_CHANGE_EVENT andPayload:payload];
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
- (void)mapViewRegionIsChanging:(MGLMapView *)mapView
|
|
487
|
+
{
|
|
488
|
+
NSDictionary *payload = [self _makeRegionPayload:mapView animated:false];
|
|
489
|
+
[self reactMapDidChange:mapView eventType:RCT_MAPBOX_REGION_IS_CHANGING andPayload:payload];
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
- (void)mapView:(MGLMapView *)mapView regionDidChangeWithReason:(MGLCameraChangeReason)reason animated:(BOOL)animated
|
|
493
|
+
{
|
|
494
|
+
if (((reason & MGLCameraChangeReasonTransitionCancelled) == MGLCameraChangeReasonTransitionCancelled)
|
|
495
|
+
&& ((reason & MGLCameraChangeReasonGesturePan) != MGLCameraChangeReasonGesturePan)) return;
|
|
496
|
+
|
|
497
|
+
((RCTMGLMapView *) mapView).isUserInteraction = (BOOL)(reason & ~MGLCameraChangeReasonProgrammatic);
|
|
498
|
+
|
|
499
|
+
NSDictionary *payload = [self _makeRegionPayload:mapView animated:animated];
|
|
500
|
+
[self reactMapDidChange:mapView eventType:RCT_MAPBOX_REGION_DID_CHANGE andPayload:payload];
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
- (void)mapViewWillStartLoadingMap:(MGLMapView *)mapView
|
|
504
|
+
{
|
|
505
|
+
[self reactMapDidChange:mapView eventType:RCT_MAPBOX_WILL_START_LOADING_MAP];
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
- (void)mapViewDidFinishLoadingMap:(MGLMapView *)mapView
|
|
509
|
+
{
|
|
510
|
+
[self reactMapDidChange:mapView eventType:RCT_MAPBOX_DID_FINISH_LOADING_MAP];
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
- (void)mapViewDidFailLoadingMap:(MGLMapView *)mapView withError:(NSError *)error
|
|
514
|
+
{
|
|
515
|
+
NSLog(@"Failed loading map %@", error);
|
|
516
|
+
[self reactMapDidChange:mapView eventType:RCT_MAPBOX_DID_FAIL_LOADING_MAP];
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
- (void)mapViewWillStartRenderingFrame:(MGLMapView *)mapView
|
|
520
|
+
{
|
|
521
|
+
[self reactMapDidChange:mapView eventType:RCT_MAPBOX_WILL_START_RENDERING_FRAME];
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
- (void)mapViewDidFinishRenderingFrame:(MGLMapView *)mapView fullyRendered:(BOOL)fullyRendered
|
|
525
|
+
{
|
|
526
|
+
if (fullyRendered) {
|
|
527
|
+
[self reactMapDidChange:mapView eventType:RCT_MAPBOX_DID_FINISH_RENDERING_FRAME_FULLY];
|
|
528
|
+
} else {
|
|
529
|
+
[self reactMapDidChange:mapView eventType:RCT_MAPBOX_DID_FINSIH_RENDERING_FRAME];
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
- (void)mapViewWillStartRenderingMap:(MGLMapView *)mapView
|
|
534
|
+
{
|
|
535
|
+
[self reactMapDidChange:mapView eventType:RCT_MAPBOX_WILL_START_RENDERING_MAP];
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
- (void)mapViewDidFinishRenderingMap:(MGLMapView *)mapView fullyRendered:(BOOL)fullyRendered
|
|
539
|
+
{
|
|
540
|
+
if (fullyRendered) {
|
|
541
|
+
[self reactMapDidChange:mapView eventType:RCT_MAPBOX_DID_FINISH_RENDERING_MAP_FULLY];
|
|
542
|
+
} else {
|
|
543
|
+
[self reactMapDidChange:mapView eventType:RCT_MAPBOX_DID_FINISH_RENDERING_MAP];
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
- (void)mapView:(MGLMapView *)mapView didFinishLoadingStyle:(MGLStyle *)style
|
|
548
|
+
{
|
|
549
|
+
RCTMGLMapView *reactMapView = (RCTMGLMapView*)mapView;
|
|
550
|
+
if(reactMapView.reactLocalizeLabels == true) {
|
|
551
|
+
[style localizeLabelsIntoLocale:nil];
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
for (int i = 0; i < reactMapView.sources.count; i++) {
|
|
555
|
+
RCTMGLSource *source = reactMapView.sources[i];
|
|
556
|
+
source.map = reactMapView;
|
|
557
|
+
}
|
|
558
|
+
for (int i = 0; i < reactMapView.layers.count; i++) {
|
|
559
|
+
RCTMGLLayer *layer = reactMapView.layers[i];
|
|
560
|
+
layer.map = reactMapView;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
if (reactMapView.light != nil) {
|
|
564
|
+
reactMapView.light.map = reactMapView;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
[reactMapView notifyStyleLoaded];
|
|
568
|
+
[self reactMapDidChange:reactMapView eventType:RCT_MAPBOX_DID_FINISH_LOADING_STYLE];
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
-(UIImage *)mapView:(MGLMapView *)mapView didFailToLoadImage:(NSString *)imageName
|
|
572
|
+
{
|
|
573
|
+
RCTMGLMapView* reactMapView = ((RCTMGLMapView *) mapView);
|
|
574
|
+
NSArray<RCTMGLImages *> *allImages = [reactMapView getAllImages];
|
|
575
|
+
for (RCTMGLImages *images in allImages) {
|
|
576
|
+
if([images addMissingImageToStyle:imageName]) {
|
|
577
|
+
// The image was added inside addMissingImageToStyle so we can return nil
|
|
578
|
+
return nil;
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
for (RCTMGLImages *images in allImages) {
|
|
583
|
+
[images sendImageMissingEvent:imageName];
|
|
584
|
+
}
|
|
585
|
+
return nil;
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
- (void)reactMapDidChange:(MGLMapView*)mapView eventType:(NSString*)type
|
|
589
|
+
{
|
|
590
|
+
[self reactMapDidChange:mapView eventType:type andPayload:nil];
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
- (void)reactMapDidChange:(MGLMapView*)mapView eventType:(NSString*)type andPayload:(NSDictionary*)payload
|
|
594
|
+
{
|
|
595
|
+
RCTMGLMapView *reactMapView = (RCTMGLMapView*)mapView;
|
|
596
|
+
RCTMGLEvent *event = [RCTMGLEvent makeEvent:type withPayload:payload];
|
|
597
|
+
[self fireEvent:event withCallback:reactMapView.onMapChange];
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
- (NSDictionary*)_makeRegionPayload:(MGLMapView*)mapView animated:(BOOL)animated
|
|
601
|
+
{
|
|
602
|
+
RCTMGLMapView *rctMapView = (RCTMGLMapView *)mapView;
|
|
603
|
+
MGLPointFeature *feature = [[MGLPointFeature alloc] init];
|
|
604
|
+
feature.coordinate = mapView.centerCoordinate;
|
|
605
|
+
feature.attributes = @{
|
|
606
|
+
@"zoomLevel": [NSNumber numberWithDouble:mapView.zoomLevel],
|
|
607
|
+
@"heading": [NSNumber numberWithDouble:mapView.camera.heading],
|
|
608
|
+
@"pitch": [NSNumber numberWithDouble:mapView.camera.pitch],
|
|
609
|
+
@"animated": [NSNumber numberWithBool:animated],
|
|
610
|
+
@"isUserInteraction": @(rctMapView.isUserInteraction),
|
|
611
|
+
@"visibleBounds": [RCTMGLUtils fromCoordinateBounds:mapView.visibleCoordinateBounds]
|
|
612
|
+
};
|
|
613
|
+
return feature.geoJSONDictionary;
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
- (NSArray<NSDictionary*> *) featuresToJSON:(NSArray<id<MGLFeature>> *) features
|
|
617
|
+
{
|
|
618
|
+
NSMutableArray<NSDictionary*> *json = [[NSMutableArray alloc] init];
|
|
619
|
+
for(id<MGLFeature> feature in features) {
|
|
620
|
+
[json addObject:feature.geoJSONDictionary];
|
|
621
|
+
}
|
|
622
|
+
return json;
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
@end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//
|
|
2
|
+
// RCTMGLCamera.h
|
|
3
|
+
// RCTMGL
|
|
4
|
+
//
|
|
5
|
+
// Created by Nick Italiano on 6/22/18.
|
|
6
|
+
// Copyright © 2018 Mapbox Inc. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
#import <React/RCTComponent.h>
|
|
9
|
+
#import <UIKit/UIKit.h>
|
|
10
|
+
|
|
11
|
+
@class RCTMGLMapView;
|
|
12
|
+
|
|
13
|
+
@interface RCTMGLNativeUserLocation : UIView
|
|
14
|
+
|
|
15
|
+
@property (nonatomic, strong) RCTMGLMapView *map;
|
|
16
|
+
@property (nonatomic) BOOL iosShowsUserHeadingIndicator;
|
|
17
|
+
|
|
18
|
+
@end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
//
|
|
2
|
+
// RCTMGLCamera.m
|
|
3
|
+
// RCTMGL
|
|
4
|
+
//
|
|
5
|
+
// Created by Nick Italiano on 6/22/18.
|
|
6
|
+
// Copyright © 2018 Mapbox Inc. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#import "RCTMGLNativeUserLocation.h"
|
|
10
|
+
#import "CameraStop.h"
|
|
11
|
+
#import "CameraUpdateQueue.h"
|
|
12
|
+
#import "RCTMGLLocation.h"
|
|
13
|
+
#import "RCTMGLUtils.h"
|
|
14
|
+
#import "RCTMGLLocationManager.h"
|
|
15
|
+
#import "RCTMGLEvent.h"
|
|
16
|
+
#import "RCTMGLEventTypes.h"
|
|
17
|
+
#import "CameraMode.h"
|
|
18
|
+
|
|
19
|
+
@implementation RCTMGLNativeUserLocation
|
|
20
|
+
{
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
- (void)setMap:(RCTMGLMapView *)map
|
|
25
|
+
{
|
|
26
|
+
if (map == nil && _map) {
|
|
27
|
+
_map.useNativeUserLocationAnnotationView = NO;
|
|
28
|
+
_map.showsUserLocation = NO;
|
|
29
|
+
_map.showsUserHeadingIndicator = NO;
|
|
30
|
+
} else if (map) {
|
|
31
|
+
map.useNativeUserLocationAnnotationView = YES;
|
|
32
|
+
// Toggle off/on showsUserLocation in order for Mapbox to invalidate the
|
|
33
|
+
// current (hidden) user location annotation view. See also: HiddenUserLocationAnnotationView
|
|
34
|
+
map.showsUserLocation = NO;
|
|
35
|
+
map.showsUserLocation = YES;
|
|
36
|
+
map.showsUserHeadingIndicator = self.iosShowsUserHeadingIndicator;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
_map = map;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
- (void)setIosShowsUserHeadingIndicator:(BOOL)iosShowsUserHeadingIndicator {
|
|
43
|
+
_iosShowsUserHeadingIndicator = iosShowsUserHeadingIndicator;
|
|
44
|
+
if (_map) {
|
|
45
|
+
_map.showsUserHeadingIndicator = iosShowsUserHeadingIndicator;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@end
|