反应本机地图获得可见标记

时间:2019-07-07 23:38:29

标签: react-native react-native-maps

在iOS上,使用地图套件时,我们可以在可见地图区域内获取当前注释。这是一个使用swift的小片段

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

此库中是否有任何可比较的方法或回调?

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

1 个答案:

答案 0 :(得分:1)

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

我通过使用RBush库存储标记https://github.com/mourner/rbush解决了相同的问题。它可以轻松地在选定区域中选择点。并且它通过使用R树来快速完成。示例:

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中进行初始标记加载和搜索外,我的应用程序使用相同的方法。

如果不需要显示很多标记,则可以通过将点存储在数组中来使用更简单的方法。然后在每个区域上更改所有位置的循环,然后选择该区域内的位置。