Подтвердить что ты не робот

Google Maps Android API v2 очень медленный, добавляя много маркеров

Я обновляю существующее приложение для Android, чтобы использовать новый API Android Google Maps v2. У меня около 2500 маркеров, которые я хочу добавить на карту. С более старой версией API я обнаружил, что отзывчивость карт является ужасающей, когда есть 2500 маркеров, поэтому мне пришлось ее обойти, добавив только маркеры, которые находятся в текущей видимой области карты.

Я надеялся, что 2500 новых маркеров будут быстрее с новым API, но он все еще ужасен даже на Nexus 4, и я не вижу возможности для кластеризации.

Итак, мой вопрос: как я могу определить, содержится ли определенная точка lat/lng в видимой области карты?

Я просмотрел VisibleRegion в документации, но до сих пор мне не повезло. Любая помощь приветствуется.

* Боковое примечание: 2500 маркеров на iOS MKMapView (карты Google или карты Apple) очень плавные и отзывчивые даже с iPhone 3gs. Я до сих пор не могу понять, почему это так медленно на Android, даже с самым последним и самым большим оборудованием.

4b9b3361

Ответ 1

Хорошо, попробовав еще пару вещей, я выяснил, как определить, находится ли данная точка в видимой области, и это довольно просто:

//Note: this.mMap is an instance of GoogleMap

LatLngBounds bounds = this.mMap.getProjection().getVisibleRegion().latLngBounds;

LatLng markerPoint = new LatLng(item.getLatitude(), item.getLongitude());

if(bounds.contains(markerPoint))
{
    this.mMap.addMarker(new MarkerOptions(...));    
}

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

Обновление

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

Скрытие и отображение на экране Маркеры с API Google Android V2