Autore Topic: POI (Point of interest)  (Letto 1025 volte)

Offline maku85

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: +35
    • Mostra profilo
  • Dispositivo Android:
    Sony Xperia J
  • Play Store ID:
    MaKu
  • Sistema operativo:
    Windows 8.1
POI (Point of interest)
« il: 09 Maggio 2011, 13:52:19 CEST »
0
Salve a tutti,questo è il mio primo topic di richiesta,spero che qualcuno mi possa dare qualche suggerimento.
Sto relizzando,per un progetto universitario,un'applicazione android.Per adesso non ho un idea precisa,sto cercando idee,ma di base diciamo che è un navigatore a cui dovrò poi aggiungere altre utility.Detto questo il mio primo problema riguarda i punti di interesse POI,in particolare avrei la necessità di creare una lista di punti da mantenere in locale(non su server quindi..per adesso)in un file .csv,xml o un database sql da poter caricare ad ogni avvio dell'applicazione e poter visualizzare sulla mappa..qualcuno mi può dare qualche dritta su come potrei procedere?
Grazie mille.
- Il programmatore è colui che risolve in un modo incomprensibile un problema che non sapevi di avere -

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:POI (Point of interest)
« Risposta #1 il: 03 Giugno 2011, 21:15:25 CEST »
0
Mi era sfuggito questo topic! Immagino tu abbia già risolto :)

Offline maku85

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: +35
    • Mostra profilo
  • Dispositivo Android:
    Sony Xperia J
  • Play Store ID:
    MaKu
  • Sistema operativo:
    Windows 8.1
Re:POI (Point of interest)
« Risposta #2 il: 03 Giugno 2011, 21:25:40 CEST »
0
Ehm..veramente no  :-[ ..mi sono concentrato su altro ultimamente..tu hai qualche suggerimento da propormi?  :-)
- Il programmatore è colui che risolve in un modo incomprensibile un problema che non sapevi di avere -

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:POI (Point of interest)
« Risposta #3 il: 03 Giugno 2011, 21:29:37 CEST »
0
Anche io avevo fatto un progetto per l'università (unimi) in cui bisognava salvare dei poi e semplicemente avevo creato un db sqlite con dentro una tabella in cui avevo un campo latitudine, un campo longitudine e altri campi per delle altre informazioni.

Offline maku85

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: +35
    • Mostra profilo
  • Dispositivo Android:
    Sony Xperia J
  • Play Store ID:
    MaKu
  • Sistema operativo:
    Windows 8.1
Re:POI (Point of interest)
« Risposta #4 il: 03 Giugno 2011, 22:00:51 CEST »
0
Bè, effettivamente era un pò la mia idea..anche se per ora non saprei da dove iniziare..spero di riuscire a buttare giù un pò di codice in questo fine settimana..quindi secondo te tra file csv, file xml e database sqlite è meglio questo ultimo metodo come gestione dei dati? anche per un'eventuale trasferimento dei dati stessi su un server?
- Il programmatore è colui che risolve in un modo incomprensibile un problema che non sapevi di avere -

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:POI (Point of interest)
« Risposta #5 il: 03 Giugno 2011, 22:09:58 CEST »
0
Se lavori con le interfacce non hai problemi a switchare tra una implementazione che salva i dati i in remoto e una che salva i dati in locale.
Io consiglio di salvare su db perchè è la soluzione più veloce, efficiente e robusta.

Dai un occhio a questo tutorial su come creare un database:

[medio] Creazione e utilizzo di un database SQLite - Android Developers Italia

Offline maku85

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: +35
    • Mostra profilo
  • Dispositivo Android:
    Sony Xperia J
  • Play Store ID:
    MaKu
  • Sistema operativo:
    Windows 8.1
Re:POI (Point of interest)
« Risposta #6 il: 03 Giugno 2011, 22:15:43 CEST »
0
Ok grazie mille..proverò a vedere cosa riesco a tirare fuori..
- Il programmatore è colui che risolve in un modo incomprensibile un problema che non sapevi di avere -

Offline maku85

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: +35
    • Mostra profilo
  • Dispositivo Android:
    Sony Xperia J
  • Play Store ID:
    MaKu
  • Sistema operativo:
    Windows 8.1
Re:POI (Point of interest)
« Risposta #7 il: 13 Giugno 2011, 17:24:10 CEST »
0
Posto la soluzione che ho utilizzato..magari a qualcuno può servire..o se avete suggerimenti per ottimizzare il codice..
Come suggeritomi da Ricky ho utilizzato il tutorial

http://www.anddev.it/index.php/topic,856.0.html

per creare il database e ho trovato il tutorial

http://www.anddev.it/index.php/topic,495.msg16470.html#msg16470

utile per importare i dati in automatico da un file .csv

Per quanto riguarda il primo tutorial ho semplicemente cambiato nomi al database, tabella e creato le mie colonne(ovviamente  :-P) e aggiunto un metodo per caricare i dati dal file csv all'avvio
Codice (Java): [Seleziona]
...
public void load() throws IOException{
        InputStream is = mContext.getResources().openRawResource(R.raw.dati);
        InputStreamReader in = new InputStreamReader(is);
        BufferedReader reader = new BufferedReader(in);
        try {
                String line = null;
                while ( (line = reader.readLine()) != null ) {
                        mDb.insert(MiaTabella, null, getContentValues(line));
                }
                reader.close();
        } catch (IOException e) {
                e.printStackTrace();
        } finally {
                if (in != null) {
                        try {
                                in.close();
                        } catch (IOException e) {}
                        }
                }
    }
...

come si può vedere ho messo il file csv con i dati nella cartella res/raw. Il file è composto da tre colonne nome, latitudine e longitudine del POI.
Nella mia classe principale, dopo aver creato e personalizzato la mappa ho inserito il seguente codice
Codice (Java): [Seleziona]
...
MyDatabase db=new MyDatabase(getApplicationContext());
        db.open();
        try {
                        db.load();
                } catch (IOException e) {
                        e.printStackTrace();
                }

                Cursor c=db.fetchCoordinates(); // query
        startManagingCursor(c);
        int nameCol=c.getColumnIndex(MyDatabase.CoordinatesMetaData.NAME_KEY);  //indici delle colonne
        int latCol=c.getColumnIndex(MyDatabase.CoordinatesMetaData.LAT_KEY);
        int lngCol=c.getColumnIndex(MyDatabase.CoordinatesMetaData.LNG_KEY);
        int id = getResources().getIdentifier("puntina", "drawable", "org.android.progetto");
        Drawable img = getResources().getDrawable(id);
        if(c.moveToFirst()){  //se va alla prima entry, il cursore non è vuoto
                do {
                        overlays.add(new PuntiInteresse(getApplicationContext(),img, c.getDouble(latCol),
                                                c.getDouble(lngCol),c.getString(nameCol)));
                        } while (c.moveToNext());//iteriamo al prossimo elemento
                }
        db.close();
...

dove PuntiInteresse è una classe che estende ItemizedOverlay e serve solo a creare il singolo POI. Il costruttore è del tipo
Codice (Java): [Seleziona]
private List<OverlayItem> interesse = new LinkedList<OverlayItem>();
...
public PuntiInteresse(Context context, Drawable marker, double lat, double lng, String name) {
                super(marker);
                latitude=lat*1E6;
            longitude=lng*1E6;
            interesse.add(new OverlayItem(new GeoPoint((int)latitude, (int)longitude), name, name));
            populate();
...
        }


Adesso rimane solo il problema delle voci duplicate(visto che il database viene ricaricato ogni volta che si avvia l'attività principale)e inoltre sarebbe utile poter creare diversi tipi di POI, ognuno con la sua icona. Ci sto lavorado..ma si accettano sempre suggerimenti   ;-).
- Il programmatore è colui che risolve in un modo incomprensibile un problema che non sapevi di avere -