将区域的纬度差/经度差转换为近似的缩放级别

13
我在一个React Native应用程序上使用来自Airbnb的优秀组件库react-native-maps。我的JSON文件中有一组地图标记,每个标记都有一个名为zoom的属性,该属性是一个整数,表示标记在地图上应显示/隐藏的近似缩放级别。

基于RegionlatitudeDeltalongitudeDelta,是否存在一种方法可以获取当前缩放级别的近似double / integer值,就像在Google Maps上一样(1到20)?谢谢!
2个回答

31

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

我添加了 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
这也是我获取缩放级别的方式。 - user926721
6
您可以使用以下代码来计算给定缩放级别的区域:const distanceDelta = Math.exp(Math.log(360) - (zoom * Math.LN2)); - Carlos J
我们在哪里使用这个缩放变量? - Shreya B

4

在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 coords.center.zoom
}

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接