将Region latitudeDelta / longitudeDelta转换为近似zoomLevel

时间:2017-10-04 15:18:49

标签: react-native react-native-maps

我在react-native-maps应用中使用了来自Airbnb的精彩react-native

我在JSON文件上有一个标记列表,其中每个标记都有一个属性zoom,它是一个近似缩放级别的整数,标记应该在地图上显示/隐藏。

是否有基于latitudeDelta的{​​{1}}和longitudeDelta的方式来获得当前缩放级别的近似双/整数,就像我们在Google地图上看到的那样(1到20) )?

由于

2 个答案:

答案 0 :(得分:14)

好的,我带来了一个方便的解决方案,我不知道我们能否做得更好。

我添加了onRegionChange事件来检索区域,然后我使用了一些数学:

<MapView
    style={styles.map}
    initialRegion={this.state.region}
    onRegionChange={region => {
        clearTimeout(this.timerForMap)
        this.timerForMap = setTimeout(() => {
            this.showMarkers(region)
        }, 100)
    }}>
    ...

然后:

showMarkers(region) {
    let zoom = Math.round(Math.log(360 / region.longitudeDelta) / Math.LN2)
    ...
}

如果有人有更好的方法,请随时发表评论!

感谢。

答案 1 :(得分:1)

您可以使用 MapView 中的 onRegionChange 从 getCamera() 获取缩放级别

const [zoom, setZoom] = useState(''); //initiates variable zoom

const getZoom = async () => {
  const coords = await mapRef.getCamera();
  setZoom(coords.center.zoom); // sets variable zoom the value under coord.center.zoom
}

<MapView>
ref = {(ref) => mapRef = ref}
 onRegionChange = {() => {getZoom();}}
</MapView>