在iOS使用地图工具包时,我们能够获取当前可见地图矩形内的注释。以下是一个使用Swift的小片段:
Array(myMap.annotations(in: myMap.visibleMapRect))
这个库中是否有可比较的方法或回调函数?
我的基本用法是了解用户何时更改了区域(如双指缩放),并获取当前仍可见的标记数组。
Array(myMap.annotations(in: myMap.visibleMapRect))
这个库中是否有可比较的方法或回调函数?
我的基本用法是了解用户何时更改了区域(如双指缩放),并获取当前仍可见的标记数组。
有一个名为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}
/>
);
}
我的应用程序使用相同的方法,只是我在redux
和redux-saga
中进行了初始标记加载和搜索。
如果您不需要显示那么多标记,则可以使用更简单的方法将点存储在数组中。然后,在每个区域更改时,循环遍历所有位置并选择位于该区域内的位置。
componentWillMount
中展示了这个。在我的例子中,fetch()
是来自Fetch API的函数,只是作为一个通用的例子展示。你能否展示一下如何加载你的点,并且你的点有哪些数据(纬度、经度、其他什么)? - ischenkodvgetMarkersFrames
,因为它只适用于 iOS
,但我必须实现 iOS 和 Android 两个版本。 - ischenkodv
getMarkersFrames
方法。这里有详细说明 - https://github.com/react-native-community/react-native-maps/blob/master/docs/mapview.md - Jono