Autore Topic: Velocità caricamento addMarker  (Letto 654 volte)

Offline wlf

  • Utente normale
  • ***
  • Post: 357
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Velocità caricamento addMarker
« il: 19 Giugno 2014, 16:06:52 CEST »
0
Ciao ragazzi!
ho implementato un ciclo for per caricare più punti sulla mia mappa recuperando anche l'indirizzo grazie le coordinate e funziona tutto correttamente:

Codice: [Seleziona]
                        //Aggiungo marker sulla mappa
                        for (int i = 0; i < myMov.size(); i++) {
                                mv = myMov.get(i);                               
                                if (mv.getLat() != 0 && mv.getLon() != 0) {
                                        //Recuporo indirizzo da latitudine e longitudine
                                        Geocoder geocoder;
                                        List<Address> addresses;
                                        geocoder = new Geocoder(this, Locale.getDefault());
                                        String address = "";
                                        String city = "";
                                        String country = "";
                                        try {
                                                addresses = geocoder.getFromLocation(mv.getLat(), mv.getLon(), 1);                                       
                                                address = addresses.get(0).getAddressLine(0);
                                                city = addresses.get(0).getAddressLine(1);
                                                country = addresses.get(0).getAddressLine(2);
                                        } catch (Exception e) {
                                        }
                                       
                                        map.addMarker(new MarkerOptions()
                                                .position(new LatLng(mv.getLat(), mv.getLon()))
                                                .title(address + " " + city + " " + country)
                                                .snippet(mv.getNota() + " del " + formattaData(mv.getDatamov() + " " +
                                                        mv.getOramov()))
                                                .icon(BitmapDescriptorFactory
                                                .fromResource(R.drawable.ic_mappin)));                                                                                                
                                        zoom = new LatLng(mv.getLat(), mv.getLon());
                                }

Se visualizzo un numero contenuto di punti tutto bene, è accettabile anche come velocità di caricamento, altrimenti già da 50 punti il caricamento è rallentato (circa 15 secondi), con un odiosissima schermata nera (5 secondi circa).

Sono quindi a chiedere un consiglio ai più esperti; è possibile casomai velocizzare il caricamento, casomai caricando subito 5 punti e facendo poi apparire i restanti n punti?  :-[
Oppure mi debbo rassegnare all'attesa del caricamento così lento?  :-(

Offline katte

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Nexus5
  • Sistema operativo:
    Windows8.1
Re:Velocità caricamento addMarker
« Risposta #1 il: 20 Giugno 2014, 11:54:47 CEST »
+1
Io non ho problemi con i Marker, riesco a inserirne anche a centinaia senza rallentamenti.
Credo che il problema del rallentamento stia nella numerose query che il Geocoder effettua per recuperare indirizzo etc.etc..

Credo che la cosa migliore sarebbe quella di inserire solo i marker e recuperare le informazioni relative ed aggiungerle nel title solo quando uno clicca sul marker.

Post unito: 20 Giugno 2014, 12:50:07 CEST
Eccoti un esempio di codice non testato per leggere dal geocoder al momento del click sul marker.
Codice: [Seleziona]
                map.setOnMarkerClickListener(new OnMarkerClickListener() {
                        @Override
                        public boolean onMarkerClick(Marker marker) {
                                LatLng ll = marker.getPosition();
                                Location l = new Location("dummyprovider");
                                l.setLatitude(ll.latitude);
                                l.setLongitude(ll.longitude);                                       
                                List<Address> addresses = geocoder.getFromLocation(l.getLatitude(), l.getLongitude(), 1);
                                String address = addresses.get(0).getAddressLine(0);
                                String city = addresses.get(0).getAddressLine(1);
                                String country = addresses.get(0).getAddressLine(2);
                                marker.setSnippet(address + " " + city + " " + country);                                               
                                marker.hideInfoWindow();                                       
                                marker.showInfoWindow();       
                                return true;
                        }
                });
« Ultima modifica: 20 Giugno 2014, 12:50:07 CEST da katte, Reason: Merged DoublePost »

Offline wlf

  • Utente normale
  • ***
  • Post: 357
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Velocità caricamento addMarker
« Risposta #2 il: 20 Giugno 2014, 15:39:31 CEST »
0
Io non ho problemi con i Marker, riesco a inserirne anche a centinaia senza rallentamenti.
Credo che il problema del rallentamento stia nella numerose query che il Geocoder effettua per recuperare indirizzo etc.etc..

Bingo! ;)
Il sospetto mi era venuto ma non l'avevo testato; sarebbe bastato semplicemente commenare le righe del Geocoder. Ti confermo che adesso è velocissimo, addirittura più veloce che non caricare un singolo punto! :)

Citazione
Credo che la cosa migliore sarebbe quella di inserire solo i marker e recuperare le informazioni relative ed aggiungerle nel title solo quando uno clicca sul marker.

Ho fatto come hai suggerito; non mi è chiara solamente la porzione sottostante:
Codice: [Seleziona]
                                Location l = new Location("dummyprovider");
                                l.setLatitude(ll.latitude);
                                l.setLongitude(ll.longitude);                                       
                                List<Address> addresses = geocoder.getFromLocation(l.getLatitude(), l.getLongitude(), 1);

Perché utilizzi Location(String provider)?
Non potrebbe essere sostituito semplicemente con:

Codice: [Seleziona]
                                List<Address> addresses = geocoder.getFromLocation(ll.latitude, ll.longitude, 1);

A parte tutto adesso il rallentamento ce l'ho sulla visualizzazione dell'indirizzo! :(
Quando tappi la risposta non è immediata; a volte rischi di tappare più volte per vedere la risposta visto che non è velocissimo ... o capra o cavoli! ;)

Comunque grazie, sei stato gentilissimo! ;)

Offline katte

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Nexus5
  • Sistema operativo:
    Windows8.1
Re:Velocità caricamento addMarker
« Risposta #3 il: 20 Giugno 2014, 15:46:37 CEST »
0
Citazione
Perché utilizzi Location(String provider)?

Si, basta ll ..
errore di copia e incolla..
l lo uso da un'altra parte per poter avere la distanceTo().. :)