2012-12-04 12 views
27

Aktualizuję istniejącą aplikację na Androida, aby korzystać z nowego interfejsu Google Maps Android API v2. Mam około 2500 znaczników, które chcę dodać do mapy. Ze starszą wersją API odkryłem, że zdolność reagowania map jest przerażająca, gdy są 2500 znaczników, więc musiałem obejść to, dodając tylko znaczniki znajdujące się w bieżącym widocznym obszarze mapy.Google Maps Android API v2 bardzo powolny przy dodawaniu wielu znaczników

Miałem nadzieję, że 2500 markerów będzie szybsze z nowym interfejsem API, ale nadal jest okropne, nawet na Nexusie 4, i nie widzę opcji klastrowania.

Moje pytanie: jak ustalić, czy określony punkt lat/lng znajduje się w widocznym obszarze mapy?

W dokumentacji znalazłem VisibleRegion, ale do tej pory nie miałem z tym szczęścia. Każda pomoc jest bardzo doceniana.

* Nota boczna: 2500 znaczników na iOS MKMapView (mapy google lub mapy Apple) jest bardzo gładka i reaguje nawet na iPhone 3gs. Wciąż nie mogę zrozumieć, dlaczego jest tak powolny na Androida, nawet z najnowszym i najlepszym sprzętem.

Odpowiedz

50

porządku, po wypróbowaniu jeszcze kilka rzeczy, zorientowali się, jak określić, czy dany punkt znajduje się w obszarze widzialnym, i to całkiem proste:

//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(...));  
} 

* Należy pamiętać, że uzyskanie projekcję GoogleMap jest kosztowna operacja, więc jeśli przeglądasz długą listę przedmiotów, aby utworzyć Markery i dodawać je do mapy, tak jak ja, tylko chwytaj projekcję raz przed zapętleniem.

Aktualizacja

postanowiłem napisać na blogu szczegółowo jak pokazać markerów, które znajdują się w obszarze widzialnym mapy i ukryć znaczniki, ponieważ są one przemieszczane poza ekran. Nie jest to idealne rozwiązanie, ale jeśli wyświetlasz tysiące znaczników i wiesz, że użytkownicy nie muszą widzieć ich wszystkich jednocześnie (chyba, że ​​pomniejszają odległość), jest to całkiem dobre obejście.

Hiding and Showing on screen Markers with Google Maps Android API V2

+4

dziękuję za doskonałą blogpost – subash

+0

Byłoby zresztą odwrócić to, aby być w stanie wskazać czy na mapie są znaczniki, ale poza bieżącym ekranem/widokiem/ograniczeniami? –

+1

zintegrowany z wieloma menedżerami klastra działa jak urok. w porównaniu ze wszystkimi umieszczonymi markerami, to rozwiązanie spowoduje, że klastry będą przerysowywać/ponownie obliczać nieco, ale jest to całkiem w porządku, biorąc pod uwagę ogromny wzrost wydajności. dziękuję @DiscDev – DayDayHappy

13

rozwiązania klastrowego na Androida może chcesz spróbować Androida mapy rozszerzeń: https://github.com/mg6maciej/android-maps-extensions

+0

To wygląda naprawdę ładnie, nie mogę się doczekać, aby go wypróbować. – DiscDev

+0

@ MaciejGórski to fajna biblioteka. Mam tylko nadzieję, że ma jakieś dokumenty pomocnicze, żeby to opisać. –

+1

@ KhaledAlanezi Mam taką nadzieję. Ponieważ jest to open source, każdy może wnieść swój wkład, tworząc trochę dokumentacji (np. Wiki na GitHub). Dla mnie najlepszą dokumentacją jest aplikacja demonstracyjna. –