Реагируйте на родные карты, чтобы получить видимые маркеры - PullRequest
3 голосов
/ 08 июля 2019

В iOS при использовании набора карт мы можем получить текущие аннотации внутри видимого прямоугольника карты. Вот небольшой фрагмент с использованием swift

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

Есть ли в этой библиотеке сравнимый метод или обратный вызов?

Основное назначение - узнать, когда пользователь изменил регион (масштабирование и т. Д.), И получить массив текущих маркеров, которые все еще видны.

1 Ответ

1 голос
/ 10 июля 2019

Для этого есть функция 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.

Если вам не нужно показывать столько маркеров, вы можете использовать более простой подход, сохраняя точки в массиве. Затем в каждом регионе измените цикл во всех местах и ​​выберите те, которые находятся внутри региона.

...