diff --git a/android/src/main/java/com/rnmapbox/rnmbx/components/styles/sources/RNMBXShapeSource.kt b/android/src/main/java/com/rnmapbox/rnmbx/components/styles/sources/RNMBXShapeSource.kt index 363ab8ba39..3bdd19b9d8 100644 --- a/android/src/main/java/com/rnmapbox/rnmbx/components/styles/sources/RNMBXShapeSource.kt +++ b/android/src/main/java/com/rnmapbox/rnmbx/components/styles/sources/RNMBXShapeSource.kt @@ -34,6 +34,7 @@ class RNMBXShapeSource(context: Context, private val mManager: RNMBXShapeSourceM private var mClusterMaxZoom: Long? = null private var mClusterProperties: HashMap? = null private var mMaxZoom: Long? = null + private var mMinZoom: Long? = null private var mBuffer: Long? = null private var mTolerance: Double? = null private var mLineMetrics: Boolean? = null @@ -158,6 +159,10 @@ class RNMBXShapeSource(context: Context, private val mManager: RNMBXShapeSourceM mMaxZoom = maxZoom } + fun setMinZoom(minZoom: Long) { + mMinZoom = minZoom + } + fun setBuffer(buffer: Long) { mBuffer = buffer } @@ -190,6 +195,9 @@ class RNMBXShapeSource(context: Context, private val mManager: RNMBXShapeSourceM if (mMaxZoom != null) { builder.maxzoom(mMaxZoom!!) } + if (mMinZoom != null) { + builder.minzoom(mMinZoom!!) + } if (mBuffer != null) { builder.buffer(mBuffer!!) } diff --git a/android/src/main/java/com/rnmapbox/rnmbx/components/styles/sources/RNMBXShapeSourceManager.kt b/android/src/main/java/com/rnmapbox/rnmbx/components/styles/sources/RNMBXShapeSourceManager.kt index 6b5007296e..139f8828d4 100644 --- a/android/src/main/java/com/rnmapbox/rnmbx/components/styles/sources/RNMBXShapeSourceManager.kt +++ b/android/src/main/java/com/rnmapbox/rnmbx/components/styles/sources/RNMBXShapeSourceManager.kt @@ -154,6 +154,11 @@ class RNMBXShapeSourceManager(private val mContext: ReactApplicationContext, val source.setMaxZoom(maxZoom.asInt().toLong()) } + @ReactProp(name = "minZoomLevel") + override fun setMinZoomLevel(source: RNMBXShapeSource, minZoom: Dynamic) { + source.setMinZoom(minZoom.asInt().toLong()) + } + @ReactProp(name = "buffer") override fun setBuffer(source: RNMBXShapeSource, buffer: Dynamic) { source.setBuffer(buffer.asInt().toLong()) diff --git a/docs/ShapeSource.md b/docs/ShapeSource.md index d18cc774b5..3759f005e5 100644 --- a/docs/ShapeSource.md +++ b/docs/ShapeSource.md @@ -115,6 +115,16 @@ The default value is 18. +### minZoomLevel + +```tsx +number +``` +Specifies the minimum zoom level at which to create vector tiles. +The default value is 0. + + + ### buffer ```tsx diff --git a/docs/docs.json b/docs/docs.json index 399a40f854..0046c44080 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -7679,6 +7679,13 @@ "default": "none", "description": "Specifies the maximum zoom level at which to create vector tiles.\nA greater value produces greater detail at high zoom levels.\nThe default value is 18." }, + { + "name": "minZoomLevel", + "required": false, + "type": "number", + "default": "none", + "description": "Specifies the minimum zoom level at which to create vector tiles.\nThe default value is 0." + }, { "name": "buffer", "required": false, diff --git a/ios/RNMBX/RNMBXShapeSource.swift b/ios/RNMBX/RNMBXShapeSource.swift index b680f8c602..5f6a0c066b 100644 --- a/ios/RNMBX/RNMBXShapeSource.swift +++ b/ios/RNMBX/RNMBXShapeSource.swift @@ -85,6 +85,7 @@ public class RNMBXShapeSource : RNMBXSource { @objc public var clusterProperties : [String: [Any]]?; @objc public var maxZoomLevel : NSNumber? + @objc public var minZoomLevel : NSNumber? @objc public var buffer : NSNumber? @objc public var tolerance : NSNumber? @objc public var lineMetrics : Bool = false @@ -136,6 +137,10 @@ public class RNMBXShapeSource : RNMBXSource { result.maxzoom = maxZoomLevel.doubleValue } + if let minZoomLevel = minZoomLevel { + result.minzoom = minZoomLevel.doubleValue + } + if let buffer = buffer { result.buffer = buffer.doubleValue } diff --git a/ios/RNMBX/RNMBXShapeSourceComponentView.mm b/ios/RNMBX/RNMBXShapeSourceComponentView.mm index 7dd1e39064..d6b8a1b6fd 100644 --- a/ios/RNMBX/RNMBXShapeSourceComponentView.mm +++ b/ios/RNMBX/RNMBXShapeSourceComponentView.mm @@ -102,6 +102,7 @@ - (void)updateProps:(const Props::Shared &)props oldProps:(const Props::Shared & RNMBX_OPTIONAL_PROP_NSNumber(clusterMaxZoomLevel) RNMBX_OPTIONAL_PROP_NSDictionary(clusterProperties) RNMBX_OPTIONAL_PROP_NSNumber(maxZoomLevel) + RNMBX_OPTIONAL_PROP_NSNumber(minZoomLevel) RNMBX_OPTIONAL_PROP_NSNumber(buffer) RNMBX_OPTIONAL_PROP_NSNumber(tolerance) RNMBX_OPTIONAL_PROP_BOOL(lineMetrics) diff --git a/src/components/ShapeSource.tsx b/src/components/ShapeSource.tsx index 4123cfa348..a9cd419a6a 100644 --- a/src/components/ShapeSource.tsx +++ b/src/components/ShapeSource.tsx @@ -93,6 +93,12 @@ export type Props = { */ maxZoomLevel?: number; + /** + * Specifies the minimum zoom level at which to create vector tiles. + * The default value is 0. + */ + minZoomLevel?: number; + /** * Specifies the size of the tile buffer on each side. * A value of 0 produces no buffer. A value of 512 produces a buffer as wide as the tile itself. @@ -312,6 +318,7 @@ export class ShapeSource extends NativeBridgeComponent( clusterMaxZoomLevel: this.props.clusterMaxZoomLevel, clusterProperties: this.props.clusterProperties, maxZoomLevel: this.props.maxZoomLevel, + minZoomLevel: this.props.minZoomLevel, buffer: this.props.buffer, tolerance: this.props.tolerance, lineMetrics: this.props.lineMetrics, diff --git a/src/specs/RNMBXShapeSourceNativeComponent.ts b/src/specs/RNMBXShapeSourceNativeComponent.ts index 581c4ee6ed..5099a1ed93 100644 --- a/src/specs/RNMBXShapeSourceNativeComponent.ts +++ b/src/specs/RNMBXShapeSourceNativeComponent.ts @@ -21,6 +21,7 @@ export interface NativeProps extends ViewProps { clusterMaxZoomLevel: UnsafeMixed; clusterProperties: UnsafeMixed; maxZoomLevel: UnsafeMixed; + minZoomLevel: UnsafeMixed; buffer: UnsafeMixed; tolerance: UnsafeMixed; lineMetrics: UnsafeMixed;