Отображать маркеры на картах на андроиде в регионе, который отображается мне на моем экране - PullRequest
0 голосов
/ 03 сентября 2018

Я работаю с Google Maps. Допустим, в моей базе данных хранится около 1 миллиона маркеров положения. Я хочу загрузить или отобразить только те маркеры, которые должны быть на той части карты, которая в данный момент отображается на экране. (Например, если моя карта показывает Азию, на ней должны отображаться только маркеры, которые находятся в Азии; если я перееду в любое другое место на карте, на нем должны отображаться маркеры в этом регионе.) Я делаю это, поэтому я не необходимо загрузить всю базу данных одновременно, так как это может вызвать задержки в приложении. Я пытался использовать Spatialite, но я не нашел хорошего учебника или информации о том, как его использовать. Это одна из ссылок, по которым я следовал, но у меня не было хорошей идеи. Есть ли другой способ сделать это, или Spatialite лучший вариант?

1 Ответ

0 голосов
/ 05 сентября 2018

Вам нужно будет найти лучший способ извлечь эти позиции из вашей базы данных, но один из способов добавить маркеры, основанные на положении камеры на карте, - это добавить соответствующие маркеры в GoogleMap.OnCameraChangeListener.

// Check to see if your GoogleMap variable exists.
if (mGoogleMap != null) {
    // Respond to camera movements.
    mGoogleMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
        @Override
        public void onCameraMove() {
            // Get the current bounds of the map's visible region.
            LatLngBounds bounds = mGoogleMap.getProjection().getVisibleRegion().latLngBounds;
                // Loop through your list of positions.
                for (LatLng latLng: yourLatLngList) {
                    // If a position is inside of the bounds,
                    if (bounds.contains(latLng)) {
                        // Add the marker.
                        mGoogleMap.addMarker(new MarkerOptions()
                                    .position(latLng));
                    }
                }
        }
   });
}

Я бы не советовал проходить через миллион позиций каждый раз, когда положение камеры на карте меняется. Я думаю, что лучший способ сделать это - получить текущие границы видимой области карты при перемещении камеры, а затем отправить границы в вызове на ваш бэкэнд в другом потоке, и ваш бэкэнд выполнит работу найти позиции, которые соответствуют этим границам, а затем вернуть этот список обратно в ваше приложение, где вы можете добавить маркеры соответственно.

...