Для этого есть функция 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
.
Если вам не нужно показывать столько маркеров, вы можете использовать более простой подход, сохраняя точки в массиве. Затем в каждом регионе измените цикл во всех местах и выберите те, которые находятся внутри региона.