Autore Topic: Inoltro delle coordinate  (Letto 1041 volte)

Offline pup3770

  • Utente junior
  • **
  • Post: 89
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s3
  • Sistema operativo:
    Android
Inoltro delle coordinate
« il: 18 Marzo 2014, 10:11:23 CET »
0
Ciao Ragazzi, non so se mi trovo a scrivere nell'area del forum corretta.

Ho realizzato un'app che preleva le coordinate GPS e le visualizza. All'avvio clicco sul bottone "Calcola" e visualizza "latitudine" e "longitudine", se clicco nuovamente su "Calcola" visualizza nuovamente le nuove coordinate e così via.
Adesso dovrei: visualizzare tutti i punti sulla mappa in modo da poter tracciare un tracciato oppure inviare ad un database e poi prelevarle dal pc. Come posso fare?

Considerate che ho iniziato da poco la programmazione Android e quindi non sono molto pratico.

Potete gentilmente aiutarmi?

Offline white$hark

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Nexus4
  • Sistema operativo:
    Windows 7
Re:Inoltro delle coordinate
« Risposta #1 il: 18 Marzo 2014, 10:28:49 CET »
0
Ciao, potresti fare in modo che ogni volta che viene premuto il bottone, si aggiunge un marker sulla mappa.

Offline pup3770

  • Utente junior
  • **
  • Post: 89
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s3
  • Sistema operativo:
    Android
Re:Inoltro delle coordinate
« Risposta #2 il: 18 Marzo 2014, 10:58:13 CET »
0
Eh perfetto. Credo sia proprio quello che mi serviva.

Come fare?

Non so se necessita che ti faccia prendere visione del sorgente. Eventulamente puoi vedere la struttura all'indirizzo: http://www.anddev.it/index.php?topic=13374.new;topicseen#new

Post unito: 18 Marzo 2014, 11:23:55 CET
Googlando ho trovato:
http://www.mrwebmaster.it/android/inserire-mappe-google-app-android_11337_3.html

Ho provato a testarlo ma da errori. Non capisco come fare.
« Ultima modifica: 18 Marzo 2014, 11:23:55 CET da pup3770, Reason: Merged DoublePost »

Offline white$hark

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Nexus4
  • Sistema operativo:
    Windows 7
Re:Inoltro delle coordinate
« Risposta #3 il: 18 Marzo 2014, 15:14:04 CET »
0
Siccome hai già le tue coordinate come "latitudine" e "longitudine", puoi inserire nell'onClick del bottone che calcola la posizione attuale questo:
Codice (Java): [Seleziona]
 
LatLng myPosition = new LatLng(latitudine, longitudine);

map.addMarker(new MarkerOptions().position(myPosition).title(markerTitle));

credo che così dovrebbe funzionare.

Offline pup3770

  • Utente junior
  • **
  • Post: 89
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s3
  • Sistema operativo:
    Android
Re:Inoltro delle coordinate
« Risposta #4 il: 18 Marzo 2014, 16:37:00 CET »
0
Grazie mille per la risposta, ma non capisco a cosa può servire a me. .io le coordinate le prelevo ogni volta che clicco sul pulsante "calcola" che richiama l'activity per prelevare le coordinate.  Ma adesso io avrei la necessità di interfacciarmi con database spaziali in modo da vedere la distanza tra un punto fisso e quello che rilevo oppure tracciare un percorso. Come posso fare?

Post unito: [time]19 Marzo 2014, 09:33:47 CET[/time]
In definitiva dovrei interfcciarmi con un database (mySQL o PostgreSQL con l'estensione PostGIS), registrando i dati della posizione.

Come fare?


Post unito: 19 Marzo 2014, 12:09:54 CET
Ragazzi, cerco di andare avanti aspettando che qualcuno tra voi mi risponde ma sono sempre inceppato.

Ho letto la guida: http://www.html.it/articoli/la-gestione-dei-database-in-android-1/. Sembrava andare tutto alla grande ma appena vado a concludere con il codice nell'ultima pagina sorgono i problemi.

Penso di aver capito le prime pagine in cui si vanno a creare le classi in nuovo package, classi che ho chiamato:

DatabaseHelper.java
Codice (Java): [Seleziona]
package database;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


//DatabaseHelper fornisce interfeccia di creazione/aggiornamento/gestione del database
public class DatabaseHelper extends SQLiteOpenHelper {
        /*implementando un Helper di tipo SQLiteOpenHelper stiamo nascondendo la logica utilizzata per decidere se il
    *database necessita di essere creato o aggiornato prima di essere aperto: questo è il primo livello
    *di astrazione che ci fornisce maggiore flessibilità e manutenibilità.
    */

       
        /*Nota: Estendere SQLiteOpenHelper significa dover eseguire l'override del costruttore, del metodo onCreate()
         * e del metodo onUpgrade(), che si occupano rispetivamente della creazione e dell'updgrade del database.
         */

   
    private static final String DATABASE_NAME = "mydatabase.db"; //costante che definisce il nome del database
    private static final int DATABASE_VERSION = 1; //costante che definisce la versione del database

    // Lo statement SQL di creazione del database
    private static final String DATABASE_CREATE = "create table coordinate (_id integer primary key autoincrement, latitude text not null, longitude text not null);";

    // Costruttore
    public DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Questo metodo viene chiamato durante la creazione del database
    //esegue lo script SQL di creazione della base di dati definito nella costante statica
    @Override
    public void onCreate(SQLiteDatabase database) {
            database.execSQL(DATABASE_CREATE);
    }

    // Questo metodo viene chiamato durante l'upgrade del database, ad esempio quando viene incrementato il numero di versione
    //effettua semplicemente il DROP (eliminazione) della tabella esistente (coordinate) e la sostituisce con la nuova
    //definizione della stessa richiamando il metodo onCreate().
    @Override
    public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion ) {
             
            database.execSQL("DROP TABLE IF EXISTS contact");
            onCreate(database);
             
    }
}


e DbAdapter.java
Codice (Java): [Seleziona]
package database;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;

 
public class DbAdapter { //interfaccia diretta per manipolare il database
  @SuppressWarnings("unused")
  private static final String LOG_TAG = DbAdapter.class.getSimpleName();
         
  private Context context;
  private SQLiteDatabase database;
  private DatabaseHelper dbHelper;
 
  // Database fields
  private static final String DATABASE_TABLE = "coordinate";
 
  public static final String KEY_CONTACTID = "_id";
  public static final String KEY_LATITUDE = "latitude";
  public static final String KEY_LONGITUDE = "longitude";
 
 
  public DbAdapter(Context context) {
    this.context = context;
  }
 
  //open() e close(): sono metodi che utilizzeremo quando vogliamo dialogare con il db
  public DbAdapter open() throws SQLException {
    dbHelper = new DatabaseHelper(context); //istanza un oggetto di tipo DatabaseHelper() - vedi classe DatabaseHelper.java
    database = dbHelper.getWritableDatabase(); //restituisce un oggetto database in modalità lettura/scrittura attivo fino a quando non viene richiamato il metodo close()
    return this;
  }
 
  //richiama il metodo close() della classe SQLiteOpenHelper, il quale chiude ogni oggetto database aperto
  public void close() {
    dbHelper.close();
  }
 
  /*createContentValues è un metodo con il compito di memorizzare un insieme di valori che
  *il ContentResolver può processare per fornire l'accesso applicativo al modello del contenuto
  */

  private ContentValues createContentValues(String latitude, String longitude) {
    ContentValues values = new ContentValues();
    String date = null;
        values.put( KEY_LATITUDE, date );
    String flag_send_sms = null;
        values.put( KEY_LONGITUDE, flag_send_sms );
     
   return values;
  }
         
  //create a contact
  public long createCoordinate(String latitude, String longitude) {
    ContentValues initialValues = createContentValues(latitude, longitude);
    return database.insertOrThrow(DATABASE_TABLE, null, initialValues);
  }
 
  //update a contact
  public boolean updateCoordinate( long contactID, String latitude, String longitude) {
    ContentValues updateValues = createContentValues(latitude, longitude);
    return database.update(DATABASE_TABLE, updateValues, KEY_CONTACTID + "=" + contactID, null) > 0;
  }
                 
  //delete a contact      
  public boolean deleteCoordinate(long contactID) {
    return database.delete(DATABASE_TABLE, KEY_CONTACTID + "=" + contactID, null) > 0;
  }
 
 
  //Seguono i metodi per l'interrogazione del database
 
//recupera tutte le coordinate presenti nel database
  public Cursor fetchAllCoordinate() {
    return database.query(DATABASE_TABLE, new String[] { KEY_CONTACTID, KEY_LATITUDE , KEY_LONGITUDE}, null, null, null, null, null);
  }
   
  //recupera tutte le coordinate secondo un filtro che è una stringa
  public Cursor fetchCoordinateByFilter(String filter) {
    Cursor mCursor = database.query(true, DATABASE_TABLE, new String[] {
                                    KEY_CONTACTID, KEY_LATITUDE, KEY_LONGITUDE },
                                    KEY_LATITUDE + " like '%"+ filter + "%'", null, null, null, null, null);
         
    return mCursor;
  }
}

A quanto ho capito fino ad ora, bisognerebbe creare una classe che mi permette di accedere ai metodi presenti nella classe: DbAdapter.java visto che comunque già il database viene creato nella classe: DatabaseHelper.java.

Copiando il codice nell'ultima pagina della guida non riesco perché mi da errori.
Come posso fare?

Io ho la necessità ad oggi di prendere le coordinate (che alla fine sono numeri) e salvarle nel database (quindi creare tante tuple per quante sono le volte che mi localizzo). Dopo aver salvato, vorrei visualizzarle sempre nell'app.
« Ultima modifica: 19 Marzo 2014, 12:09:54 CET da pup3770, Reason: Merged DoublePost »