在iOS上,使用地图套件时,我们可以在可见地图区域内获取当前注释。这是一个使用swift的小片段
Array(myMap.annotations(in: myMap.visibleMapRect))
此库中是否有任何可比较的方法或回调?
我的基本用途是知道用户何时更改了区域(捏缩放等),并使当前标记的数组仍然可见。
答案 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}
/>
);
}
除了在redux
和redux-saga
中进行初始标记加载和搜索外,我的应用程序使用相同的方法。
如果不需要显示很多标记,则可以通过将点存储在数组中来使用更简单的方法。然后在每个区域上更改所有位置的循环,然后选择该区域内的位置。