【问题标题】:React native maps get visible markers反应原生地图获得可见标记
【发布时间】:2019-11-17 11:54:19
【问题描述】:

在 iOS 上,当使用地图工具包时,我们能够在可见地图矩形内获取当前注释。这是一个使用 swift 的小 sn-p

Array(myMap.annotations(in: myMap.visibleMapRect))

这个库中是否有类似的方法或回调?

我的基本用途是了解用户何时更改区域(捏合缩放等)并获取仍然可见的当前标记数组。

【问题讨论】:

  • 没试过但是你有没有看过getMarkersFrames的方法?在这里查看 - github.com/react-native-community/react-native-maps/blob/master/…
  • 否则您可以尝试getMapBoundaries 并手动检查您的哪些标记在这些边界内。
  • 您是否有 getMarkersFrames 的 sn-p 或我将如何计算 getMapBoundaries 到我在标记中的坐标的示例?后者似乎可能很慢。如果我有 6,000 个引脚,并且每次设置区域时都必须逐个迭代它们。也许我错了
  • 是的,在这种情况下你可能是对的。不是理想的解决方案
  • 将尝试为您获取代码 sn-p 并尝试 getMarkersFrames out

标签: react-native react-native-maps


【解决方案1】:

有一个getMarkersFrames 函数可以做到这一点,但它只是iOS,这就是为什么我从未在我的应用程序中使用过它。

我通过使用 RBush 库来存储标记解决了同样的问题:https://github.com/mourner/rbush。它允许轻松选择所选区域中的点。它通过使用 R-tree 快速完成。示例:

getInitialState() {
    return {
        region: {
            latitude: 37.78825,
            longitude: -122.4324,
            latitudeDelta: 0.0922,
            longitudeDelta: 0.0421,
        },
    };
}

componentWillMount() {
    this.tree = new RBush();
    fetch().then((points) => {
        // RBush expects the point to have minX, maxX, minY, maxY
        // but it could be configured.
        this.tree.load(points);
    });
}

onRegionChangeComplete(region) {
    // Get points that are inside the region.
    visibleItems = this.tree.search({
        // Provide the coordinates of the south-west, north-east corners of the region.
        minX: region.longitude - region.longitudeDelta,
        minY: region.latitude - region.latitudeDelta,
        maxX: region.longitude + region.longitudeDelta,
        maxY: region.latitude + region.latitudeDelta
    });
    this.setState({ region, visibleItems });
}

render() {
    return (
        <MapView
            region={this.state.region}
            onRegionChangeComplete={this.onRegionChangeComplete}
        />
    );
}

我的应用使用相同的方法,只是我在 reduxredux-saga 中加载和搜索初始标记。

如果您不需要显示那么多标记,您可以使用更简单的方法,将点存储在数组中。然后在每个区域更改循环遍历所有位置并选择区域内的那些。

【讨论】:

  • 我会调查的。我对 componentWillMount 代码感到困惑。提取码从哪里来?
  • @mKane 这只是从服务器获取数据的示例。收到所有点后,必须将它们加载到树中。
  • @mKane 我已经在componentWillMount 中展示过这个。在我的示例中,fetch() 是 Fetch API 中的一个函数,仅显示为一个通用示例。您能否展示如何加载您的点,以及您的点有哪些数据(纬度、经度、其他)?
  • 啊,好吧,所以 this.tree.load 就是我的观点。好的,我明白了。让我试试我的代码。您能否提供 iOS 的 getMarkersFrames 示例以便我进行比较?
  • @mKane 我从未尝试过getMarkersFrames,因为它只是iOS,但我必须同时实现iOS和Android。
猜你喜欢
  • 2019-02-28
  • 2019-05-19
  • 2018-12-09
  • 2023-03-29
  • 1970-01-01
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多