Autore Topic: Chiarezza Spatialite  (Letto 2729 volte)

Offline pup3770

  • Utente junior
  • **
  • Post: 89
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s3
  • Sistema operativo:
    Android
Chiarezza Spatialite
« il: 06 Maggio 2014, 14:33:18 CEST »
0
Ciao a tutti, avevo scritto in un post vecchio ma forse nessuno lo sta leggendo più.
Ho la necessità di recuperare i dati spaziali, salvarli in un database spaziale e ripetere l'operazione diverse volte al giorno per diversi giorni in modo da vedere se ci sono errori tra le rilevazioni.

Ho iniziato a capire cos'è e come funziona Spatialite. Scaricando il materiale dal link:

https://www.gaia-gis.it/fossil/libspatialite/wiki?name=spatialite-android-tutorial, esattamente: spatialite-for-android-3.0.1 , essendo un file compresso, trovo sottocartelle. Seguendo la guida/tutorial, consiglia di copiare:

  • copiare le librerie native nella radice del progetto Android appena creato
  • copiare il pacchetto java dell'API base nella cartella di origine vi nuovo progetto

il primo punto sono riuscito a farlo perché basta seguire:
spatialite-for-android-3.0.1 -> spatialite-for-android -> spatialite-android -> spatialite-android-library -> libs -> x86 e ho copiato il file:
Citazione
libjsqlite.so
nella radice del progetto ovvero all'interno della cartella
Citazione
nome_progetto
insieme alle cartelle e file Manifest.

Non capisco perché porta "x86" e non quella per il 64 bit, ma credo che funzioni ugualmente sul mio pc che è una Mac Book Pro 64 bit.

Adesso non capisco dove trovare il materiale per il secondo punto: (ovvero)
  • copiare il pacchetto java dell'API base nella cartella di origine vi nuovo progetto

Forse ho sbagliato qualcosa? L'archivio l'ho scaricato seguendo il tutorial:
https://www.gaia-gis.it/fossil/libspatialite/wiki?name=spatialite-android-tutorial

ed è completo, ho provato a scaricarlo altre volte ed il contenuto è uguale.

Inoltre mi dice che dopo aver completato questi due passi/punti devo iniziare con il codice...Ma non capisco perché mi fa gestire subito la memoria, ma l'app la devo passare nello smartphone oppure posso simularla con AVD installato in Eclipse (alla voce: Run As Android Application)

Qualcuno sa aiutarmi? Grazie in anticipo

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Chiarezza Spatialite
« Risposta #1 il: 06 Maggio 2014, 14:51:51 CEST »
0
beh premesso che le traduzioni non sono proprio lineari (le cartelle delle lib native se non mi ricordo male vanno tenute come struttura), la frase
Citazione
copy the java package of the base API into you new project's source folder
vuol dire di copiare il package delle API base nel tuo progetto (nella cartella dei sorgenti), non nella root del progetto.
x86 non è riferito al tuo pc, ma al device su cui verrà installata l'app.


Un consiglio:
lo zip contiene libreria, un progetto e un progetto di test. Parti da quelli, fai funzionare quell'esempio e da li capisci come usare la libreria.

IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline pup3770

  • Utente junior
  • **
  • Post: 89
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s3
  • Sistema operativo:
    Android
Re:Chiarezza Spatialite
« Risposta #2 il: 06 Maggio 2014, 15:01:58 CEST »
0
Grazie per i consigli.

Ma scusa dovrei importare il progetto di test in Eclipse? Se si come? Ho provato
Citazione
Existing Android Code Into Workspace
ma il codice presenta errori.

Mamma mia ma perché ste cose sembrano assurde.. Capisco di essere all'inizio nella programmazione Android ma dove mi giro giro, cerco, studio ma sempre problemi incontro e poche soddisfazioni. Sembra che chi sa, sa e chi non sa amen

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Chiarezza Spatialite
« Risposta #3 il: 06 Maggio 2014, 15:28:18 CEST »
0
piu che altro stai usando una libreria abbastanza complessa, e se non conosci nulla (o quasi) di android e del build sistem è dura che tutto vada a occhi chiusi...
Io dico che i tre progetti che ci sono nello zip, li dovresti aggiungere ad eclipse (l'app referenzia la libreria nel file project.properties) e da li vedere se e in caso quali errori ti da (gli errori vanno letti e interpretati, a sbuffarci sopra non si risolve niente).

Detto questo, i progetti non li ho provati.

Se trovi errori, li leggi e non capisci cosa vogliano dire, posta qui gli errori e se possibile, ti aiutiamo
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline pup3770

  • Utente junior
  • **
  • Post: 89
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s3
  • Sistema operativo:
    Android
Re:Chiarezza Spatialite
« Risposta #4 il: 06 Maggio 2014, 15:46:39 CEST »
0
Bene, ma come devo fare ad aggiungerli al progetto? Capisco che per te e per voi del forum sembrerò una frana ma almeno vorrei capire come funziona questo mondo. Io ho fatto un'app che rileva le coordinate GPS e le salva su un DB SQLite, successivamente le visualizza.

Adesso vorrei che queste coordinate non vengano gestite come stringhe ma come dati spaziali e che vengano aggiunte anche altre info esempio oltre la longitudine e la latitudine anche l'altitudine. Leggendo vedo che Spazialite potrebbe essere la soluzione...Ma come fare? La guida al link:
https://www.gaia-gis.it/fossil/libspatialite/wiki?name=spatialite-android-tutorial

sembra facile, a vedere, ma non lo è. bho

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Chiarezza Spatialite
« Risposta #5 il: 06 Maggio 2014, 16:11:58 CEST »
0
Bene, ma come devo fare ad aggiungerli al progetto? Capisco che per te e per voi del forum sembrerò una frana ma almeno vorrei capire come funziona questo mondo. Io ho fatto un'app che rileva le coordinate GPS e le salva su un DB SQLite, successivamente le visualizza.

Adesso vorrei che queste coordinate non vengano gestite come stringhe ma come dati spaziali e che vengano aggiunte anche altre info esempio oltre la longitudine e la latitudine anche l'altitudine. Leggendo vedo che Spazialite potrebbe essere la soluzione...Ma come fare? La guida al link:
https://www.gaia-gis.it/fossil/libspatialite/wiki?name=spatialite-android-tutorial

sembra facile, a vedere, ma non lo è. bho
Non ti preoccupare, nessuno pensa niente e nessuno ti punta il dito.
Però segui ciò che ti dico:
Dimentica per il momento il tuo progetto/tua app e concentrati su spatialite. Prendi i tre progetti che ci sono dentro lo zip e gli importi in eclipse (import project from zip file, se non lo sai fare, è una feature di eclipse e trovi tanti tutorial online).
Una volta importati tutti e tre i progetti, guarda i sorgenti dell'app e vedi come è fatta e cosa fa, e piano piano porti quello che c'è in quell'app nella tua.
Non è una libreria che copi-incolli e voilà tutto funziona, ci devi sbattere la testa, e soprattutto devi capirla bene!
Di dati spaziali ne capisci? Cioè se ti parlo di EPSG, gradi decimali ecc sai di cosa parliamo?
Se il tuo problema è aggiungiere il parametro altitudine ai punti, puoi fare una terza colonna double nel tuo db sqlite e usare le elevation API di google (cerca online).
Usa spatialite solo se sai cosa fa e se ti serve realmente! Se non fai query spaziali, buffer ecc non ne hai  bisogno!
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline pup3770

  • Utente junior
  • **
  • Post: 89
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s3
  • Sistema operativo:
    Android
Re:Chiarezza Spatialite
« Risposta #6 il: 06 Maggio 2014, 16:27:50 CEST »
0
Grazie mille per i consigli dati in maniera semplice. Adesso è tutto molto più chiaro.

Si a livello teorico due parole le so su: EPSG, ma niente di più...

Ti dico subito che dovrei rispondere a questa richiesta:

Potresti limitarti a prendere dei rilievi GPS come l'hai fatto dal tuo mobile, scegliendo dei punti fissi in zona urbanizzate e no, poi effettuare rilievi GPS in questi punti precisi a diversi momenti del giorno. I dati verrano registrati in un database spaziale.
Puoi prendere il database SQLITE con Spatialite se hai ANDROID.
Registra gli errori di rilievo.

I dati registrati devono essere dati spaziali e non testi/numeri con coordinate riferite ad sistema di coordinate (SRID). Anche l'altezza deve essere registrata.

Ecco perché parlo di database spaziali con Spatialite.

Adesso ho importato il file compresso (credevo che dovevo importare singolarmente le cartelle) seguendo i passi:
  • new
  • Android Application Project
  • Tasto destro e selezionato Import
  • Archivie File
  • Ho selezionato il file compresso
  • Info folder ho selezionato il nome del nuovo progetto creato al punto 1 e 2

Mi ha importato il tutto ma appena provo ad eseguirlo mi appare l'activity con scritto: Hello World, e basta.

E' corretto?

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Chiarezza Spatialite
« Risposta #7 il: 06 Maggio 2014, 17:20:59 CEST »
0
sull'activity non te lo so dire, non ho mai provato quelle classi e sinceramente non ne ho il tempo, mi spiace.

Per quanto riguarda i dati, dalla richiesta che ti hanno fatto, non vuol dire granchè. Nel senso che "I dati verranno registrati in un database spaziale", non implica che il geodb sia sul telefono (o almeno non da quello che c'è scritto).
potenzialmente puoi salvare Lat Lon e Altitudine come double, inviarli ad un servizio con SRID 900913 (la proiezione di google) e scriverli in un db.
Dipende tutto da come è fatto il workflow.
Se sei obbligato a usare spatialite, allora devi un po "sbatterti"e far  almeno andare i progetti d'esempio (che aprendo lo zip ne ho visti 3 "-library" "-test" e l'altro di cui non ricordo il nome)
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline pup3770

  • Utente junior
  • **
  • Post: 89
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s3
  • Sistema operativo:
    Android
Re:Chiarezza Spatialite
« Risposta #8 il: 07 Maggio 2014, 10:36:49 CEST »
0
Eh mi sa che purtroppo devo utilizzare Spatialite o simili. Fino ad ora le coordinate sono state salvate come stringhe su database SQLite e non andavano bene.

Nota. ma per curiosità mia, cosa intendi:
Citazione
potenzialmente puoi salvare Lat Lon e Altitudine come double, inviarli ad un servizio con SRID 900913 (la proiezione di google) e scriverli in un db.
che io ho il mio database SQLite come ce l'ho adesso, prendo latitudine, longitudine e altitudine e li converto da double ad altro? Se si, in che formato e come si potrebbe fare?

Post unito: 07 Maggio 2014, 11:17:10 CEST
Citazione
Nicola_D
ho fatto qualche prova, la prima prova per iniziare a capire è stata quella di mettere in Run il progetto. Appena eseguo il progetto test mi viene fuori nell'area Console:
Citazione
[2014-05-07 11:09:17 - Spatialite-android-testTest] ------------------------------
[2014-05-07 11:09:17 - Spatialite-android-testTest] Android Launch!
[2014-05-07 11:09:17 - Spatialite-android-testTest] adb is running normally.
[2014-05-07 11:09:17 - Spatialite-android-testTest] Performing com.singletest.spatialite_android_testtest.MainActivity activity launch
[2014-05-07 11:09:17 - Spatialite-android-testTest] Automatic Target Mode: using existing emulator 'emulator-5554' running compatible AVD 'AVD_for_Samsung_i9300_siii'
[2014-05-07 11:09:20 - Spatialite-android-testTest] Application already deployed. No need to reinstall.
[2014-05-07 11:09:20 - Spatialite-android-testTest] Starting activity com.singletest.spatialite_android_testtest.MainActivity on device emulator-5554
[2014-05-07 11:09:23 - Spatialite-android-testTest] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.singletest.spatialite_android_testtest/.MainActivity }
[2014-05-07 11:09:23 - Spatialite-android-testTest] ActivityManager: Warning: Activity not started, its current task has been brought to the front

Come mai?
« Ultima modifica: 07 Maggio 2014, 11:17:10 CEST da pup3770, Reason: Merged DoublePost »

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Chiarezza Spatialite
« Risposta #9 il: 07 Maggio 2014, 11:33:15 CEST »
0
allora, con ordine:
1 - curiosità: Intendo salvare le coordinate nel db SQLITE con tipo numerico e non stringa, e double cosi da avere numeri decimali. Poi li invii ad un servizio rest fatto da te che li scrive (sul server) in un database Postgis, OracleSpatial o quel che vuoi. Cosi facendo i dati spaziali sarebbero sul server in formato spaziale e sul device in formato semplice.
2 - Il messaggio che ti viene fuori ti dice che l'app è già installata e no la reinstalla. Basta che la avvii dalla lista applicazioni.
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline pup3770

  • Utente junior
  • **
  • Post: 89
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s3
  • Sistema operativo:
    Android
Re:Chiarezza Spatialite
« Risposta #10 il: 07 Maggio 2014, 11:42:16 CEST »
0
...guarda il database nella mia app lo gestisco così:

Codice (Java): [Seleziona]
public class DataBaseHelper extends SQLiteOpenHelper {

        private static final String DATABASE_NAME = "coordinate";
        private static final int DATABASE_VERSION = 1;
       
        public DataBaseHelper(Context context) {
               
                super(context, DATABASE_NAME, null, DATABASE_VERSION);
               
        }

        @Override
        public void onCreate(SQLiteDatabase db_coordinate) {
                // TODO Auto-generated method stub
               
                String create = "";
                create += "CREATE TABLE coordinate (";
                create += "  latitudine TEXT,";
                create += "  longitudine TEXT)";
                db_coordinate.execSQL(create);

Le coordinate le prelevo e salvo, così:
Codice (Java): [Seleziona]
TextView providerText = (TextView) findViewById(R.id.provider_txt);
                providerText.setText("Sto usando il GPS");
 
 
            lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                    20000, // 20 seconds interval between updates
                    100, // 100 meters between updates
                    new LocationListener() {


                                        @Override
                                        public void onLocationChanged(Location location) {

                                               
                                        TextView latitudine = (TextView) findViewById(R.id.latitude_txt);
                                        TextView longitudine = (TextView) findViewById(R.id.longitude_txt);
 
                                        latitudine.setText("La latitudine è: "+String.valueOf(location.getLatitude()));
                                        longitudine.setText("La longitudine è: "+String.valueOf(location.getLongitude()));
 

                                        db_coordinate = new DataBaseHelper(getApplicationContext());
                                 
                                        String latitudine_db = "";
                                        String longitudine_db = "";
                                        latitudine_db = String.valueOf(location.getLatitude());
                                        longitudine_db = String.valueOf(location.getLongitude());
                                       
                                        ContentValues v = new ContentValues();

                                        v.put("latitudine", latitudine_db);    
                                        v.put("longitudine", longitudine_db);
                                        db_coordinate.getWritableDatabase().insert("coordinate", null, v);

                                        Toast.makeText(getApplicationContext(), "Coordinate salvate correttamente", Toast.LENGTH_SHORT).show();
                                       


quindi come STRINGHE. Quindi dovrei al posto di utilizzare le stringhe, utilizzare dati numerici?

Ma dici di salvare i dati su un database esterno, oppure bisogna inserire qualcosa nel progetto Eclipse (tipo un'activity come fatto per SQLite)?

Citazione
in un database Postgis, OracleSpatial o quel che vuoi

sono su server remoto o locale?

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Chiarezza Spatialite
« Risposta #11 il: 07 Maggio 2014, 11:59:22 CEST »
0
allora, le coordinate salvale come numerici nel db sqlite (non ha senso salvarle come text se sono numeri e se li tratti come numeri).

il discorso del db locale è solo per evitare di usare spatialite sul dispostivo e spostare la parte GIS e geospaziale su un server remoto.
E' una scelta implementativa che devi fare e dipende tutto dalle dimensioni e necessità del progetto
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline pup3770

  • Utente junior
  • **
  • Post: 89
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s3
  • Sistema operativo:
    Android
Re:Chiarezza Spatialite
« Risposta #12 il: 09 Maggio 2014, 11:04:56 CEST »
0
Guarda visto che è solo un progetto universitario non mi interessa lavorare in remoto, almeno al momento, magari se riuscissi a lavorare in locale, credo sia anche più semplice in fase di stesura del codice. In termini di dimensioni credo che devo recuperare 3 volte al giorno per 3 giorni diversi quindi sono:

1 giorno - 3 volte (latitudine, longitudine e altitudine)
2 giorno - 3 volte (latitudine, longitudine e altitudine)
3 giorno - 3 volte (latitudine, longitudine e altitudine)

quindi per un totale di 9 rilevazioni e quindi 27 celle, che è molto ridotto in termini di db.

Ma quindi se ho capito bene, SQLite è già inserito nell'App quindi tramite l'Activity accedo per salvare i dati e leggerli, adesso dovrei inserire Spatialite sempre nell'App in maniera tale che essendo entrambi nell'App risultano in Locale e posso accedere tranquillamente?

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Chiarezza Spatialite
« Risposta #13 il: 09 Maggio 2014, 12:59:56 CEST »
0
Non ho mica capito cosa intendi nell'ultimo paragrafo...

Inviato dal mio Nexus 4 utilizzando Tapatalk

IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline pup3770

  • Utente junior
  • **
  • Post: 89
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s3
  • Sistema operativo:
    Android
Re:Chiarezza Spatialite
« Risposta #14 il: 09 Maggio 2014, 15:07:32 CEST »
0
Nel senso che ancora non riesco ad entrare nell'ottica di Spatialite, mi spiego meglio. Visto che Spatialite è un'estensione di SQLite, come ho fatto precedentemente che ho incluso SQLite nel progetto (e quindi nell'App e nell'Activity) e quindi salva in locale i dati, altrettanto succederà con Spatialite quando salvo i dati ? Oppure verrà modificato il database SQLite con colonne in più particolari che includono i dati spaziali di Spatialite?