Вам нужно будет найти лучший способ извлечь эти позиции из вашей базы данных, но один из способов добавить маркеры, основанные на положении камеры на карте, - это добавить соответствующие маркеры в 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));
}
}
}
});
}
Я бы не советовал проходить через миллион позиций каждый раз, когда положение камеры на карте меняется. Я думаю, что лучший способ сделать это - получить текущие границы видимой области карты при перемещении камеры, а затем отправить границы в вызове на ваш бэкэнд в другом потоке, и ваш бэкэнд выполнит работу найти позиции, которые соответствуют этим границам, а затем вернуть этот список обратно в ваше приложение, где вы можете добавить маркеры соответственно.